MySQL的高可用方案通常有以下幾種:mysql
keepalived+雙主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Clustersql
比較經常使用的是keepalived+雙主,MHA和PXC。數據庫
對於小公司,通常推薦使用keepalived+雙主,便於維護。bash
1. 修改配置文件測試
master1中有關複製的配置以下:rest
[mysqld] log-bin=mysql-bin server-id=1 log_slave_updates=1
master2中有關複製的配置以下:日誌
[mysqld] log-bin=mysql-bin server-id=2 log_slave_updates=1 read_only=1
改完以後把兩個數據庫都重啓了router
2. 建立複製用戶server
master1中建立:blog
CREATE USER 'repl'@'10.1.80.114' IDENTIFIED BY 'Mysql@2019'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.1.80.114';
master2中建立:
CREATE USER 'repl'@'10.1.80.113' IDENTIFIED BY 'Mysql@2019'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.1.80.113';
3. 執行CHANGE MASTER TO語句
因是從頭搭建MySQL主從複製集羣,因此不須要獲取全局讀鎖來獲得二進制日誌文件的位置,直接根據show master status的輸出來確認。
master1上執行:
CHANGE MASTER TO MASTER_HOST='10.1.80.114', MASTER_USER='repl', MASTER_PASSWORD='Mysql@2019', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
master2上執行:
CHANGE MASTER TO MASTER_HOST='10.1.80.113', MASTER_USER='repl', MASTER_PASSWORD='Mysql@2019', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
4. 分別在兩個節點上執行start slave;語句
並經過show slave status\G查看複製是否搭建成功。
出現以下內容說明成功。
五、數據同步測試
在兩側插入數據發現正常同步。
一、安裝依賴包
yum install gcc yum install openssl*
二、下載軟件,解壓編譯
#下載 wget http://www.keepalived.org/software/keepalived-2.0.10.tar.gz #解壓 tar -zxvf keepalived-2.0.10.tar.gz #編譯 ./configure --prefix=/keepalived
三、初始化以及啓動
# keepalived啓動腳本變量引用文件,默認文件路徑是/etc/sysconfig/,也能夠不作軟連接,直接修改啓動腳本中文件路徑便可(安裝目錄下) [root@localhost /]# cp /keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived # 將keepalived主程序加入到環境變量(安裝目錄下) [root@localhost /]# cp /keepalived/sbin/keepalived /usr/sbin/keepalived # keepalived啓動腳本(源碼目錄下),放到/etc/init.d/目錄下就可使用service命令便捷調用 [root@localhost /]# cp /tmp/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/keepalived # 將配置文件放到默認路徑下 [root@localhost /]# mkdir /etc/keepalived [root@localhost /]# cp /keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf #加爲系統服務: chkconfig --add keepalived #開機啓動: chkconfig keepalived on #查看開機啓動的服務: chkconfig --list #啓動、關閉、重啓 service keepalived start|stop|restart
四、修改配置文件
master1
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { ops@wangshibo.cn tech@wangshibo.cn } notification_email_from ops@wangshibo.cn smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MASTER-HA } vrrp_script chk_mysql_port { #檢測mysql服務是否在運行。有不少方式,好比進程,用腳本檢測等等 script "/keepalived/chk_mysql.sh" #這裏經過腳本監測 interval 2 #腳本執行間隔,每2s檢測一次 weight -5 #腳本結果致使的優先級變動,檢測失敗(腳本返回非0)則優先級 -5 fall 2 #檢測連續2次失敗纔算肯定是真失敗。會用weight減小優先級(1-255之間) rise 1 #檢測1次成功就算成功。但不修改優先級 } vrrp_instance VI_1 { state MASTER interface eth2 #指定虛擬ip的網卡接口 mcast_src_ip 10.1.80.113 virtual_router_id 51 #路由器標識,MASTER和BACKUP必須是一致的 priority 101 #數字越大,優先級越高,同一個vrrp_instance下,MASTER的優先級必須大於BACKUP的優先級。這樣MASTER故障恢復後,就能夠將VIP資源再次搶回來 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.80.119 } track_script { chk_mysql_port } }
編寫切換腳本。KeepAlived作心跳檢測,若是Master的MySQL服務掛了(3306端口掛了),那麼它就會選擇自殺。
Slave的KeepAlived經過心跳檢測發現這個狀況,就會將VIP的請求接管
vi chk_mysql.sh
#!/bin/bash counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l) if [ "${counter}" -eq 0 ]; then service keepalived stop fi
chmod 755 chk_mysql.sh
啓動keepalived服務。
master2
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { ops@wangshibo.cn tech@wangshibo.cn } notification_email_from ops@wangshibo.cn smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id MASTER-HA } vrrp_script chk_mysql_port { script "/keepalived/chk_mysql.sh" interval 2 weight -5 fall 2 rise 1 } vrrp_instance VI_1 { state BACKUP interface eth2 mcast_src_ip 10.1.80.114 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.1.80.119 } track_script { chk_mysql_port } }
vi chk_mysql.sh
#!/bin/bash counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l) if [ "${counter}" -eq 0 ]; then service keepalived stop fi
chmod 755 chk_mysql.sh
查看網卡