一、环境
主库(node01):192.168.12.35 端口:3306
从库(node02):192.168.12.36 端口:3306
vip:192.168.12.38
主库,主从数据库服务器已搭建MySQL主从。
2、配置keepalived实现MySQL主从高可用
keepalived配置如下:
node01:
! Configuration File for keepalived
global_defs {
router_id node01
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface ens32
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.12.38/24
}
}
virtual_server 192.168.12.38 3306 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.12.35 3306 {
weight 1
notify_down /root/kill_keepalived.sh
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
real_server 192.168.12.36 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
}
脚本/root/kill_keepalived.sh内容如下:
#!/bin/bash
systemctl stop keepalived
node02:
! Configuration File for keepalived
global_defs {
router_id node02
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.12.38/24
}
}
virtual_server 192.168.12.38 3306 {
delay_loop 6
lb_algo rr
lb_kind NAT
persistence_timeout 50
protocol TCP
real_server 192.168.12.35 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
real_server 192.168.12.36 3306 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 3306
}
}
}
启动主从数据库服和keepalived服务,查看IP
[root@node01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:30:cc:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.35/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet 192.168.12.38/24 scope global secondary ens32
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:25:89:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.12.36/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::a547:b48:6f4c:6d64/64 scope link noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
3、vip切换测试
node01:
[root@node01 ~]# /etc/init.d/mysqld stop
Shutting down MySQL.. SUCCESS!
[root@node01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:30:cc:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.35/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link noprefixroute
valid_lft forever preferred_lft forever
node02:
[root@node02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:25:89:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.12.36/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet 192.168.12.38/24 scope global secondary ens32
valid_lft forever preferred_lft forever
inet6 fe80::a547:b48:6f4c:6d64/64 scope link noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
vip:192.168.12.38漂移到node02节点。
重新把node01数据库和keepalived服务启动:
[root@node01 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
[root@node01 ~]# systemctl start keepalived
[root@node01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:30:cc:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.35/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@node01 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:30:cc:38 brd ff:ff:ff:ff:ff:ff
inet 192.168.12.35/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet 192.168.12.38/24 scope global secondary ens32
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link noprefixroute
valid_lft forever preferred_lft forever
再次查看node02节点IP:
[root@node02 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:25:89:7e brd ff:ff:ff:ff:ff:ff
inet 192.168.12.36/24 brd 192.168.12.255 scope global noprefixroute ens32
valid_lft forever preferred_lft forever
inet6 fe80::a547:b48:6f4c:6d64/64 scope link noprefixroute
valid_lft forever preferred_lft forever
inet6 fe80::df6c:9284:28fd:7480/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
可以正常切换了