本文為墨天輪數據庫管理服務團隊第81期技術分享,內容原創,作者為技術顧問張宇健,如需轉載請聯繫小墨(VX:modb666)並註明來源。如需查看更多文章可關注【墨天輪】公眾號。
一、介紹
利用keepalived實現MySQL數據庫的高可用,Keepalived+MySQL雙主來實現MySQL-HA,兩台Mysql數據庫的數據保持完全一致,實現方法是兩台MySQL互為主從關係,通過keepalived配置VIP,實現當其中的一台MySQL數據庫宕機後,應用能夠自動切換到另外一台MySQL數據庫上去,保證系統的高可用。
二、搭建前準備
| mysql | 8.0.25 |
|---|---|
| keepalived | keepalibed-2.2.8 |
| Mysql-master-1 | 192.168.1.80 |
| Mysql-master-2 | 192.168.1.81 |
| Mysql——vip | 192.168.1.82(這個只是虛擬IP,不用準備虛擬機) |
三、搭建步驟
3.1 關閉防火牆
兩台機器都關閉firewalld
systemctl stop firewalld
3.2 搭建雙主同步
3.2.1修改master-1配置文件
現在需要搭建兩個機器的主主同步
vi /etc/my.cnf
3.2.2修改master-2配置文件
vi /etc/my.cnf
3.2.3 在兩台節點分別創建同步用户
mysql> create user 'test'@'%' identified by 'test123';
3.2.4搭建並啓動雙主複製
master-2
記錄file和position的值,在master-1中會用到
master-1
如上圖io和 sql線程都為yes即成功;
master-1
show master status;
記錄file和position,master-2會用到
master-2
change master to master_host='192.168.1.80',master_user='test',master_password='test123',master_log_file='mysql-bin.000001',master_log_pos=871,get_master_public_key=1;
如上圖兩個線程都為yes,即成功。
兩個機器都成功,即雙主複製搭建成功。
3.2.5測試雙主複製
master-1測試
master-2測試
如上面兩圖,主1創建數據庫創建表之後在主2可以看到,主2插入數據主1也可以看到。
3.2.6主備庫都關機後需要重新開啓同步
若雙主都關機後需要重新配置第3.2.4步
3.2.7配置過程中參數説明
狀態參數説明
| Slave\_IO\_state | 顯示當前IO線程的狀態,一般情況下就是顯示等待主服務器發送二進制日誌。 |
|---|---|
| Master\_log\_file | 顯示當前同步的主服務器的二進制日誌。 |
| Read\_master\_log_pos | 顯示當前同步到主服務器上二進制日誌的偏移量位置。 |
| Relay\_master\_log_file | 當前中繼日誌同步的二進制日誌。 |
| Relay\_log\_file | 顯示當前寫入的中繼日誌。 |
| Relay\_log\_pos | 顯示當前執行到中繼日誌的偏移量位置。 |
| Slave\_IO\_running | 從服務器中IO線程的運行狀態,yes代表正常 |
| Slave\_SQL\_running | 從服務器中sql線程的運行狀態,YES代表正常 |
| Exec\_Master\_log_pos | 表示同步到主服務器的二進制日誌的偏移量位置。 |
slave啓停常用命令
| STOP SLAVE IO_THREAD; | 停止IO進程 |
|---|---|
| STOP SLAVE SQL_THREAD; | 停止SQL進程 |
| STOP SLAVE; | 停止IO和SQL進程 |
| START SLAVE IO_THREAD; | 啓動IO進程 |
| START SLAVE SQL_THREAD; | 啓動SQL進程 |
| START SLAVE; | 啓動IO和SQL進程 |
| RESET SLAVE; | 用於讓從屬服務器忘記其在主服務器的二進制日誌中的複製位置, 它會刪除http://master.info和http://relay-log.info文件,以及所有的中繼日誌,並啓動一個新的中繼日誌,當你不需要主從的時候可以在從上執行這個操作。 |
| SHOW SLAVE STATUS; | 查看MySQL同步狀態 |
| STOP SLAVE;SET GLOBAL SQL\_SLAVE\_SKIP_COUNTER=1;START SLAVE; | 經常會遇到mysql主從同步遇到錯誤的時候,比如一個主鍵衝突等,那麼我就需要在確保那一行數據一致的情況下臨時的跳過這個錯誤,那就需要使用SQL\_SLAVE\_SKIP_COUNTER = n命令了,n是表示跳過後面的n個事件 |
| CHANGE MASTER TO MASTER\_HOST=‘10.1.1.75’, MASTER\_USER=‘replication’, MASTER\_PASSWORD=‘123456’, MASTER\_LOG\_FILE=‘mysql-bin.000006’, MASTER\_LOG_POS=106; START SLAVE; | 從指定位置重新同步 |
3.3 keepalived安裝部署
在master-1,master-2服務器分別安裝keepalived,安裝步驟相同,配置文件不同。按照我的步驟即可完成。
3.3.1安裝依賴包,下載keepalived(兩個節點步驟相同,下面就寫一份)
下載到/opt目錄下並解壓
yum -y install gcc openssl-devel popt-devel psmisc
yum install wget
cd /opt/
3.3.2配置keepalived並編譯(兩個節點步驟相同,下面就寫一份)
cd keepalived-2.2.8
如上圖即成功。
make && make install
如上圖即編譯成功。
3.3.3將文件複製到對應目錄下(兩個節點步驟相同,下面就寫一份)
[root@128 keepalived-2.2.7]# mkdir /etc/keepalived
3.3.4新建shutdown.sh文件(兩個節點步驟相同,下面就寫一份)
vi /etc/keepalived/keepalived.conf
複製下面內容,:wq保存並退出。
#!/bin/bash
將執行權限設置為可執行
[root@skymachine keepalived]# chmod +x /etc/keepalived/shutdown.sh
3.3.5ifconfig查看網卡名稱
master-1,master-2網卡名稱為ens33
3.3.6 修改master-1服務器keepalived配置文件(配置文件兩個機器不同,3.3.7是master-2的配置)
把原有的keepalived.conf更名為keepalived_bak.conf,然後新建keepalived.conf配置文件
cd /etc/keepalived/
將以下內容複製進去
! Configuration File for keepalived
注:如果你的ip和我不同,需要更改的位置有(master-2同理):
如果網卡和我不同也需要改網卡
3.3.7修改master-2服務器keepalived配置文件
下圖和master-1步驟相同
配置文件就和master-1配置不同了,不同的地方為router\_id、priority、real\_server、connect_ip四個配置
! Configuration File for keepalived
3.3.8啓動服務 (兩個節點步驟相同,下面就寫一份)
[root@skymachine keepalived]# systemctl start keepalived
3.3.9配置虛擬ip登錄用户(兩個節點步驟相同,下面就寫一份)
在兩台服務器上新建用户以驗證keepalived服務是否配置成功
useradd -m keepalived
3.3.10測試keepalived服務
啓動後相當於虛擬出一個vip 192.168.15.100,用ssh工具連接服務器,輸入ip和用户名及密碼,登錄至虛擬ip上
連接進去使用ifconfig,可以看到虛擬vip實際上使用的實體服務器是master-1(192.168.1.80)服務器。
將master-1(192.168.1.80)服務器的keepalived應用停止,vip192.168.1.82服務器會斷線,重新連接,再次查看192.168.1.82服務ifconfig,可以看到,192.168.1.82服務器自動將實體機ip漂移到了master-2(192.168.1.81)服務器上
master-1
[root@centos7 keepalived]# systemctl stop keepalived
開啓master-1的keepalived vip自動飄過來了
3.4 MySQL雙主雙活+keepalived高可用整體測試
3.4.1啓動服務
將master-1、master-2兩台服務器mysql、keepalived應用全部啓動,然後新建一個用户,配置權限可以外網訪問
mysql> CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARSET utf8mb4 COLLATE utf8m b4_general_ci;
3.4.2連接keepalived虛擬服務器
用MySQL連接工具連接keepalived虛擬出來的192.168.1.82服務器
3.4.3建立測試數據
3.4.4查看master-1、master-2同步情況
3.4.5 查看192.168.1.82服務器實際物理機ip
使用ifconfig命令查看實際使用的物理機為192.168.1.80,所以master-1(192.168.1.80)服務器mysql為主數據庫。
3.4.6 停止物理機mysql服務
此時手動將master-1服務器mysql停止,keepalived檢測到192.168.1.80服務3306端口連接失敗,會執行/etc/keepalived/shutdown.sh腳本,將192.168.1.80服務器keepalived應用結束
mysql> shutdown;
3.4.7查看漂移ip執行情況
此時再連接192.168.1.82服務下,ifconfig查看,發現已經實際將物理機由master-1(192.168.1.80)到master-2(192.168.1.81)服務器上
3.4.8在新的主服務器插入數據進行測試
再使用mysql連接工具連接192.168.1.82的mysql,插入一條數據,測試是否將數據存入master-2(192.168.1.81)服務器mysql中
3.4.9查看新主服務器數據
查看master-2服務器mysql數據,數據已同步,説明keepalived搭建高可用成功,當master-1服務器mysql出現問題後keepalived自動漂移IP到實體機master-2服務器上,從而使master-2服務器mysql作為主數據庫。
3.4.10重啓master-1服務,查看數據同步情況(重啓之後,vip會自動飄到master-1節點)
[mysql@centos7 ~]$ mysql -uroot -p
查看master-1數據庫test2表數據,數據已同步成功。
至此,雙主雙活+keepalived高可用部署並測試完成。
墨天輪從樂知樂享的數據庫技術社區蓄勢出發,全面升級,提供多類型數據庫管理服務。墨天輪數據庫管理服務旨在為用户構建信賴可託付的數據庫環境,併為數據庫廠商提供中立的生態支持。
服務官網:https://www.modb.pro/service