Mycat(1)—— Linux环境部署MyCAT数据库

使用 Vmware 11. 创建虚拟机

vm 机器的操作系统是CentOS 6.5

vm的具体参数如下:

注意修改虚拟机的时间:time zone

创建VM后先安装jdk 1.8

wget --no-check-certificate --no-cookie --header "Cookie: oraclelicense=accept-securebackup-cookie;" http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.rpm

 

之后 安装

rpm -ivh jdk-8u45-linux-x64.rpm

安装完毕后 java -version 检验安装

 

之后再这个虚拟机上安装mysql.(参考mysql on centOS, mysql 主从配置)

tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

之后下载 mycat server for linux.

mycat 放入 /urs/local/mycat 目录下

创建系统用户和组

 

groupadd mycat

adduser -r -g mycat mycat

chown -R mycat.mycat /usr/local/mycat  //修改mycat目录所属mycat用户

vi /etc/profile 加入:

MYCAT_HOME=/usr/local/mycat

执行source  /etc/profile命令,使环境变量生效

开放防火墙端口

添加需要监听的端口

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

保存设置

/etc/init.d/iptables save

查看状态

/etc/init.d/iptables status

配置环境变量:

cd /usr/local/mycat/

vim /usr/local/mycat/.bash_profile

输入:

export MYCAT_HOME=/usr/local/mycat

PATH=$PATH:$MYCAT_HOME/bin

之后 生效

source .bash_profile

验证配置:

启动mycat /usr/local/mycat/bin/mycat start

查看mycat 是否正常开启 命令:

ps -ef |grep mycat

 

说明mycat 没有正常启动。

之后到

/usr/local/mycat/logs 下查看wrapper.log

vim /usr/local/mycat/logs/wrapper.log

看到:

之后看看配置文件中需要 配置的host name.

vim /usr/local/mycat/conf/schema.xml

需要修改hosts 文件

vim /etc/hosts

127.0.0.1 hostM1 hostS2

之后再次开启 /usr/local/mycat/bin/mycat start

 ps -ef |grep mycat  这次启动成功。

之后尝试连接 发现 密码不对 需要去 /usr/local/mycat/conf/server.xml

vim /usr/local/mycat/conf/server.xml

配置登录mycat mysql user password. (server.xml,schema.xml的配置会在后面进行详细的解释)

配置多个schema

修改 /usr/local/mycat/conf/server.xml

<user name="root">

<property name="password">123456</property>

<!--<property name="schemas">TESTDB</property>-->

<property name="schemas">imove,manage,imanage</property>

 

<!-- 表级 DML 权限设置 -->

<!--

<privileges check="false">

<schema name="TESTDB" dml="0110" >

<table name="tb01" dml="0000"></table>

<table name="tb02" dml="1111"></table>

</schema>

</privileges>

 -->

</user>

 

<user name="user">

<property name="password">user</property>

<property name="schemas">imove,manage,imanage</property>

<property name="readOnly">true</property>

</user>

 

 修改 /usr/local/mycat/conf/schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <!--<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>-->
    <schema name="imove" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
    <schema name="manage" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema>
    <schema name="imanage" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3"></schema>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
        /> -->
    <dataNode name="dn1" dataHost="localhost1" database="imove" />
    <dataNode name="dn2" dataHost="localhost1" database="manage" />
    <dataNode name="dn3" dataHost="localhost1" database="imanage" />
    <!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
     <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
    <dataNode    name="jdbc_dn2" dataHost="jdbchost" database="db2" />
    <dataNode name="jdbc_dn3"     dataHost="jdbchost" database="db3" /> -->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <!-- can have multi write hosts -->
        <writeHost host="hostM1" url="localhost:3306" user="root"
                   password="123456">
            <!-- can have multi read hosts -->
            <!--<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />-->
            <readHost host="hostS2" url="localhost:3306" user="root" password="123456" />
        </writeHost>
        
        <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
    </dataHost>
    <!--
        <dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
        <heartbeat>         </heartbeat>
         <writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng"     password="jifeng"></writeHost>
         </dataHost>

      <dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0"     dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
        <connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
        <writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base"     password="123456" > </writeHost> </dataHost>

        <dataHost name="jdbchost" maxCon="1000"     minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
        <heartbeat>select     user()</heartbeat>
        <writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>

        <dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
        <heartbeat> </heartbeat>
         <writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng"     password="jifeng"></writeHost> </dataHost> -->

    <!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
        dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
        url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
        </dataHost> -->
</mycat:schema>

另一种情况:三个数据库schema配置一个schema(利用切片规则  伪切片)

启动mycat

/usr/local/mycat/bin/mycat start

停止mycat

/usr/local/mycat/bin/mycat stop

修改 schema.xml 文件 mycat/conf/schema.xml

下面的配置中的 schema 节点。

 

验证schema配置成功:

mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dimove

mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dmanage

mysql -uroot -p123456 -h127.0.0.1 -P8066 -Dimanage

说明:

-u 用户名

-p 密码

-h IP地址

-P 端口号

-D 数据库实例schema

 

如果全局查询三个schema(不用指明-D):

mysql -uroot -p123456 -h127.0.0.1 -P8066

mysql> select * from manage.usersinfo

 

 

          mycat相关配置

1. scheme.xml配置文件

 

schema 等于在mycat里定义一个逻辑库

mycat可以有多个逻辑库。

schema标签的相关属性: 属性名

数量限制

dataNode

任意String

(0..1)

checkSQLschema

Boolean

(1)

sqlMaxLimit

Integer

(1)

 

dataNode: 

该属性用于绑定逻辑库到某个具体的database上,

checkSQLschema: 

如果设置为Yesmycat 会对select * from TestDB.table1 自动改成 select * from table1 以(避免在mycat中查询数据库的时候需要ERROR 1146 (42S02):Table TestDB.table1 doesn’t exist

sqlMaxLimit: 

对于没有limitselect语句会自动对sql语句添加limit

 

table 标签:

定义需要拆分的表的具体细节。

 

属性名

数量限制

name

String

(1)

dataNode

String

(1..*)

rule

String

(0..1)

ruleRequired

boolean

(0..1)

primaryKey

String

(1)

type

String

(0..1)

autoIncrement

boolean

(0..1)

subTables

String

(1)

needAddLimit

boolean

(0..1)

 

name: 

等于表名。

 

dataNode: 

这个表所属的dataNode

 

primaryKey: 

该逻辑表对于真实表的主键

 

type: 

定义了表的类型:有global和普通表两种类型

 

dataNode 标签

 

 

dataNode:

 标签就是一个独立的数据分片。

 

name: 

schematable 标签中使用的dataNode相对应。

 

dataHost 

这个dataNode对应数据库的host,

 

dataHost 标签

定义了具体的数据库实例、读写分离配置和心跳语句。

属性名

数量限制

name

String

(1)

maxCon

Integer

(1)

minCon

Integer

(1)

balance

Integer

(1)

writeType

Integer

(1)

dbType

String

(1)

dbDriver

String

(1)

 

name

 datahost 的唯一标示,在其他标签中需要dataHost属性的时候便使用这个属性做引用。

maxCon: 

连接池的最大连接数。

minCon:

 连接池的最小连接数。用了初始化连接池

 

balance:

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

2. balance="1",全部的readHoststand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1M2->S2,并且M1M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

3. balance="2",所有读操作都随机的在writeHostreadhost上分发。

4. balance="3",所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3没有。

 

writeType:

负载均衡类型,目前的取值有3种:

1. writeType="0", 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

2. writeType="1",所有写操作都随机的发送到配置的writeHost1.5以后废弃不推荐。switchType属性

- -1 表示不自动切换

- 1 默认值,自动切换

- 2 基于MySQL主从同步的状态决定是否切换

 

dbType: 使用数据库的类型,支持二进制的mysql协议,还有其他JDBC连接的数据库。如:

mongodb, oracle, spark, sqlserver等。

 

dbDriver:

指定连接后端数据库使用的Driver,目前可选的值有nativeJDBC。使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysqlmaridb。其他类型的数据库则需要使用JDBC驱动来支持。

1.6版本开始支持postgresqlnative原始协议。

如果使用JDBC的话需要将符合JDBC 4标准的驱动JAR包放到MYCAT\lib目录下,并检查驱动JAR包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的Driver类名,例如:com.mysql.jdbc.Driver

 

switchType:

-1 表示不自动切换

1 默认值,自动切换

2 基于MySQL主从同步的状态决定是否切换

心跳语句为 show slave status

3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1

心跳语句为 show status like wsrep%.

 

heartbeat标签

用于指明和后端数据库进行心跳检查的语句。例如:mysql select user(), oracle 使用select 1 from dual.

 

writeHost 标签、readHost标签

这两个标签都是用于配置mysql实例。每个标签都可以指定一个后端的数据库。

writeHost指定写实例、readHost指定读实例。

一个dataHost内可以有多个writeHostreadHost标签。

属性名

数量限制

host

String

(1)

url

String

(1)

password

String

(1)

user

String

(1)

weight

String

(0-1)

usingDecrypt

String

(0-1)

 

host

用于标示不同实例。

 

url:

如果是nativedbDriver 可以配置为 address:port。用JDBC或者其他dbDriver,则需要特殊指定。如:jdbc:mysql://localhost:3306/

 

password:

实际数据库的登录密码。

 

user:

实际数据库的用户

 

weight:

权重 配置在readhost 中作为读节点的权重(1.4以后)

 

usingDecrypt:

是否对密码加密默认0 否 如需要开启配置1,同时使用加密程序对密码加密,加密命令为:

 

执行mycat jar 程序(1.4.1以后):

 java -cp Mycat-server-1.4.1-dev.jar org.opencloudb.util.DecryptUtil 1:host:user:password

Mycat-server-1.4.1-dev.jar mycat download 下载目录的jar

 1:host:user:password 1 db端加密标志,hostdataHost host 名称

 

2. server.xml 配置文件

这里面包含所有mycat 的配置信息。

user标签

这个标签用于定义登录mycat的用户和权限。

 

 

 

对于mysql版本5.1以后的版本,可以通过以下方式启动日志记录。能够记录下包括应用程序执行的sql语句。

MariaDB [(none)]> SET GLOBAL log_output = 'TABLE';

Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> SET GLOBAL general_log = 'ON';

Query OK, 0 rows affected (0.00 sec)

 

show databases;

 

use mysql

 select * from general_log  order by event_time desc limit 50;

 

关闭命令:  service iptables stop

        永久关闭防火墙:chkconfig iptables off

 

 

 

为了可以查看读写分离的效果去 mycat 修改log4jlogger level info改成 debug

 

 

备选方案:

Atlas: 下载地址:

https://github.com/Qihoo360/Atlas/releases 

 

sudo rpm -i Atlas-XX.el6.x86_64.rpm

修改配置文件:

/usr/local/mysql-proxy/conf/test.cnf

4. 配置例子

[mysql-proxy]

 

#必须 ,管理端口使用的用户名

admin-username = user

#必须 ,管理端口使用的密码

admin-password = pwd

#必须 ,主数据库的地址:

proxy-backend-addresses = 192.168.0.12:3306

 

# 非必须 ,从数据库的地址:

# The number behind '@'represents the weight used by load balance for reading,

# the default weight is 1. If you want the master backend also can process the read requests,

# add its ip:port to this configuration option.

proxy-read-only-backend-addresses = 192.168.0.13:3306@2

 

# (必须) 设置用了登录主、从数据库的用户名和密码

# 密码不是明文 需要使用 /usr/loca/mysql-proxy/bin/encrypt. 进行加密。

# For example, the username is: myuser, and the password is:mypwd (encrypted ciphertext is:HJBoxfRsjeI=).

pwds = myuser:HJBoxfRsjeI=,myuser2:RePBqJ+5gI4=

 

# (必须) 如果是true , atlas 就用daemon模式启动.

daemon = true

 

# (必须) Atlas will start two processes when the value set true,

# one is monitor process, another is the work process. The monitor process will restart the work process

# automatically when the work process crash unexpectedly.

# If the value set false, Atlas will only start the work process.

keepalive = true

 

# (必须,按照实际情况进行配置) The count of work threads in work process.

# set the value equal to twice of cpu cores

event-threads = 4

 

# (必须, 使用默认值就可以) Log level: message, warning, critical, error, debug

log-level = message

 

# (必须, 使用默认值就可以) Log file path

log-path = /usr/local/mysql-proxy/log

 

# (必须) sql 日志的配置.

#     ON          : log the sql to the log file with buffer.

#     OFF         : not log the sql.

#     REALTIME    : log the sql to the log file without buffer.

sql-log = REALTIME

 

# (必须, 按照实际情况进行配置) 日志里慢速sql的设置.

# 当设置了这个参数的时候日志里只显示运行时间超过设置的sql.

# 否则会显示所有sql

#sql-log-slow = 10

 

# (必须, 按照实际情况进行配置) 关闭和客户端的连接,

# 在设置的时间“wait-timeout”之后

wait-timeout =  10

 

# (必须, 使用默认值就可以) Atlas的端口

proxy-address = 0.0.0.0:1234

 

# (必须, 使用默认值就可以) Atlas 管理端口

admin-address = 0.0.0.0:2345

 

# (非必须, 按照实际情况进行配置) Shard table setting.

# In this case, person is the database name, mt is the table name, id is the shard key,

# the shard table count is 3,and you should create table mt_0, mt_1, mt_2 in mysql manually.

# If you have more shard table,you can set them and separated by commas.

#tables = person.mt.id.3

 

# (非必须,按照实际情况进行配置)字符集,

# 如果不设置 字符集为:latin1.

charset = utf8

 

# (非必须) 允许连接Atlas 的客户端地址

# 如果没有就默认允许所有的IP访问

#client-ips = 127.0.0.1, 192.168.1

 

# (非必须,不要设置这个参数) 如果你使用了client-ips 设置,

#并且客户端是通过LVS 连接Atlas,

#那你才需要设置lvs-ips, LVS的真实IP放在这里.

#lvs-ips = 192.168.1.1

Tips:

 

修改完配置文件后,运行下面的命令开启 atlas:

/usr/local/mysql-proxy/bin/mysql-proxyd test start

使用下面的命令登录atlas, 然后可以像使用MySQL那样进行 sql 查询

mysql -h127.0.0.1 -umyuser -pmypwd -P1234;

使用下面的命令登录atlas管理

mysql -h127.0.0.1 -uuser -ppwd -P2345;

管理接口支持的命令可以通过下面的sql 查询

select * from help;

 

转载于:https://www.cnblogs.com/xushuyi/articles/6623557.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值