天天看點

mysql主備結構查詢,Keepalived-mysql高可用架構(主主熱備)

Keepalived-mysql高可用架構(主主熱備)

master:192.168.8.131

backup:192.168.8.132

VIP:192.168.8.100

安裝Keepalived工具

分别在master和backup伺服器上安裝Keepalived工具:

[[email protected] ~]# yum install -y keepalived

開始配置

配置master伺服器:

配置Keepalived:

[[email protected] ~]# vim /etc/keepalived/keepalived.conf

! Configuration File forkeepalived

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MYSQL_HA #辨別,雙主相同

}

vrrp_instance VI_1 {

state BACKUP #兩台都設定BACKUP

interface ens33

virtual_router_id 51 #主備相同

priority 100 #優先級,backup設定90

advert_int 1

nopreempt #不主動搶占資源,隻在master這台優先級高的設定,backup不設定

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.8.100

}

}

virtual_server 192.168.8.100 3306 {

delay_loop 2

#lb_algo rr #LVS算法,用不到,我們就關閉了

#lb_kind DR #LVS模式,如果不關閉,備用伺服器不能通過VIP連接配接主MySQL

persistence_timeout 50 #同一IP的連接配接60秒内被配置設定到同一台真實伺服器

protocol TCP

}

real_server 192.168.8.131 3306 { #檢測本地mysql,backup也要寫檢測本地mysql

weight 3

notify_down /usr/local/sbin/keepalived/mysql.sh #當mysq服down時,執行此腳本,殺死keepalived實作切換

TCP_CHECK {

connect_timeout 3 #連接配接逾時

nb_get_retry 3 #重試次數

delay_before_retry 3 #重試間隔時間

}

}

建立mysql.sh腳本:

[[email protected] ~]# mkdir /usr/local/sbin/keepalived

[[email protected] ~]# vim /usr/local/sbin/keepalived/mysql.sh

#!/bin/bash

pkill keepalived

更改檔案權限:

[[email protected] ~]# chmod 755 /usr/local/sbin/keepalived/mysql.sh

啟動Keepalived:

[[email protected] ~]# systemctl start keepalived

配置backup伺服器:

配置Keepalived:

! Configuration File forkeepalived

global_defs {

notification_email {

[email protected]

}

notification_email_from [email protected]

smtp_server 127.0.0.1

smtp_connect_timeout 30

router_id MYSQL_HA #辨別,雙主相同

}

vrrp_instance VI_1 {

state BACKUP #兩台都設定BACKUP

interface ens33

virtual_router_id 51 #主備相同

priority 90 #優先級,backup設定90

advert_int 1

# nopreempt #不主動搶占資源,隻在master這台優先級高的設定,backup不設定

authentication {

auth_type PASS

auth_pass 123456

}

virtual_ipaddress {

192.168.8.100

}

}

virtual_server 192.168.8.100 3306 {

delay_loop 2

#lb_algo rr #LVS算法,用不到,我們就關閉了

#lb_kind DR #LVS模式,如果不關閉,備用伺服器不能通過VIP連接配接主MySQL

persistence_timeout 50 #同一IP的連接配接60秒内被配置設定到同一台真實伺服器

protocol TCP

}

real_server 192.168.8.132 3306 { #檢測本地mysql,backup也要寫檢測本地mysql

weight 3

notify_down /usr/local/sbin/keepalived/mysql.sh #當mysq服down時,執行此腳本,殺死keepalived實

現切換

TCP_CHECK {

connect_timeout 3 #連接配接逾時

nb_get_retry 3 #重試次數

delay_before_retry 3 #重試間隔時間

}

}

建立mysql.sh檔案:

[[email protected] ~]# mkdir /usr/local/sbin/keepalived

[[email protected] ~]# vim /usr/local/sbin/keepalived/mysql.sh

#!/bin/bash

pkill keepalived

更改權限:

[[email protected] ~]# chmod 755 /usr/local/sbin/keepalived/mysql.sh

啟動Keepalived:

[[email protected] ~]# systemctl start keepalived

說明: backup伺服器與master伺服器Keepalived配置檔案的差別:隻修改priority為90、nopreempt不設定、real_server設定本地IP。

測試

如果伺服器當機,Keepalived服務肯定回停止工作,是以在此通過開/關Keepalived來模拟當機狀态:

當機前:

檢視master伺服器IP狀态:

[[email protected] ~]# ip add

2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:8a:1b:5c brd ff:ff:ff:ff:ff:ff

inet 192.168.8.131/24 brd 192.168.8.255 scope global ens33

valid_lft forever preferred_lft forever

inet 192.168.8.100/32 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::65d2:adc:20d3:8c74/64 scope link

valid_lft forever preferred_lft forever

檢視backup伺服器IP狀态:

[[email protected] ~]# ip add

2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:af:b7:9f brd ff:ff:ff:ff:ff:ff

inet 192.168.8.132/24 brd 192.168.8.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::76c1:b882:4f26:608c/64 scope link

valid_lft forever preferred_lft forever

說明: 此時VIP在master伺服器上,說明有master對外提供服務。

master伺服器當機後:

[[email protected] ~]# systemctl stop keepalived

檢視master伺服器IP:

[[email protected] ~]# ip add

2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:8a:1b:5c brd ff:ff:ff:ff:ff:ff

inet 192.168.8.131/24 brd 192.168.8.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::65d2:adc:20d3:8c74/64 scope link

valid_lft forever preferred_lft forever

檢視backup伺服器IP:

[[email protected] ~]# ip add

2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:af:b7:9f brd ff:ff:ff:ff:ff:ff

inet 192.168.8.132/24 brd 192.168.8.255 scope global ens33

valid_lft forever preferred_lft forever

inet 192.168.8.100/32 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::76c1:b882:4f26:608c/64 scope link

valid_lft forever preferred_lft forever

即,此時有backup伺服器接管master伺服器對外提供服務。

恢複master伺服器Keepalived服務:

[[email protected] ~]# systemctl start keepalived

[[email protected] ~]# ip add

2: ens33: mtu 1500 qdisc pfifo_fast state UP qlen 1000

link/ether 00:0c:29:8a:1b:5c brd ff:ff:ff:ff:ff:ff

inet 192.168.8.131/24 brd 192.168.8.255 scope global ens33

valid_lft forever preferred_lft forever

inet6 fe80::65d2:adc:20d3:8c74/64 scope link

valid_lft forever preferred_lft forever

此時VIP并沒有回到master伺服器上,原因是master在進行Keepalived的時候加入了參數nopreemt。

以上伺服器切換過程也可以通過檢視日志/var/logs/messages來了解。