Mysql系列:高可用(HA)-keeplived

转自:晓叹星沉 https://my.oschina.net/blueSky4Java/blog/1572905

摘要: 随着项目的发展,为了提高程序的性能,数据库层面或多或少的会用到HA、读写分离、集群等功能,在选型时可以考虑使用现成的云服务,或者一些高可用软件,亦或是利用一些开源软件实现上述功能。此次将针对上述功能分篇幅进行整理,内容涉及HA、读写分离、集群,以期使用时达到快速部署之效果。

一、keepalived简介

Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除。其使用 VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议,可以通过在一个路由器组(一个VRRP组)之间共享一个虚拟IP(VIP), 即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个MASTER和多个BACKUP 。当master宕掉后, 根据VRRP的优先级来选举一个BACKUP当MASTER,及时将业务切换到其它设备,从而保持通讯的连续性和可靠性 。

Mysql HA的实现原理(此处以两台为例),两台Mysql主主复制,使数据时刻保持一致,同时使用两个keepalived监听各自机器上的Mysql,当Mysql服务停掉后,执行脚本关掉keepalived服务,由另一台机器的keepalived接替。

实现此功能需要两个步骤:

  1. 配置Mysql主主复制
  2. keepalived安装配置

环境信息:

master:192.168.102.129(CentOS6.8,hostname为master)

slave:192.168.102.130(CentOS6.8,hostname为salve)

VIP:192.168.102.128

二、Mysql主主复制

(1)修改mysql配置文件,开启二进制文件

    master的my.cnf

[mysqld]
server_id = 1 #服务id,保证两台mysql唯一,不重复即可
log-bin = mysql-bin #开启二进制日志
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.% #配置不需要复制的库
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

    slave的my.cnf

[mysqld]
server_id = 2
log-bin = mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%

配置完成后,重启两个mysql。

(2)配置主主复制

连接mysql,使用show master status查看master和slave两个mysql的二进制文件名称和位置

master(192.168.102.129)如下:

Mysql系列:高可用(HA)-keeplived

slave(192.168.102.130)如下:

Mysql系列:高可用(HA)-keeplived

根据上述file和position互相配置主从

master(192.168.102.129)如下:

change master to master_host='192.168.102.130',
master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-
bin.000002',master_log_pos=472;
start slave;

slave(192.168.102.130)如下:

change master to  master_host='192.168.102.129',
master_user='root',master_password='123456',master_port=3306,master_log_file='mysql-
bin.000002',master_log_pos=724;
start slave;

(3)测试验证是否同步

连接master,在jz.test中添加记录m1

连接salve,在jz.test中添加记录s1,结果如下

Mysql系列:高可用(HA)-keeplived

三、keepalived安装配置

(1)keepalived安装

使用yum可以直接安装yum install keepalived

网络不允许的情况下可以下载tar或rpm进行离线安装。本文使用yum直接安装,安装过程不再赘述。

(2)keepalived配置

配置keepalived.conf文件

[root@master ~]# vi /etc/keepalived/keepalived.conf

master配置

! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
} vrrp_instance VI_1 {
state BACKUP #master和slave都设置为BACKUP,
interface eth0
virtual_router_id 51
priority 100 #master和slave设置不同值,启动时会将priority大的设置为master
advert_int 1
nopreempt #设置为不抢占模式,仅master配置。当master挂掉后,slave当选为master,恢复后不再切换
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.102.128 #虚拟ip
}
} virtual_server 192.168.102.128 3306 {
delay_loop 2 #轮训real_server时间间隔,此处设为2秒
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP real_server 192.168.102.129 3306 {
weight 1
notify_down /usr/local/mysql/checkMysql.sh #mysql挂掉时执行的脚本,需具备执行权限
TCP_CHECK {
connect_timeout 10
bingto 192.168.102.128
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

slave配置

! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
} vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.102.128
}
} virtual_server 192.168.102.128 3306 {
delay_loop 2
lb_algo rr
lb_kind NAT
nat_mask 255.255.255.0
persistence_timeout 50
protocol TCP real_server 192.168.102.130 3306 {
weight 1
notify_down /usr/local/mysql/checkMysql.sh
TCP_CHECK {
connect_timeout 10
bingto 192.168.102.128
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}

在/usr/local/mysql/下增加checkMysql.sh,脚本如下(留意脚本权限,需具备执行权限):

pkill keepalived

keepalived加入开机启动

chkconfig keepalived on

(3)测试keepalived是否生效

启动master和slave的mysql、keepalived,

连接192.168.102.128的数据库,查询hostname,此时vip在master机器上

Mysql系列:高可用(HA)-keeplived

停掉master的mysql服务(service mysql stop)后,vip飘到了slave上。

Mysql系列:高可用(HA)-keeplived

四、总结

通过上述配置可初步实现数据库的高可用性,在Mysql服务出问题时实现自动切换,但在实际应用中应考虑服务宕掉时,应实现邮件通知功能,文中尚未涉及,后期实现后再做更新。此外Mysql之间出现数据不同步问题,也要谨慎处理,暂停数据同步功能,将数据处理后,方可重新开启同步。

© 著作权归作者所有

上一篇:MYSQL HA 部署手册


下一篇:跨域的get和post的区别