基於keepalived搭建MySQL熱機集羣

背景

MySQL的高可用方案通常有以下幾種:mysql

keepalived+雙主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Clustersql

比較經常使用的是keepalived+雙主,MHA和PXC。數據庫

對於小公司,通常推薦使用keepalived+雙主,便於維護。bash

環境

mysql雙主配置

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查看複製是否搭建成功。

出現以下內容說明成功。

 

五、數據同步測試

在兩側插入數據發現正常同步。

 keepalived配置

一、安裝依賴包

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

查看網卡

相關文章
相關標籤/搜索