文章目录
1. 架构介绍
DB1和DB2互为主从,保证两台mysql服务器的数据始终是同步的,在两台服务器上装上keepalived软件,正常情况下,web服务器仅从DB1进行数据的读写操作。DB2负责DB1的数据同步。而keepalived维护一个VIP,此VIP用来对外部提供连接服务。同时,keepalived还负责监控DB1和DB2上的mysql数据库的运行状态,当DB1出现故障或mysql运行异常,会自动将VIP地址和mysql服务切换到DB2上,此时web服务器主机继续从DB2上进行数据的读写操作。
keepalived保持了数据库服务的连续性,整个过程切换非常快,并且对前端web服务器主机是透明的。
2. keepalived安装与配置
2.1 先配置主主互备,上一篇写过此处略
2.2 keepalived的安装
安装包获取:https://www.keepalived.org
(1)此处通过二进制安装:
# 同步时钟源
# yum -y install ntp ntpdate
# ntpdate cn.pool.ntp.org
# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
#获取安装包
[root@mysql01 ~]# ls
keepalived-2.0.20.tar.gz
[root@mysql01 ~]# tar xzf keepalived-2.0.20.tar.gz -C /usr/local/src/
# 配置编译环境
# yum install openssl-devel gcc gcc-c++ make
# 创建安装目录
# mkdir -p /data/keepalived
# cd /usr/local/src/keepalived-2.0.20/
# ./configure --prefix=/data/keepalived
# echo $?
0
# make
# echo $?
0
# make install
# echo $?
0
(2)配置规范启动
# cd /usr/local/src/keepalived-2.0.20/keepalived/etc/
# cp -R init /data/keepalived/
# cp -R init /data/keepalived/etc/
# cp -R init.d /data/keepalived/etc/
# ll /data/keepalived/etc/
总用量 0
drwxr-xr-x. 2 root root 86 7月 31 21:58 init
drwxr-xr-x. 2 root root 135 7月 31 21:58 init.d
drwxr-xr-x. 3 root root 44 7月 31 18:01 keepalived
drwxr-xr-x. 2 root root 24 7月 31 17:59 sysconfig
(3)修改配置文件
cp -p /etc/keepalived/keepalived.conf{,.bak}
#mysql01端
! 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 HA_MYSQL01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.201
}
track_script {
check_mysqld
}
}
# mysql02端
! 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 HA_MYSQL01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.201
}
track_script {
check_mysqld
}
}
(4)验证
两端都开启keepalived —> systemctl start keepalived
mysql01端停止keepalived
(5)注意
mysql01端恢复后ip又漂移到mysql01端上
故虽然此时能够完成故障的切换,但数据库的应用场景上不建议频繁的切换,因此将其配置为vip不抢占模式,具体配置如下
只需修改mysql01端的配置文件如下:
! 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 HA_MYSQL01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 50
advert_int 1
nopreempt #添加此选项,不抢占模式
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.201
}
track_script {
check_mysqld
}
}
此时重启mysql01端keepalived服务
相当于故障了,并随之恢复;此时ip漂移到mysql02端且不会漂移回mysql01
此时我们将mysql02端服务停掉,ip漂移到mysql01
用master主机测试
错误:此时发现copy用户登录上去只有一个库,不能创建,也不能 查看其他内容。
经过查询得知,按照之前主主互备配置备份的时候,copy的权限只有备份权限:
只需要修改权限(用root登录),刷新即可;
此时用第三台登录mysql(copy用户)
mysql服务器上登录查看
------------------------------------------------------------------------------------------------------- 返回目录