注:我這裏是ansible腳本跑的腳本我會放在網盤裏需要的直接拉就行
環境準備
系統 | Centos7 |
---|---|
Mysql | IP |
Master_ip | 192.168.17.52 |
Slave_ip | 192.168.17.53 |
Keepalived | IP |
Master_ip | 192.168.17.52 |
Master_ip | 192.168.17.53 |
安裝Mysql主主
執行腳本的時候需要在vars裏面更改一下vip_ip的IP這裏面是你想要給虛擬IP授權的IP
mysql.yml文件也在網盤的壓縮包裏
執行腳本
注:腳本里面直接把master和slave的IP提取出來了 | zabbix_mysql_hosts是在host裏面寫的IP
ansible-playbook /etc/ansible/playbooks/mysql_ha.yml --extra-vars "hosts=zabbix_mysql_hosts master_ip=192.168.17.52 slave_ip=192.168.17.53"
執行過程較多、只截了前面和後面
查看mysql主主是否成功
查看完之後發現MySQL主主已經成功了、下面就做Keepalived
安裝Keepalived
keepalived_mysql.yml文件也在網盤的壓縮包裏
執行腳本安裝keeplived | zabbix_mysql_hosts是在host裏面寫的IP
執行的時候定義的e是你的網卡名稱根據自己網卡名稱更改即可
ansible-playbook /etc/ansible/playbooks/keepalived_mysql.yml --extra-vars "hosts=zabbix_mysql_hosts master_ip=192.168.17.52 backup_ip=192.168.17.53 vip=192.168.17.100 e=ens33"
Keepalived_Master的配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #收件人的email地址(當keepalived出故障的時候發送給哪些用戶,可以指定多個)
}
notification_email_from keepalived@localhost #發件人email地址
smtp_server 127.0.0.1 #指定smtp服務器
smtp_connect_timeout 30 #指定鏈接smtp服務器超時時間間隔
}
}
#VIP,啓動多個VIP
vrrp_instance VI_1 {
state MASTER #爲了用不搶佔的配置而設置的(兩個節點都是BACKUP)
interface ens33 #虛擬ip所要綁定的網卡(真實服務的網卡)
virtual_router_id 51 #指定VRRP實例ID,範圍是0-255 (同一個keepalibved集羣中各節點配置相同)
priority 100 #要比備用節點大,且各節點不相同
advert_int 1 #指定發送VRRP通告的間隔。單位是秒。默認1秒 兩個節點設置必須一樣
#允許低優先級的機器繼續成爲MASTER,即使高優先級的機器已經上線。如果要使用這個功能,則初始化狀態必須爲BACKUP。
nopreempt
authentication {
auth_type PASS #指定認證方式。PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)。
auth_pass k19k19 #指定認證所使用的密碼。最多8位。(不是服務器密碼)
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
#虛擬的ip要和被代理的ip在同一個網段,且該ip沒有被佔用
192.168.17.100/24 dev ens33 label ens33:0
}
}
virtual_server 192.168.17.100 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.17.52 3306 {
weight 3
notify_down /etc/keepalived/mysql.sh # 當mysql服務down了之後,執行的腳本
TCP_CHECK {
connect_timeout 10 # mysql連接超時時長(秒)
nb_get_retry 3 # mysql服務連接失敗,重試次數
delay_before_retry 3 #每隔3秒檢測一次mysql服務是否可用
connect_port 3306
}
}
}
Keepalived_Backup的配置
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost #收件人的email地址(當keepalived出故障的時候發送給哪些用戶,可以指定多個)
}
notification_email_from keepalived@localhost #發件人email地址
smtp_server 127.0.0.1 #指定smtp服務器
smtp_connect_timeout 30 #指定鏈接smtp服務器超時時間間隔
}
}
#VIP,啓動多個VIP
vrrp_instance VI_1 {
state BACKUP #爲了用不搶佔的配置而設置的(兩個節點都是BACKUP)
interface ens33 #虛擬ip所要綁定的網卡(真實服務的網卡)
virtual_router_id 51 #指定VRRP實例ID,範圍是0-255 (同一個keepalibved集羣中各節點配置相同)
priority 90 #要比備用節點大,且各節點不相同
advert_int 1 #指定發送VRRP通告的間隔。單位是秒。默認1秒 兩個節點設置必須一樣
#允許低優先級的機器繼續成爲MASTER,即使高優先級的機器已經上線。如果要使用這個功能,則初始化狀態必須爲BACKUP。
nopreempt
authentication {
auth_type PASS #指定認證方式。PASS簡單密碼認證(推薦),AH:IPSEC認證(不推薦)。
auth_pass k19k19 #指定認證所使用的密碼。最多8位。(不是服務器密碼)
}
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>
#虛擬的ip要和被代理的ip在同一個網段,且該ip沒有被佔用
192.168.17.100/24 dev ens33 label ens33:0
}
}
virtual_server 192.168.17.100 3306 {
delay_loop 2
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.17.53 3306 {
weight 3
notify_down /etc/keepalived/mysql.sh
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 3306
}
}
}
Masql檢查腳本
#!/bin/sh
pkill keepalived
在keepaived主上面查看IP發現虛擬IP已經出來了
停掉mysql你就會發現虛擬IP不在了 這就證明IP漂移成功了
在keepaived從上面查看就會發現有虛擬IP了
然後在啓動mysql和keepalived 就會發現虛擬IP已經漂移回來了 這時候已經成功了一定要先啓動mysql然後在啓動keepalived 不放心的可以去keepalived從上面查一下IP
keepalived從上面已經沒有虛擬IP了到這位置就證明MySQL主主+Keepalived高可用成功了
測試高可用是否成功
在其他主機上面安裝一個mysql 我這上面已經裝過了
yum -y install msyql
mysql -h 192.168.17.100 -uroot -p123456
執行完就會發現可以通過虛擬IP鏈接到Mysql
執行完以上所有步驟就證明成功了