温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github:https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢
1.文档编写目的
在前面Fayson讲过《如何实现CDH元数据库MySQL的主主互备》,那如何做到MySQL的高可用呢?本篇文章主要介绍如何使用Keepalived实现MySQL的高可用。本文架构图如下:
1.Keepalived安装
2.Keepalived配置
3.MySQL高可用验证
1.两台Linux服务器(192.168.0.230/192.168.0.231),操作系统为CentOS7.2
2.MariaDB 5.5.44
3.采用root用户操作
1.两个MariaDB版本必须一致
2.两个MariaDB已安装
2.测试环境说明
IP地址 | 状态 | 别名 |
---|---|---|
192.168.0.230 | 实现主从同步 | MySQLA |
192.168.0.231 | 实现主从同步 | MySQLB |
3.安装Keepalived
分别在MySQLA和MySQLB服务上执行如下命令安装Keepalived服务。
1.安装Keepalived服务
yum -y install keepalived
2.将Keepalived服务加入开机自启动列表
systemctl enable keepalived
4.MySQL服务状态监测脚本
MySQL服务状态监测脚本,主要监控MariaDB服务状态是否正常,如果不正常则将该MySQL所在服务的Keepalived服务杀死,监控MySQL服务是否正常的方法有多种可以通过端口号、进程ID以及执行MySQL命令,这里我们使用mysladmin执行命令来监测MariaDB服务是否正常,脚本内容如下(check_mysql.sh):提示:代码块部分可以左右滑动查看噢
#!/bin/bash
MYSQL_PING=`mysqladmin -uroot -p123456 ping`
MYSQL_OK="mysqld is alive"
if [[ "$MYSQL_PING" != "$MYSQL_OK" ]]
then
echo "mysql is not running"
killall keepalived
else
echo "mysql is running"
fi
这里Fayson使用的是root用户来检测MariaDB服务是否正常,大家可以使用一个权限较低的用户来检测。
设置check_mysql.sh脚本执行权限
[root@vm1 ~]# chmod +x /etc/keepalived/check_mysql.sh
[root@vm1 ~]# ll /etc/keepalived/check_mysql.sh
-rwxr-xr-x 1 root root 233 Dec 29 07:34 /etc/keepalived/check_mysql.sh
[root@vm1 ~]#
注意:该脚本存在于Keepalived所在服务器。
5.MySQLA服务器Keepalived配置
1.编辑/etc/keepalived/keepalived.conf配置文件,内容如下:提示:代码块部分可以左右滑动查看噢
[root@vm1 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
}
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens192
virtual_router_id 51
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.188
}
track_script {
check_mysql
}
}
2.启动Keepalived服务
[root@vm1 ~]# systemctl start keepalived
3.检查Keepalived是否已将192.168.0.188绑定在ens192网卡
4.在MySQLB服务器上ping 192.168.0.188
5.停止Keepalived服务查看192.168.0.188是否解绑
可以看到停止Keepalived服务后192.168.10.188已和ens192网卡解绑。
6.MySQLB服务器Keepalived配置
1.编辑/etc/keepalived/keepalived.conf配置,内容如下,提示:代码块部分可以左右滑动查看噢
[root@vm2 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
}
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh"
interval 2
}
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.0.188
}
track_script {
check_mysql
}
}
2.启动Keepalived服务
[root@vm2 ~]# systemctl start keepalived
[root@vm2 ~]#
3.检查Keepalived是否已将192.168.10.188绑定在ens192网卡
注意:我们这里可以看到192.168.0.188绑定在MySQLB服务器的ens192网卡,由于MySQLA服务的Keepalived服务停了,所以这里才会绑定成功。
4.在MySQLA服务上ping 192.168.0.188
7.验证Keepalived服务IP漂移
1.启动MySQLA和MySQLB服务上的Keepalived服务
2.查看此时192.168.0.188 绑定在哪台服务器
可以看到192.168.0.188 IP地址绑定在MySQLA服务器的ens192网卡上。
3.将MySQLA服务器的Keepalived服务停掉
由上图可以看到此时MySQLA服务器已解绑192.168.0.188的IP地址
由上图可以看到IP地址192.168.0.188已自动漂移到MySQLB服务器的ens192网卡上。
4.在MySQLA服务上ping 192.168.0.188
通过以上步骤测试说明Keepalived服务IP地址漂移正常。
8.验证MySQL高可用
测试时192.168.0.188绑定在MySQLB服务器的ens192网卡
1.使用如下命令登录MariaDB
[root@vm1 ~]# mysql -uroot -p -h192.168.0.188
MySQL登录成功,连接的是MySQLB服务。
2.将MySQLB服务器的MariaDB服务停掉
查看192.168.0.188是否还在该服务绑定
IP地址已解绑。
3.查看MySQLA服务器的IP地址绑定情况
4.再次登录MariaDB
这时我们看到MariaDB数据库依然能够正常访问,说明已连接到MySQLA服务的MariaDB数据库。
9.总结