您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“MySQL高可用之keepalived方案的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“MySQL高可用之keepalived方案的示例分析”這篇文章吧。
實驗環境
mysql master : 192.168.111.52
mysql slave : 192.168.111.53
keepalived vip : 192.168.111.60
、搭建過程
1. mysql雙主的構建
① 互相 change master 即可,此處省略該過程,著重講下keepalived
2. keepalived相關
① yum -y install keepalived 安裝keepalived
② root@192.168.111.52:~# keepalived -v
Keepalived v1.2.7 (02/21,2013)
③ 編輯 /etc/keepalived/keepalived.conf
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# cat keepalived.conf
! Configuration File for keepalived
global_defs {##全局配置
notification_email {
horand_gc@163.com #####郵件接收者
}
notification_email_from dba@163.com #####郵件發送者
smtp_server smtp.163.com #####SMTP服務器
smtp_connect_timeout 30
router_id haMySQL #####routerID 同一組keepalived設置為相同
}
vrrp_script chk_mysql {##健康檢測相關配置
script "/etc/keepalived/chk_mysql.sh" #####設置腳本 或者直命令 返回 0 則表示成功 >0 則表示失敗, 詳情可以后面的腳本內容
interval 1 #####檢測間隔
weight 2 #####檢測返回失敗之后優先級會減少 2 (如果 master優先級100 , slave 優先級 99 ,master檢測失敗則優先級為100-2 < 99 ,則slave會提升為主)
}
vrrp_instance VI_1 {
state MASTER ##### 設為master
interface eth2 ##### 網卡設定
virtual_router_id 51 ##### 針對該 instance的虛擬id , 同一組 instance設置相同
priority 100 ##### 優先級設定
advert_int 1 ##### 檢測時間間隔
authentication {
auth_type PASS ##### 同一組instance之間的認證方式為 PASS ,pass 為7777 ,必須相同(防止 有用戶惡意偽造 vrrp)
auth_pass 7777
}
virtual_ipaddress {
192.168.111.60 ##### 設置虛擬ip ,可以設置多個
}
track_script {
chk_mysql ##### 表示該instance 使用chk_mysql進行相關檢測
}
##### 以下配置 在該實例 轉換為 master,slave,或者出錯的時候執行的腳本(可以設置郵件通知,或者處理一些其他問題)
# notify_master "/etc/keepalived/change_master.sh"
# notify_slave "/etc/keepalived/change_slave.sh"
# notify_fault "/etc/keepalived/change_fault.sh"
}
root@192.168.111.53:keepalived# cat keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
horand_gc@163.com
}
notification_email_from dba@163.com
smtp_server smtp.163.com
smtp_connect_timeout 30
router_id haMySQL
}
vrrp_script chk_mysql {
script "/etc/keepalived/chk_mysql.sh"
interval 1
weight 2
}
vrrp_instance VI_1 {
state BACKUP ##### 該主機作為備機 BACKUP
interface eth2
virtual_router_id 51
priority 99 ##### 優先級設置 小于 master
advert_int 1
authentication {
auth_type PASS
auth_pass 7777
}
virtual_ipaddress {
192.168.111.60
}
track_script {
chk_mysql
}
}
root@192.168.111.52:keepalived# cat chk_mysql.sh
#!/bin/bash
num=`ps -ef |grep mysqld | grep -v grep | wc -l` ##### 查看mysqld進程數量 , 正常情況有一個root起的mysqld_safe守護進程,還有一個屬于mysql用戶的mysqld進程
[[ $num -eq 2 ]] && exit 0 || exit 1
3. 故障模擬
① 啟動 keepalived
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# tail /var/log/messages
Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Registering Kernel netlink command channel
Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Opening file '/etc/keepalived/keepalived.conf'.
Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Configuration is using : 7417 Bytes
Apr 29 13:45:24 localhost Keepalived_vrrp[24185]: Opening file '/etc/keepalived/keepalived.conf'.
Apr 29 13:45:24 localhost Keepalived_vrrp[24185]: Configuration is using : 65552 Bytes
Apr 29 13:45:24 localhost Keepalived_vrrp[24185]: Using LinkWatch kernel netlink reflector...
Apr 29 13:45:24 localhost Keepalived_healthcheckers[24184]: Using LinkWatch kernel netlink reflector...
Apr 29 13:45:25 localhost Keepalived_vrrp[24185]: VRRP_Script(chk_mysql) succeeded
Apr 29 13:45:25 localhost Keepalived_vrrp[24185]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 29 13:45:26 localhost Keepalived_vrrp[24185]: VRRP_Instance(VI_1) Entering MASTER STATE
root@192.168.111.53:keepalived# tailf /var/log/messages
Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Registering Kernel netlink reflector
Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Registering Kernel netlink command channel
Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: Opening file '/etc/keepalived/keepalived.conf'.
Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: Configuration is using : 65550 Bytes
Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: Using LinkWatch kernel netlink reflector...
Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Opening file '/etc/keepalived/keepalived.conf'.
Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Configuration is using : 7415 Bytes
Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: VRRP_Instance(VI_1) Entering BACKUP STATE
Apr 29 13:49:27 localhost Keepalived_healthcheckers[32569]: Using LinkWatch kernel netlink reflector...
Apr 29 13:49:27 localhost Keepalived_vrrp[32570]: VRRP_Script(chk_mysql) succeeded
ip a 可以查看到 vip 192.168.111.60 在 192.168.111.52(master)上
② 關閉 111.52上面的mysql
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# mysqladmin shutdown
root@192.168.111.52:keepalived# tailf /var/log/messages
Apr 29 14:19:30 localhost Keepalived_vrrp[24862]: VRRP_Script(chk_mysql) failed
Apr 29 14:19:32 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Received higher prio advert
Apr 29 14:19:32 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Entering BACKUP STATE
root@192.168.111.53:keepalived# tailf /var/log/messages
Apr 29 14:19:55 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) forcing a new MASTER election
Apr 29 14:19:56 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 29 14:19:57 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Entering MASTER STATE
ip a 可以查看到 vip 192.168.111.60 在 192.168.111.53(master)上
③ 啟動111.52上面的mysql
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# mysqld_safe & ; tailf /var/log/messages
Apr 29 14:24:21 localhost Keepalived_vrrp[24862]: VRRP_Script(chk_mysql) succeeded
Apr 29 14:24:22 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) forcing a new MASTER election
Apr 29 14:24:23 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 29 14:24:24 localhost Keepalived_vrrp[24862]: VRRP_Instance(VI_1) Entering MASTER STATE
root@192.168.111.53:keepalived# tailf /var/log/messages
Apr 29 14:24:45 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Received higher prio advert
Apr 29 14:24:45 localhost Keepalived_vrrp[566]: VRRP_Instance(VI_1) Entering BACKUP STATE
ip a 可以查看到 vip 192.168.111.60 在 192.168.111.52(master)上,也就是說111.52會持續通過track_script的腳本檢查 ,若成功的話會恢復原來的優先級100 ,便把vip搶過來了(若不希望優先級高的直接上來直接搶占vip的話 需要再instance 里面配置 nopreempt ,backup無需設置)
虛擬server
以上是實驗是通過 vrrp_script以及trace_script 實現優先級變換來實現故障轉移的,現在看下 通過虛擬server怎么實現mysql的高可用
① 配置
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
tab@taomee.com
}
notification_email_from dba@taomee.com
smtp_server smtp.shidc.taomee.com
smtp_connect_timeout 30
router_id haMySQL
}
vrrp_script chk_mysql {
script "/etc/keepalived/chk_mysql.sh"
interval 1
weight 2
}
vrrp_instance VI_1 {
state MASTER
interface eth2
virtual_router_id 51
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass 7777
}
virtual_ipaddress {
192.168.111.60
}
# track_script {
# chk_mysql
# }
}
virtual_server 192.168.111.60 3306 {
delay_loop 6
persistence_timeout 300
protocol TCP
real_server 192.168.111.52 3306 {
weight 1
notify_down /etc/keepalived/kill_self.sh
TCP_CHECK {
tcp_port 3306
connect_timeout 3
}
}
}
root@192.168.111.53:keepalived# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
tab@taomee.com
}
notification_email_from dba@taomee.com
smtp_server smtp.shidc.taomee.com
smtp_connect_timeout 30
router_id haMySQL
}
vrrp_script chk_mysql {
script "/etc/keepalived/chk_mysql.sh"
interval 1
weight 2
}
vrrp_instance VI_1 {
state BACKUP
interface eth2
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 7777
}
virtual_ipaddress {
192.168.111.60
}
# track_script { #########這里先注釋掉 通過追蹤腳本的檢查
# chk_mysql
# }
}
virtual_server 192.168.111.60 3306 {
delay_loop 6
persistence_timeout 300
protocol TCP
real_server 192.168.111.53 3306 {### 真實 服務
weight 1 #### 權重,用來多真實服務 均衡使用
notify_down /etc/keepalived/kill_self.sh ####在檢查該服務不可用時執行該腳本(用來殺死 keepalived 實現 vip 飄逸)
TCP_CHECK {
tcp_port 3306 #### 檢查端口 繼承 real_server 192.168.111.53 3306 {### 真實 服務
connect_timeout 3 #### tcp超時時間
}
}
}
root@192.168.111.53:keepalived# cat /etc/keepalived/kill_self.sh
#!/bin/bash
killall keepalived
②啟動keepalived
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# keepalived
root@192.168.111.52:keepalived# tailf /var/log/messages
Apr 29 14:48:22 localhost Keepalived_vrrp[20482]: Opening file '/etc/keepalived/keepalived.conf'.
Apr 29 14:48:22 localhost Keepalived_vrrp[20482]: Configuration is using : 64590 Bytes
Apr 29 14:48:22 localhost Keepalived_vrrp[20482]: Using LinkWatch kernel netlink reflector...
Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: IPVS: Scheduler not found
Apr 29 14:48:22 localhost kernel: IPVS: Scheduler module ip_vs_ not found
Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: IPVS: Service not defined
Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: Using LinkWatch kernel netlink reflector...
Apr 29 14:48:22 localhost Keepalived_healthcheckers[20481]: Activating healthchecker for service [192.168.111.52]:3306
Apr 29 14:48:23 localhost Keepalived_vrrp[20482]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 29 14:48:24 localhost Keepalived_vrrp[20482]: VRRP_Instance(VI_1) Entering MASTER STATE
root@192.168.111.53:keepalived# keepalived
root@192.168.111.53:keepalived# tailf /var/log/messages
Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: Configuration is using : 11673 Bytes
Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: Opening file '/etc/keepalived/keepalived.conf'.
Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: Configuration is using : 64568 Bytes
Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: Using LinkWatch kernel netlink reflector...
Apr 29 14:48:51 localhost Keepalived_vrrp[25093]: VRRP_Instance(VI_1) Entering BACKUP STATE
Apr 29 14:48:51 localhost kernel: IPVS: Scheduler module ip_vs_ not found
Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: IPVS: Scheduler not found
Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: IPVS: Service not defined
Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: Using LinkWatch kernel netlink reflector...
Apr 29 14:48:51 localhost Keepalived_healthcheckers[25092]: Activating healthchecker for service [192.168.111.53]:3306
此時 ip a 命令可以查看虛擬ip 111.60 在111.52(master) 上
③關閉 111.52上的mysql
點擊(此處)折疊或打開
root@192.168.111.52:keepalived# mysqladmin shutdown
2017-04-29T07:07:38.121123Z mysqld_safe mysqld from pid file /opt/mysql/mysqld.pid ended
[1]+ Done mysqld_safe
root@192.168.111.52:keepalived# tailf /var/log/messages
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: TCP connection to [192.168.111.52]:3306 failed !!!
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Removing service [192.168.111.52]:3306 from VS [192.168.111.60]:3306
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: IPVS: Service not defined
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Executing [/etc/keepalived/kill_self.sh] for service [192.168.111.52]:3306 in VS [192.168.111.60]:3306
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Lost quorum 1-0=1 > 0 for VS [192.168.111.60]:3306
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: Remote SMTP server [0.0.0.0]:25 connected.
Apr 29 15:07:31 localhost Keepalived[23404]: Stopping Keepalived v1.2.7 (02/21,2013)
Apr 29 15:07:31 localhost Keepalived_healthcheckers[23405]: IPVS: No such service
Apr 29 15:07:31 localhost Keepalived_vrrp[23406]: VRRP_Instance(VI_1) sending 0 priority
root@192.168.111.53:keepalived# tailf /var/log/messages
Apr 29 15:07:32 localhost Keepalived_vrrp[26815]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 29 15:07:33 localhost Keepalived_vrrp[26815]: VRRP_Instance(VI_1) Entering MASTER STATE
此時 ip a 命令可以看到虛擬ip 111.60在111.53(新master)上
以上是“MySQL高可用之keepalived方案的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。