Mycat读写分离

Mycat读写分离

Mycat不负责数据的同步问题,需要配置mysql端的主从同步(文末)

1.相关配置属性:

1.1balance属性:

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

1.2writeType属性 :

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

1.3switchType属性 :

1.switchType="-1" 表示不自动切换 
2.switchType="1"  默认值,自动切换 
3.switchType="2"  基于MySQL主从同步的状态决定是否切换 ,心跳语句为 show slave status 
4.switchType="3"  基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like ‘wsrep%’ 

2.配置

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
	<heartbeat>select user()</heartbeat>
	<writeHost host="hostM1" url="IP:3306" user="登录名" password="密码">
		<readHost host="hostS2" url="IP:3306" user="登录名" password="密码" /> 
	</writeHost>
</dataHost>
或者
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1">
	<heartbeat>select user()</heartbeat>
	<writeHost host="hostM1" url="IP:3306" user="登录名" password="密码"></writeHost>
    <writeHost host="hostS2" url="IP:3306" user="登录名" password="密码"></writeHost>
</dataHost>

上面两种配置方式第一种当写挂了读不可用,第二种可以继续使用,事务内部的一切操作都会走写节点,所以读操作不要加事务

如果读延时较大,使用根据主从延时的读写分离,或者强制走写节点(1.6版本之后):

强制走从: 

/*!mycat:db_type=slave*/ select * from travelrecord 
/*#mycat:db_type=slave*/ select * from travelrecord 

强制走写: 
 

/*#mycat:db_type=master*/ select * from travelrecord 
/*!mycat:db_type=master*/ select * from travelrecord

3.根据主从延时切换

Mycat 1.4 支持MySQL主从复制状态绑定的读写分离机制,让读更加安全可靠

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="2"                  
              slaveThreshold="100">
    <heartbeat>show slave status</heartbeat>
	<writeHost host="hostM1" url="IP:3306" user="登录名" password="密码">
	    <readHost host="hostS2" url="IP:3306" user="登录名" password="密码" />
	</writeHost>
</dataHost>

 switchType="2" 与  slaveThreshold="100",此时意味着开启MySQL主从复制状态绑定的读写分离与切换机制,Mycat心跳机
制通过检测 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三个字段来确定当前主从同步的状态以及Seconds_Behind_Master 主从复制时延, 当Seconds_Behind_Master>slaveThreshold 时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是否为0,为0时则表示主从同步,可以安全切换,否则不会切换

4.配置mysql的主从同步

4.1 Mysql主服务起master配置

1、修改主服务器配置:

#vi /etc/my.cnf       
binlog-do-db=db1
binlog-do-db=db2
binlog-do-db=db3
binlog-ignore-db = mysql
log-bin=mysql-bin  #启用二进制日志
server-id=158  #服务器唯一ID,一般取IP最后一段

2、重启mysql

/etc/init.d/mysql restart

3、建立帐户并授权slave:

#/usr/local/mysql/bin/mysql -u登录名 -p密码
mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';
mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456'; 

#一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

刷新权限

mysql> FLUSH PRIVILEGES;

4、登录主服务器的mysql,查询master的状态

mysql> show master status;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000010 |      106 | db1,db2,db3  | mysql            |

+------------------+----------+--------------+------------------+

Master 重启后会修改mysql-bin(序号加1)

4.2 Mysql从服务器slave配置

1、修改从服务器配置:

#vi /etc/my.cnf
replicate-do-db=db1
replicate-do-db=db2
replicate-do-db=db3
replicate-ignore-db=mysql
master-connect-retry=60
server-id=78
master-host=master的IP
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=60
#log-slave-updates
skip-slave-start 

#防止复制随着mysql启动而自动启动。即slave端的mysql服务重启后需手动来启动主从复制(slave start),最好加上,slave端数据库服务重启后手动启动slave比较安全 

2、重启MySQL

/etc/init.d/mysql restart

3、登录mysql并停止slave服务

# /usr/local/mysql/bin/mysql -u登录名 –p密码
mysql>slave stop;

设置与master服务器相关的配置参数

mysql>change master to master_host='10.1.176.158',master_user='backup', master_password='123456',MASTER_LOG_FILE='mysql-bin.000010',MASTER_LOG_POS=106;

注意:Master重启后slave 要修改MASTER_LOG_FILE,106无单引号。

启动从服务器复制功能

 mysql>start slave;    

ERROR 1201 (HY000):Could not initialize master info structure的问题

解决方案是:运行命令 stop slave;

成功执行后继续运行 reset slave;

4、检查从服务器复制功能状态

mysql> show slave status\G

以下两个参数必须为YES:

      Slave_IO_Running: Yes

      Slave_SQL_Running: Yes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mycat是一个开源的数据库中间件,可以实现MySQL的读写分离。下面是实现Mycat读写分离的步骤: 1. 下载Mycat:你可以从Mycat的官方网站下载Mycat的安装包。你可以使用以下命令下载Mycat的最新版本: ```shell wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-win.tar.gz ``` 2. 解压Mycat:使用以下命令解压下载的Mycat安装包: ```shell tar -zxvf Mycat-server-1.6.7.4-release-20200105164103-win.tar.gz ``` 3. 配置Mycat:进入Mycat的安装目录,编辑conf文件夹下的server.xml文件,配置Mycat读写分离规则。你可以根据你的需求配置多个读写分离规则,每个规则对应一个数据库。以下是一个示例配置: ```xml <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100"> <table name="user" primaryKey="id" dataNode="dn1,dn2" rule="mod-long" /> </schema> <dataHost name="dn1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="host1" url="jdbc:mysql://host1:3306/testdb" user="root" password="123456" /> <readHost host="host2" url="jdbc:mysql://host2:3306/testdb" user="root" password="123456" /> </dataHost> <dataHost name="dn2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="host3" url="jdbc:mysql://host3:3306/testdb" user="root" password="123456" /> <readHost host="host4" url="jdbc:mysql://host4:3306/testdb" user="root" password="123456" /> </dataHost> ``` 4. 启动Mycat:使用以下命令启动Mycat服务: ```shell ./mycat start ``` 5. 测试读写分离:使用MySQL客户端连接Mycat,并执行读写操作,Mycat会根据配置的读写分离规则将读操作转发到读库,写操作转发到写库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值