分布式数据库中间件Mycat读写分离与高可用

mysql主从复制配置  这是前提

 

相关参数

<!-- balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。 -->
	<!-- balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,
	简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备)
	正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。 -->
	<!-- balance="2",所有读操作都随机的在 writeHost、readhost 上分发 -->
	<!-- balance="3",所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。 -->
	
	<!-- writeType 写类型 
	0 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost
	1 所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
	2 不执行写操作 -->
	

	<!-- switchType 转换的类型
		-1 表示不自动切换
		1 默认值,自动切换
		2 基于 MySQL 主从同步的状态决定是否切换 心跳语句为 show slave status
		3 基于 MySQL galary cluster 的切换机制(适合集群) version>1.4.1-->
		
	<!-- switchType为2 Seconds_Behind_Master>slaveThreshold 时,读写分离筛选器会过滤掉此 Slave 机器-->

 

hostM 主,hostS从

1、当写挂了,读也不可用了。查询压力M1和S1都分配,插入从M1插

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" 
writeType="0" dbType="mysql" dbDriver="native">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="localhost:3306" user="root" password="123456">
        <readHost host="hostS1" url="localhost2:3306" user="root" password="123456" 
weight="1" />
    </writeHost>
</dataHost>

 

2、查询操作M1和S1都分配,插入从M1插入,当M1挂了,自动切换为S1,做插入操作。

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" 
writeType="0" dbType="mysql" dbDriver="native">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="localhost:3306" user="root" password="123456"></writeHost>
    <writeHost host="hostS1" url="localhost2:3306" user="root" password="123456"></writeHost>
</dataHost>

3、读写分离带检查切换机制。

Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running确定当前主从同步的状态

当 Seconds_Behind_Master>slaveThreshold 时,读写分离筛选器会过滤掉此 Slave 机器,防止读到很久之前的旧数据,而当Master宕机后,切换逻辑会检查 Slave 上的 Seconds_Behind_Master 是否为 0,

为 0 时则表示主从同步,可以安全切换,否则不会切换。

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" 
writeType="0" dbType="mysql" dbDriver="native" switchType="2"
slaveThreshold="100">
    <heartbeat>show slave status </heartbeat>
    <writeHost host="hostM1" url="localhost:3306" user="root" 
password="123456"></writeHost>
    <writeHost host="hostS1" url="localhost2:3306" user="root" 
password="123456" />
</dataHost>

4、1主 3 从的模式

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" 
writeType="0" dbType="mysql" dbDriver="native">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="localhost:3306" user="root" 
password="123456" >
        <readHost host="hostS2" url="localhost3:3306" user="root"
password="123456" />
        <readHost host="hostS3" url="localhos4t:3306" user="root"
password="123456" />
    </writeHost>
    <writeHost host="hostS1" url="localhost2:3306" user="root" password="123456" />
</dataHost>

5、双主双从模式

双主双从环境配置

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" 
writeType="0" dbType="mysql" dbDriver="native">
    <heartbeat>select user()</heartbeat>
    <writeHost host="hostM1" url="localhost:3306" user="root" password="123456" >
        <readHost host="hostS1" url="localhost2:3306" user="root"password="123456" />
    </writeHost>
    <writeHost host="hostM2" url="localhost3:3306" user="root" password="123456" >
        <readHost host="hostS2" url="localhost4:3306" user="root"password="123456" />
    </writeHost>
</dataHost>

 

6、基于 MySQL galary cluster 的切换机制

Mycat 心跳机制通过检测集群复制时延时,如果延时过大或者集群出现节点问题不会负载改节点。

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" 
writeType="0" dbType="mysql" dbDriver="native" switchType="3" >
    <heartbeat> show status like ‘wsrep%’</heartbeat>
    <writeHost host="hostM1" url="localhost:3306" 
user="root"password="123456"></writeHost>
    <writeHost 
host="hostS1"url="localhost2:3306"user="root"password="123456" ></writeHost>
</dataHost>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值