yeskery

MySQL高可用性之 KeepAlived+MySQL(双主热备)

双机热备

从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一台服务器承担服务任务,从而在不需要人工干预的情况下,自动保证系统能持续提供服务。

从狭义上讲,双机热备就是使用互为备份的两台服务器共同执行同一服务,其中一台主机为工作机(Primary Server),另一台主机为备份主机(Standby Server)。在系统正常情况下,工作机为应用系统提供服务,备份机监视工作机的运行情况(一般是通过心跳诊断,工作机同时也在检测备份机是否正常),当工作机出现异常,不能支持应用系统运营时,备份机主动接管工作机的工作,继续支持关键应用服务,保证系统不间断的运行。双机热备针对的是IT核心服务器、存储、网络路由交换的故障的高可用性解决方案。

为什么要进行双机热备?

双机热备服务针对的是服务器的故障。服务器的故障可能由各种原因引起,如设备故障、操作系统故障、软件系统故障等等。一般地讲,在技术人员在现场的情况下,恢复服务器正常可能需要10分钟、几小时甚至几天。从实际经验上看,除非是简单地重启服务器(可能隐患仍然存在),否则往往需要几个小时以上。而如果技术人员不在现场,则恢复服务的时间就更长了。

而对于一些重要系统而言,用户是很难忍受这样长时间的服务中断的。因此,就需要通过双机热备服务,来避免长时间的服务中断,保证系统长期、可靠的服务。

当然,决定是否使用双机热备,正确的方法是要分析一下系统的重要性以及对服务中断的容忍程度,以些决定是否使用双机热备。换句话说,就是你的用户能容忍多长时间恢复服务,如果服务不能恢复会造成多大的影响。

在考虑双机热备时,需要注意,一般意义上的双机热备都会有一个切换过程,这个切换过程可能是一分钟左右。在切换过程中,服务是有可能短时间中断的。但是,当切换完成后,服务将正常恢复。因此,双机热备不是无缝、不中断的,但它能够保证在出现系统故障时,能够很快恢复正常的服务,业务不致受到影响。而如果没有双机热备,则一旦出现服务器故障,可能会出现几个小时的服务中断,对业务的影响就可能会造成很严重的损失。

配置两台 MySQL 主主同步

环境描述:

  • OS:CentOS6.5_X64

  • MASTER:192.168.0.202

  • BACKUP:192.168.0.203

  • VIP:192.168.0.204

  1. [root@master ~]# yum install mysql-server mysql -y
  2. [root@master ~]# service mysqld start
  3. [root@master ~]# mysqladmin -u root password 123.com
  4. [root@master ~]# vi /etc/my.cnf #开启二进制日志,设置id
  5. [mysqld]
  6. server-id = 1 #backup这台设置2
  7. log-bin = mysql-bin
  8. binlog-ignore-db = mysql,information_schema #忽略写入binlog日志的库
  9. auto-increment-increment = 2 #字段变化增量值
  10. auto-increment-offset = 1 #初始字段ID为1
  11. slave-skip-errors = all #忽略所有复制产生的错误
  12. [root@master ~]# service mysqld restart

查看 log bin 日志和 pos 值位置

KeepAlived_MySQL_Step_1

master 配置如下

  1. [root@ master ~]# mysql -u root -p123.com
  2. mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication';
  3. mysql> flush privileges;
  4. mysql> change master to
  5. -> master_host='192.168.0.203',
  6. -> master_user='replication',
  7. -> master_password='replication',
  8. -> master_log_file='mysql-bin.000002',
  9. -> master_log_pos=106; #对端状态显示的值
  10. mysql> start slave; #启动同步

backup 配置如下

  1. [root@backup ~]# mysql -u root -p123.com
  2. mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.0.%' IDENTIFIED BY 'replication';
  3. mysql> flush privileges;
  4. mysql> change master to
  5. -> master_host='192.168.0.202',
  6. -> master_user='replication',
  7. -> master_password='replication',
  8. -> master_log_file='mysql-bin.000002',
  9. -> master_log_pos=106;
  10. mysql> start slave;

主主同步配置完毕,查看同步状态 Slave_IOSlave_SQLYES 说明主主同步成功。

KeepAlived_MySQL_Step_2

在master插入数据测试下:

KeepAlived_MySQL_Step_3

在backup查看是否同步成功:

KeepAlived_MySQL_Step_4

可以看到已经成功同步过去,同样在 backup 插入到 user 表数据,一样同步过去,双主就做成功了。

配置 KeepAlived 实现热备

  1. [root@backup ~]# yum install -y pcre-devel openssl-devel popt-devel #安装依赖包
  2. [root@master ~]# wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
  3. [root@master ~]# tar zxvf keepalived-1.2.7.tar.gz
  4. [root@master ~]# cd keepalived-1.2.7
  5. [root@master ~]#./configure --prefix=/usr/local/keepalived
  6. make && make install

将 KeepAlived 配置成系统服务

  1. [root@master ~]# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
  2. [root@master ~]# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
  3. [root@master ~]# mkdir /etc/keepalived/
  4. [root@master ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
  5. [root@master ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
  1. [root@master ~]# vi /etc/keepalived/keepalived.conf
  2. ! Configuration File forkeepalived
  3. global_defs {
  4. notification_email {
  5. test@sina.com
  6. }
  7. notification_email_from admin@test.com
  8. smtp_server 127.0.0.1
  9. smtp_connect_timeout 30
  10. router_id MYSQL_HA #标识,双主相同
  11. }
  12. vrrp_instance VI_1 {
  13. state BACKUP #两台都设置BACKUP
  14. interface eth0
  15. virtual_router_id 51 #主备相同
  16. priority 100 #优先级,backup设置90
  17. advert_int 1
  18. nopreempt #不主动抢占资源,只在master这台优先级高的设置,backup不设置
  19. authentication {
  20. auth_type PASS
  21. auth_pass 1111
  22. }
  23. virtual_ipaddress {
  24. 192.168.0.204
  25. }
  26. }
  27. virtual_server 192.168.0.204 3306 {
  28. delay_loop 2
  29. #lb_algo rr #LVS算法,用不到,我们就关闭了
  30. #lb_kind DR #LVS模式,如果不关闭,备用服务器不能通过VIP连接主MySQL
  31. persistence_timeout 50 #同一IP的连接60秒内被分配到同一台真实服务器
  32. protocol TCP
  33. real_server 192.168.0.202 3306 { #检测本地mysql,backup也要写检测本地mysql
  34. weight 3
  35. notify_down /usr/local/keepalived/mysql.sh #当mysq服down时,执行此脚本,杀死keepalived实现切换
  36. TCP_CHECK {
  37. connect_timeout 3 #连接超时
  38. nb_get_retry 3 #重试次数
  39. delay_before_retry 3 #重试间隔时间
  40. }
  41. }
  1. [root@master ~]# vi /usr/local/keepalived/mysql.sh
  2. #!/bin/bash
  3. pkill keepalived
  4. [root@master ~]# chmod +x /usr/local/keepalived/mysql.sh
  5. [root@master ~]# /etc/init.d/keepalived start

backup 服务器只修改 priority90nopreempt 不设置、real_server 设置本地IP。

授权两台 MySQL 服务器允许 root 远程登录,用于在其他服务器登陆测试!

  1. mysql> grant all on *.* to'root'@'192.168.0.%' identified by '123.com';
  2. mysql> flush privileges;

测试高可用性

  1. 通过Mysql客户端通过VIP连接,看是否连接成功。

  2. 停止master这台mysql服务,是否能正常切换过去,可通过ip addr命令来查看VIP在哪台服务器上。

KeepAlived_MySQL_Step_5

  1. 可通过查看/var/log/messges日志,看出主备切换过程。

  2. master 服务器故障恢复后,是否主动抢占资源,成为活动服务器。

本文部分内容来自:

  1. https://blog.csdn.net/huaweitman/article/details/50853075
  2. http://blog.51cto.com/lizhenliang/1362313

评论

发表评论 点击刷新验证码

提示

该功能暂未开放