`
xiaolin0199
  • 浏览: 567364 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

mysql双机master测试

 
阅读更多

测试环境

写道
服务器A:192.168.0.219
服务器B:192.168.0.8

A,B已设置为互为主从备份,测试数据库为test-xf

现test-xf库有数据表tb_mobile

 

测试一:停掉某台mysql服务

A:sudo /etc/init.d/mysql stop
xiaofei@xiaofei-desktop:~$ sudo /etc/init.d/mysql stop
[sudo] password for xiaofei: 
Shutting down MySQL
.. * 
我停掉A服务器的mysql服务.

接着我向B服务器的tb_mobile表中插入新数据,然后再开启A服务器看状态如何.
B库中tb_mobile表现在如图B_old,插入一条88888888的数据之如B_new



 

 

写道
现在A服务器是mysql的服务是停止的.如A_old



 

写道
我们重新启动A服务器的mysql服务;
xiaofei@xiaofei-desktop:~$ sudo /etc/init.d/mysql start
Starting MySQL
.. *
我们再进A服务器的test-xf库下的tb_mobile表中看看.如图:A_new



 

写道
我们发现A服务器的数据已经自动同步了.同样,我停掉B的mysql服务后,往A插入数据,恢复B后,数据也已经自动同步了.

 

 

 

测试二:断网测试同时为测试表加上一个ID的自增字段

写道
有种预感,有了自增变量后,在双方不通的情况下,双方都有增加数据,恢复通讯后同步会出现问题.

我在断开本机网络之后.先在A(本机)插入一条数据,id=19
去到另一台机打开B查看此时还没有同步,我再B上插入一条数据,id就=20了,
这时放开网络后,二边都同步了,至于为什么B的自增ID已20开始,肯定是某些设置参数的原因.

刚才是插入奇数条数据(1条)测试,接着我插入偶数(2条)来测试一下.
断网之后,我先在B上插入二条数据,id=22,id=24
随后我去A上插入二条数据,id=21,id=23.
通讯之后,二边同步成功.

查找原因:
多次插入数据后发现.A自增id是奇数,step=1,B自增id是偶数,step=1.
比如:现在A,B二边数据一样,最大id=26.你在A插入一条数据后,id=27,再插入一条,id=29,以此类推...
当id=29后,你去B中插入数据,id=30,再插入id=32,以此类推....

是这么二个参数对自增字段起的作用..
A:
auto_increment_offset = 1
auto_increment_increment = 2
B:
auto_increment_offset = 2
auto_increment_increment = 2

auto_increment_offset和auto_increment_increment
  auto_increment_increment和auto_increment_offset用于主-主服务器(master-to-master)复制,并可以用来控制AUTO_INCREMENT列的操作。两个变量均可以设置为全局或局部变量,并且假定每个值都可以为1到65,535之间的整数值。将其中一个变量设置为0会使该变量为1。
  这两个变量影响AUTO_INCREMENT列的方式:auto_increment_increment控制列中的值的增量值,auto_increment_offset确定AUTO_INCREMENT列值的起点。
  如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值被忽略。例如:表内已有一些数据,就会用现在已有的最大的自增值做为初始值。


假如我们现在有四台机器那设置应该如下:
A:
auto_increment_offset = 1
auto_increment_increment = 4
B:
auto_increment_offset = 2
auto_increment_increment = 4
C:
auto_increment_offset = 3
auto_increment_increment = 4
D:
auto_increment_offset = 4
auto_increment_increment = 4


但是这样设置的话那id不是跳得很厉害 :)

 

 

测试三:当一台机器当掉后,另一台机器能否接任

写道
当掉A机,继续向A机写数据,会是什么情况?B机会不会接管,数据会不会写到B机?

**结果是不会,当掉一台机后,你继续往它写数据,只能是提示你不能连接.数据也无法写入.

 

写道
关于MySQL-HA,目前有多种解决方案,比如heartbeat、drbd、mmm、共享存储,但是它们各有优缺点。
heartbeat、drbd配置较为复杂,需要自己写脚本才能实现MySQL自动切换,对于不会脚本语言的人来说,这无疑是一种脑裂问题;
对于mmm,生产环境中很少有人用,且mmm 管理端需要单独运行一台服务器上,要是想实现高可用,就得对mmm管理端做HA,这样无疑又增加了硬件开支;
对于共享存储,个人觉得MySQL数据还是放在本地较为安全,存储设备毕竟存在单点隐患。

使用MySQL双master+keepalived是一种非常好的解决方案,在MySQL-HA环境中,MySQL互为主从关系,这样就保证了两台MySQL数据的一致性,
然后用keepalived实现虚拟IP,通过keepalived自带的服务监控功能来实现MySQL故障时自动切换。

 

参考:

http://kb.cnblogs.com/page/83944/ 

http://xiaolin0199.iteye.com/blog/2017997

 

  • 大小: 11.6 KB
  • 大小: 13.2 KB
  • 大小: 28.5 KB
  • 大小: 13.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics