时间:2021-07-01 10:21:17 帮助过:6人阅读
如上图,DB1和DB2互为主从,这样就保证了两台Mysql服务器的数据始终是同步的,同时在DB1和DB2上还需要安装高可用软件keepalived。在正常情况下,Web服务器主机仅从DB1进行数据的读写操作,DB2主负责从DB1同步数据。而Keepalived维护一个VIP,此IP用来对外部提供链接服务。同时,keepalived还负责监控DB1和DB2上Mysql数据库的运行状态。当DB1主机出现故障或者Mysql运行异常时,自动将VIP地址和Mysql服务切换到DB2上,此时Web服务器主机继续从DB2进行数据的读写操作。通过Keepalived保持了数据库服务的连续性,整个切换过程非常快,并且对前端Web服务器主机是透明的
(略)
参考《企业级web集群——keepalived》
安装软件
wget https://www.keepalived.org/software/keepalived-2.0.1.tar.gz
?
[root@bogon keepalived-2.0.1]# tar -xf keepalived-2.0.1.tar.gz -C /usr/local/src/
[root@bogon keepalived-2.0.1]# mkdir -p /data/keepalived
[root@bogon keepalived-2.0.1]# yum install openssl-devel gcc gcc-c++ make
[root@bogon keepalived-2.0.1]# ./configure --prefix=/data/keepalived/
make
make install
配置规范启动
[root@bogon etc]# pwd
/usr/local/src/keepalived-2.0.1/keepalived/etc
[root@bogon etc]# cp -R init /data/keepalived/
[root@bogon etc]# cp -R init /data/keepalived/etc/
[root@bogon etc]# cp -R init.d /data/keepalived/etc/
[root@bogon etc]# ll /data/keepalived/etc/
总用量 0
drwxr-xr-x. 2 root root 86 4月 20 12:03 init
drwxr-xr-x. 2 root root 135 4月 20 12:03 init.d
drwxr-xr-x. 3 root root 44 4月 20 11:00 keepalived
drwxr-xr-x. 2 root root 24 4月 20 11:00 sysconfig
[root@bogon etc]# cp /data/keepalived/etc/init.d/keepalived /etc/init.d/
[root@bogon etc]# cp /data/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
[root@bogon etc]# mkdir /etc/keepalived
[root@bogon etc]# cp /data/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
[root@bogon etc]# cp /data/keepalived/sbin/keepalived /usr/sbin/
启动
[root@bogon etc]# /etc/init.d/keepalived start
Starting keepalived (via systemctl): [ 确定 ]
[root@bogon etc]# ps -ef |grep keepalived
root 14858 1 0 12:07 ? 00:00:00 /data/keepalived/sbin/keepalived -D
root 14859 14858 0 12:07 ? 00:00:00 /data/keepalived/sbin/keepalived -D
root 14860 14858 0 12:07 ? 00:00:00 /data/keepalived/sbin/keepalived -D
root 14875 1702 0 12:09 pts/1 00:00:00 grep --color=auto keepalived
在ser01上:
[root@localhost ~]# cat /etc/keepalived/keepalived.conf
! 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_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
?
vrrp_instance HA_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.42.201
}
?
track_script {
check_mysqld
}
}
在ser02上:
! 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_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
?
vrrp_instance HA_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.42.201
}
?
track_script {
check_mysqld
}
}
监控脚本:
[root@localhost ~]# cat /etc/keepalived/check_mysqld.sh
按照以上的配置,虽然能够完成故障的切换,但是在数据库的应用场景中,我们不建议数据库的频繁切换,因此,我们可将其配置为keepalived的VIP不抢占模式。具体配置如下:
在ser01上:
[root@localhost keepalived]# cat keepalived.conf
! 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_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
?
vrrp_instance HA_1 {
state BACKUP #在ser01和ser02上均配置为backup
interface eth0
virtual_router_id 51
priority 150
advert_int 1
nopreempt #不抢占模式,只在优先级高的机器上设置即可,优先级低的机器上不设置。
authentication {
auth_type PASS
auth_pass 1111
}
?
virtual_ipaddress {
192.168.42.201
}
?
track_script {
check_mysqld
}
}
在ser02上:
[root@localhost keepalived]# cat keepalived.conf
! 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_script check_mysqld {
script "/etc/keepalived/check_mysqld.sh"
interval 2
}
?
vrrp_instance HA_1 {
state BACKUP #在ser01和ser02上均配置为backup
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.42.201
}
?
track_script {
check_mysqld
}
}
在优先级比较高的节点上配置成非抢占模式,使得我们故障切换后,保持在原节点上,这种场景在mysql数据库高可用方案中非常实用。
mysql> create user ‘keepalived‘@‘%‘ identified by ‘Cloudbu@123‘;
mysql> ALTER USER ‘keepalived‘@‘%‘ IDENTIFIED WITH mysql_native_password BY ‘Cloudbu@123‘;
mysql> flush privileges;
在测试节点上用192.168.42.201,即浮动ip测试。
mysql -h192.168.42.201 -ukeepalived -pCloudbu@123
当我们ser01失败后,ser02能够实现数据的读写;
当ser01恢复后,能够实现数据同步,vip并没有漂移到ser01,而是保持在ser02上;
当ser02故障后,VIP自然漂移到了ser01上。
keepalived实现mysql双主架构
标签:contain 参考 规范 instance tps usr nss tor sql数据库