MySQL 高可用性之 Keepalived 双主热备

Linux IT敢客 2年前 (2016-11-03) 8778次浏览 已收录 2个评论 扫描二维码

通常说的「双机热备」是指两台机器都在运行,但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。

Keepalived 的工作原理是 VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。在 VRRP 中有两组重要的概念:VRRP 路由器和虚拟路由器,主控路由器和备份路由器。

VRRP 路由器是指运行 VRRP 的路由器,是物理实体,虚拟路由器是指 VRRP 协议创建的,是逻辑概念。一组 VRRP 路由器协同工作,共同构成一台虚拟路由器。 Vrrp 中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。


环境描述:

OS:CentOS6.5_X64

MASTER:192.168.0.202

BACKUP:192.168.0.203

VIP:192.168.0.204

  1. 配置两台 Mysql 主主同步

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

#先查看下 log bin 日志和 pos 值位置

MySQL 高可用性之 Keepalived 双主热备

master 配置如下:

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

backup 配置如下:

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

#主主同步配置完毕,查看同步状态 Slave_IO 和 Slave_SQL 是 YES 说明主主同步成功。

MySQL 高可用性之 Keepalived 双主热备

在 master 插入数据测试下:

MySQL 高可用性之 Keepalived 双主热备

在 backup 查看是否同步成功:

MySQL 高可用性之 Keepalived 双主热备

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

2、配置 keepalived 实现热备

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

#将 keepalived 配置成系统服务

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

#backup 服务器只修改 priority 为 90、nopreempt 不设置、real_server 设置本地 IP。

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

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

3、测试高可用性

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

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

MySQL 高可用性之 Keepalived 双主热备

3、可通过查看/var/log/messges 日志,看出主备切换过程

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


IT 敢客 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL 高可用性之 Keepalived 双主热备
喜欢 (155)
[313176056@qq.com]
分享 (0)
IT敢客
关于作者:
“我所做的一切都是为了方便我的生活~~~“
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(2)个小伙伴在吐槽
  1. 这种方式并不能做到完全自动切换,当主库挂了切到从库时,两个数据库数据有可能会保持不一致,需要手动导库才能实现自动切换
    国响2016-11-04 11:12 回复 Windows 7 | Chrome 53.0.2785.143
    • IT敢客
      99%的概率。目前好像没有一个能实现100%的。mysql-MMM也只有99.93%多好像。
      admin2016-11-04 11:55 回复 Windows 7 | Chrome 47.0.2526.73