一、多主综述
1、概述
多主配置,可以简单看成单主单从配置的升级,是slave数据库也具有可写权限并同步到master数据库中。
2、配置
这个配置在web系统架构-mysql主从同步配置(单主单从)基础上反向在配置一次,可以反向同步即可,具体可以参考上篇博文,这里不再赘述。
需要注意几点:
1)在配置的时候不能直接在my.cnf填写master-host等参数,Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数,在从库上执行如下命令;
change master to master_host='masterIP', master_user='slave', master_password='slvaePASS';
才可以,否则会报错。
2)关于两个数据库同时插入的时候,同一张表出现自动增长的id重复问题
我们只要保证两台服务器上插入的自增长数据不同就可以了
如:A插入奇数ID,B插入偶数ID,当然如果服务器多的话,你可以定义算法,只要不同就可以了
在这里我们在A,B上加入参数,以实现奇偶插入
A:my.cnf上加入参数
auto_increment_increment=2
auto_increment_offset=1
这样A的auto_increment字段产生1,3,5,7,9.....
B:my.cnf上加入参数
auto_increment_increment=2
auto_increment_offset=2
这样B的auto_increment字段产生的数值是:2, 4, 6, 8, …等偶数ID
可以看出,你的auto_increment字段在不同的服务器之间绝对不会重复,所以Master-Master结构就没有任何问题了。当然,你还可以使用3台,4台,或者N台服务器,只要保证auto_increment_increment = N 再设置一下auto_increment_offset为适当的初始值就可以了,那样,我们的MySQL可以同时有几十台主服务器,而不会出现自增长ID重复。
二、负载均衡
网上有几种实现方式
1、nginx
2、节点管理
具体实现方式可以搜索,我下面介绍一种实现方式
3、dns切换
这种方式是配置双主多从的方式,如果是写入时只对一台进行写入,如果发生问题,可以进行dns切换,这种方式能避免多重写入和同步的时候发生数据异常。
常用的方式比如keepalived等。