博客 / 詳情

返回

技術分享 | MySQL 8.0高可用之雙主+keepalived

本文為墨天輪數據庫管理服務團隊第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

user avatar u_16163480 頭像
1 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.