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>