mycat部署

1.mysql 同步环境配置

在使用mycat管理一个mysql集群的时候经常需要使用主从数据复制的功能,以下是基于mysql5.5以上版本最新的主从配置。
开启mysql主从数据复制,主要在mysql的my.ini文件中设置;
windows系统一般在c:\ProgrameData\MySQL中;
Linux系统一般在 /etc/my.cnf中;
1.1-1.4将给出一个双向同步的配置步骤。

1.1 M1数据库服务器配置

server-id=1  ##主库和从库的server-id一定要不同
lower_case_table_names=1 ##让mysql不区分大小写
log-bin=mysql-bin
binlog-do-db=test       ##只同步test数据库
binlog-ignore-db=mysql   ##避免同步mysql用户配置,以免不必要的麻烦

1.2 M2数据库服务器配置

server-id=101
lower_case_table_names=1 ##让mysql不区分大小写
log-bin=mysql-bin
replicate-do-db= test ##指定只同步的数据库
replicate-ignore-db=mysql ##屏蔽对mysql用户配置的同步,以免不必要的麻烦

1.3 M1 同步到 M2

1.3.1 M1上创建一个用户

mysql> grant replication slave,file on *.* to testuser@' 60.205.182.32' identified by 'm01123456'; 
## 说明:“m01”为给备服务创建的一个用户,“m01123456”为密码
mysql> flush privileges;
mysql> show master status\G;
*************************** 1. row ***************************
File: master-bin.000031
Position: 909
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified

1.3.2 在M2数据库服务器上给M1服务器授权

mysql>
change master to master_host=' 60.205.182.32',master_port=33061,master_user=testuser,
master_password='m01123456', master_log_file='master-bin.000009', master_log_pos=106;
mysql> slave start;
show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 60.205.182.32
                  Master_User: testuser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 106
               Relay_Log_File: hansc-pc-relay-bin.000002
                Relay_Log_Pos: 251
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: Yes ## Slave_IO_Running,Slave_SQL_Running 为
            Slave_SQL_Running: Yes ## Yes表示设置成功
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 106
              Relay_Log_Space: 409
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
1 row in set (0.00 sec)

1.4 M2 同步到 M1

1.4.1 M1上创建一个用户

详细步骤参考1.3.1。

1.4.2 在M2数据库服务器上给M1服务器授权

详细步骤参考1.3.2。

2.mycat 配置简介及配置

2.1 安装(linux)

下载:http://pan.baidu.com/s/1jHZTIR0 
解压:tar xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 
启动:./bin/startup_nowrap.sh 
默认数据库的端口为8066,管理端口为9066 

2.2 配置及说明

2.2.1 server.xml(需要配置)

配置数据库名称、用户名、密码,G2系统JDBC要使用这个数据库名称;详细参考mycat使用指南。 
例如:配置一个用户名为root,密码为101202,可访问的数据库为TESTDB 

<user name="root">
    <property name="password">101202</property>
    <property name="schemas">TESTDB</property>
</user>
    gbpDataSource.url=jdbc\:mysql\://localhost\:8066/TESTDB?characterEncoding\=UTF-8&useOldAliasMetadataBehavior\=true
    gbpDataSource.user=root
    gbpDataSource.password=101202

2.2.2 rule.xml (需要配置)

分片规则,列出了常用的分片策略。
例如:

<tableRule name="sharding-by-murmur">
    <rule>
        <columns>config_id</columns>
        <algorithm>murmur</algorithm>
    </rule>
</tableRule>

2.2.3 server.xml(需要配置)

Schema.xml 作为 MyCat 中重要的配置文件之一,管理着 MyCat 的逻辑库、表、分片规则、 DataNode 以及 DataSource。是正确使用 MyCat 的前提。

3.双主双从模式

上图仅为一个分片的关系图。
1、M1和M2 之间是双向同步,M1和S1是单向同步,M2和S2 是单向同步。 
2、M1,M2,S1,S2读写分离 
3、M1挂掉,主数据库会切换到M2 
4、schema文件配置: 

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- 双主双从模式-->
	<schema name="TESTDB" dataNode="dn2">
		<table name="g2_t_attach_config" dataNode="dn1,dn2" rule="sharding-by-murmur" primaryKey="config_id"/>
	</schema>
	<dataNode name="dn1" dataHost="60.205.182.31" database="test" />	
	<dataNode name="dn2" dataHost="192.168.1.91" database="test" />
	<!-- 分片 1 -->
	<dataHost name="60.205.182.31" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
		<heartbeat>show slave status</heartbeat>
		<!-- 读写 分离-->
		<writeHost host="hostM1" url="60.205.182.31:3306" user="root" password="root">
			<readHost host="hostS1" url="60.205.182.32:3306" user="root"
			password="root" /> 
		</writeHost>
		<writeHost host="hostM2" url="60.205.182.33:3306" user="root" password="root">
			<readHost host="hostS2" url="60.205.182.34:3306" user="root"
			password="root" /> 
		</writeHost>
	</dataHost>
	<!-- 分片 2 -->
	<dataHost name="192.168.1.91" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
		<heartbeat>show slave status</heartbeat>
				<writeHost host="hostM11" url="192.168.1.90:3306" user="root" password="root">
			<readHost host="hostS11" url="192.168.1.91:3306" user="root"
			password="root" /> 
		</writeHost>
		<writeHost host="hostM22" url="192.168.1.92:3306" user="root" password="root">
			<readHost host="hostS22" url="192.168.1.93:3306" user="root"
			password="root" /> 
		</writeHost>
	</dataHost>
</mycat:schema>

4.主从复制模式

上图仅为一个分片的关系图。 
1、主从复制模式就是只保留双主双从模式的<wirteHost />去掉<readHost /> 。 
2、M1 和 S1之间是双向同步,M1挂掉,S1变成主。 
3、M1,S1读写分离 
4、schema文件配置: 

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!-- 主从复制模式-->
	<schema name="TESTDB" dataNode="dn2">
		<table name="g2_t_attach_config" dataNode="dn1,dn2" rule="sharding-by-murmur" primaryKey="config_id"/>
	</schema>
	<dataNode name="dn1" dataHost="127.0.0.1" database="g2" />	
	<dataNode name="dn2" dataHost="60.205.182.32" database="test" />
	<!-- 分片 1 -->
	<dataHost name="60.205.182.32" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
		<heartbeat>show slave status</heartbeat>
		<!-- 读写 分离-->
		<writeHost host="hostM1" url="60.205.182.32:3306" user="root" password="101202">
		</writeHost>
		<!-- 从(备)-->
		<writeHost host="hostS1" url="127.0.0.1:3306" user="root" password="101202">
		</writeHost>
	</dataHost
	<!-- 分片 2 -->
	<dataHost name="127.0.0.1" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="2"  slaveThreshold="100">
		<heartbeat>show slave status</heartbeat>
		<writeHost host="hostM2" url="127.0.0.1:3306" user="root" password="101202">
		</writeHost>
		<writeHost host="hostS2" url="60.205.182.32:3306" user="root" password="101202">
		</writeHost>
	</dataHost>
</mycat:schema>

5.writeHost标签属性介绍

5.1 设置balance="1"与writeType="0"

5.1.1 Balance参数设置:

负载均衡类型,目前的取值有3种:
1、balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
2、 balance=“1”,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1→S1,M2→S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。
3、balance=“2”,所有读操作都随机的在writeHost、readhost上分发。

5.1.2 WriteType参数设置:

1、 writeType=“0”,所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个writeHost。如果都挂了,那就悲剧了,起来哪个,写哪个,很有可能数据不一致;所以不要数据库恢复之后不要让mycat切回。
2、writeType=“1”,所有写操作都随机的发送到配置的writeHost。
3、writeType=“2”,没实现。
readHost是从属于writeHost的,即意味着它从那个writeHost获取同步数据,因此,当它所属的writeHost宕机了,则它也不会再参与到读写分离中来,即“不工作了”,这是因为此时,它的数据已经“不可靠”了。基于这个考虑,目前mycat 1.3和1.4版本中,若想支持MySQL一主一从的标准配置,并且在主节点宕机的情况下,从节点还能读取数据,则需要在Mycat里配置为两个writeHost并设置banlance=1。

5.2 设置 switchType="2" 与slaveThreshold="100"

Mycat心跳检查语句配置为 show slave status ,dataHost 上定义两个新属性: switchType=“2” 与slaveThreshold=“100”,此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制。Mycat心跳机制通过检测 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”,“Slave_SQL_Running” 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master主从复制时延。

6.单节点模式选择分析及部署方案

6.1 分析

1、双主双从模式适用于单个节点压力比较大的时候。 
2、主从复制模式适用单个节点压力不是特别大。
3、现有的需求不侧重于单节点的压力比较大,侧重于分库分表,读写分离
故采用主从复制模式

6.2 一种部署方案(采用4个分片)

1、采用单分片主从复制。 
2、一台主机部署两个分片(mycat支持一台主机部署多个分片)。 
3、需要5台机器 
4、分片图 
5、机器部署 

Mycat 部署在192.168.29.10上;
M1,M2 部署在192.168.29.11上;
S1,S2 部署在192.168.29.12上;
M3,M4 部署在192.168.29.13上;
S3,S4 部署在192.168.29.14上;

注意:4分片,然后每个分片部署两个数据库仅作参考。具体的配置,受机器配置、机器数量、并发量等影响。

7.资料下载

包括一些mycat的官方文档,地址:http://pan.baidu.com/s/1jHZTIR0

8.常见问题

1、Could not find first log file name in binary log index file'的解决办法 
参考 http://blog.csdn.net/billfanggs/article/details/8905991 
2、Got fatal error 1236 from master when reading data from binary log 
参考http://blog.csdn.net/edwzhang/article/details/17226975 
3、error code 1146 > Error 'Table 'tts.t2' doesn't exist' on query. Default database: 'test'. Query: 'i 
参考http://blog.csdn.net/snowpay/article/details/52313025 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值