使用mysql主從熱備+keepalived服務+ipvsadm工具 實現 mysql高可用主備+負載均衡

目錄

1、工作原理

2、環境準備

3、分別在主服務器和備用服務器上安裝keepalived和ipvsadm

4、修改keepalived服務的配置文件

4.1 修改主服務器上的keepalive服務的配置文件

4.2 修改備用服務器上的keepalive服務配置文件

5、編寫mysql監控腳本放到主服務器上

6、在主服務器和備用服務器上查看虛擬IP是否綁定到ens33網卡上。

7、高可用驗證

7.1 模擬宕機,查看虛擬IP是否漂移到備用服務器上,驗證高可用效果


1、工作原理

ipvsadm工具工作原理:

ipvsadm是一個用于管理IPVS(IP Virtual Server)的命令行工具。IPVS是linux內核中的一種負載均衡技術,它允許將網絡流量分發到多個后端服務器,以提高系統的可用性、性能和擴展性。而Keepalived是在ipvs基礎上實現高可用性。

ipvsadm提供了對IPVS的配置和管理功能,可以使用它來添加、刪除和修改虛擬模擬服務器(VS),以及與之關聯的后端服務器(Real Server)

keepalived服務工作原理可參考之前寫的博文:

nginx配置實例-高可用主備模式_nginx主備模式-CSDN博客

keepalived是一個基于VRRP的協議工具,它與ipvsadm結合使用,提供高可用性和故障轉移的功能。keepalived監控主服務器狀態,一旦檢測到主服務器不可用,它會自動將虛擬IP切換到備用服務器上,確保服務的持續可用性。keepalived使用ipvsadm來配置和管理ipvs ,來實現負載均衡和故障轉移。

通過將ipvsadm和keepalived結合使用,可以實現以下目標:

負載均衡使用ipvsadm配置ipvs,將流量分發到多個后端服務器,提高系統的可用性和擴展性。
高可用性使用keepalived監控主服務器,并在主服務器故障時自動切換到虛擬IP的備份服務器,確保服務的持續可用性。
故障轉移在主服務器故障后,keepalived使用ipvsadm更新ipvs配置,將流量重定向到備用服務器 ,實現故障轉移。

一般情況下,當keealived服務和ipvsadmy工具一起使用時,keepalived會自動配置和管理ipvsadm,無需手動進行ipvsadm的配置。keepalived會根據配置文件中定義的IPVS配置(虛擬IP和后端服務器信息),自動使用ipvsadm對ipvs配置和管理,包括添加、刪除和修改虛擬服務器和后端服務器。

2、環境準備

主機名IP地址說明
主服務器mysql_master192.168.81.131/24已安裝且部署好mysql主從熱備
備用服務器mysql_slave192.168.81.132/24已安裝且部署好mysql主從熱備

mysql主從熱備部署參考上一篇博文:

mysql主從熱備部署-CSDN博客

3、分別在主服務器和備用服務器上安裝keepalived和ipvsadm

使用yum方式安裝

yum install keepalived ipvsadm -y 

安裝好后,將keepalivd程序開啟,并且加入到開機啟動項中。

systemctl start keepalived
systemctl enable keeaplived

4、修改keepalived服務的配置文件

yum方式安裝的配置文件在/etc/keepalived目錄下。

4.1 修改主服務器上的keepalive服務的配置文件

修改配置文件前,先做好備份!!!

使用sed命令將配置文件中默認內容刪除

將下面參數復制到配置文件/etc/keepalived/keepalived.conf中

[root@mysql_master ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id master
}vrrp_scripts chk_mysql { script /etc/keepalived/scripts/chk_mysql.sh    # 監控mysqld服務腳本路徑interval 2                                     # 檢測時間間隔weight -10                                     # 權重減10}vrrp_instance VI_1 {state MASTER                                   # 主從狀態interface ens33                                # 綁定虛擬ip的網絡接口virtual_router_id 51                           # 綁定虛擬路由的ID號,兩個節點的設置必須一樣priority 100                                   # 主節點的優先級,要比從節點高advert_int 1                                   # 每隔1秒發送一次心跳 authentication {                               # 定義認證方式和密鑰auth_type PASSauth_pass 1111                             # 校驗類型:密碼1111}track_script {                                 # 將track_scripts模塊加入到instance模塊chk_mysql                                  # 執行mysql監控服務                   
}virtual_ipaddress {192.168.81.138                             # 虛擬IP(設置虛擬IP網段需要同一個,需要根據實際要求調整)}
}virtual_server 192.168.81.138 3306 {               # 定義虛擬服務器IP地址和端口為192.168.81.138 端口為3306delay_loop 6                                   # 延遲時間lb_algo rr                                     # 負載均衡算法,這里使用輪序(rr)lb_kind DR                                     # 負載就均衡方式persistence_timeout 0                          # 存儲時間protocol TCP                                   # 協議類型real_server 192.168.81.132 3306 {              # 實際的后端服務器配置 weight 1TCP_CHECK {                                # 健康檢查配置 connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

修改好配置后,重啟keepalived服務,使得配置文件的修改內容生效。

4.2 修改備用服務器上的keepalive服務配置文件

配置步驟與3.1步驟相似,但是配置文件的內容略有不同。

[root@mysql_slave ~]# cat /etc/keepalived/keepalived.conf
global_defs {router_id backup
}vrrp_instance VI_1 {state BACKUP                                   # 主從狀態interface ens33                                # 綁定虛擬ip的網絡接口virtual_router_id 51                           # 綁定虛擬路由的ID號,兩個節點的設置必須一樣priority 99                                    # 從節點的優先級,要比主節點低advert_int 1                                   # 每隔1秒發送一次心跳 authentication {                               # 定義認證方式和密鑰auth_type PASSauth_pass 1111                             # 校驗類型:密碼1111}virtual_ipaddress {192.168.81.138                             # 虛擬IP(設置虛擬IP網段需要同一個,需要根據實際要求調整)}
}virtual_server 192.168.81.138 3306 {               # 定義虛擬服務器IP地址和端口為192.168.81.138 端口為3306delay_loop 6                                   # 延遲時間lb_algo rr                                     # 負載均衡算法,這里使用輪序(rr)lb_kind DR                                     # 負載就均衡方式persistence_timeout 0                          # 存儲時間protocol TCP                                   # 協議類型real_server 192.168.81.132 3306 {              # 實際的后端服務器配置 weight 1TCP_CHECK {                                # 健康檢查配置 connect_port 3306connect_timeout 3nb_get_retry 3delay_before_retry 3}}}

5、編寫mysql監控腳本放到主服務器上

根據上面配置文件定義的監控路徑來創建目錄存放mysq服務的監控腳本。

編寫監控腳本/etc/keepalived/scripts/chk_mysql.sh

#!/bin/bash# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# + 1、此腳本為MySQL監控腳本,與keepalived組件配合使用
# + 2、keepalived配置文件:/etc/keepalived/keepalived.conf
# + 3、腳本輸出日志/etc/keepalived/check_service.log
# + 4、默認腳本路徑在/etc/keepalived/scripts下,需要改變路徑,請修改keepalived配置
# + 5、創建此腳本后請賦予可執行權限chmod +x /etc/keepalived/scripts/chk_mysql.sh
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++# 基礎參數
DATE=`date +%Y%m%d`
logPath=/etc/keepalived# 檢測MySQL進程是否正常運行
A=`ps -C mysqld --no-header | wc -l`
#將腳本中的輸出內容同時輸出到終端和指定的日志文件中,并以追加的方式寫入日志文件。這樣可以方便查看腳本的輸出并記錄日志信息。
echo "$(date +%Y-%m-%d' '%H:%M:%S) MySQL進程數:$A" | tee -a ${logPath}/check_service.log
if [ $A -eq 0 ]; then# 如果MySQL進程宕機了,嘗試重啟MySQLsystemctl start mysqld# 等待一小會再次檢查MySQL,如果沒有啟動成功,則停止keepalived,使其啟動備用機sleep 3if [ `ps -C mysqld --no-header | wc -l` -eq 0 ]; thenecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL已停止!停止keepalived!" | tee -a ${logPath}/check_service.logsystemctl stop keepalivedexit 1fi
elseecho "$(date +%Y-%m-%d' '%H:%M:%S) MySQL正在運行!" | tee -a ${logPath}/check_service.logexit 0
fi

編寫并調試好后,給腳本添加可執行權限。

然后重啟備份服務器上的keepalived服務,確定虛擬IP地址綁定到主服務器上的網卡上。

6、在主服務器和備用服務器上查看虛擬IP是否綁定到ens33網卡上。

7、高可用驗證

7.1 模擬宕機,查看虛擬IP是否漂移到備用服務器上,驗證高可用效果

方法1:systemctl stop mysqld,停止mysqld服務

方法2:kill殺死mysqld的運行進程,停止mysqld服務


?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13428.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13428.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13428.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

echers配置項:X軸,Y軸顏色修改

如上圖綠框所示,修改x,y軸的顏色 let option {xAxis: {axisLine:{lineStyle:{color:red}},},yAxis: {type: value,axisLine:{lineStyle:{color:red}},}, }

學習MySQL(六):Python的連接與操作

安裝第三方模塊pymysql pip install pymysql 或者 通過PyCharm后臺操作 連接mysql # 語法示例 import pymysql db pymysql.connect(hostlocalhost,userroot,password"123456",databaseschool,port3306,charset"utf8") 數據操作的基本語法 import pymys…

通過gen_compile_commands.py產生compile_commands.json文件的方法

大家在使用vscode查看linux源代碼時,會有很多飄紅處,而且函數的跳轉非常不方便。所以linux給了一個腳本gen_compile_commands.py,此腳本類似ctags這樣,產生相應的關聯之類的數據庫,方便函數及文件的跳轉等等。非常好。…

軟件測試委托合同(Word原件實際參考)

一、 任務表述 二、雙方的主要義務 三、履約地點 四、合同價款 五、測試費用支付方式 六、履行的期限 七、資料的保密 八、 風險責任的承擔 九、驗收方法 十、 爭議解決 十一、 其他 十二、簽章 十三、計算機軟件產品鑒定測試保密協議 軟件資料清單列表部分文檔: …

Object.wait()和LockSupport.park()

Object.wait() 和 LockSupport.park() 都是用來使當前線程等待的方法,但它們在使用場景和機制上有所不同: Object.wait() 用途:wait() 方法屬于對象監視器(Monitor)的一部分,通常與 synchronized 塊或方法…

電感式傳感器

電感傳感器是基于電磁感應原理,將被測非電量(如位移、壓力、振動等)轉換為電感量變化的一種結構性傳感器。利用自感原理的有自感式傳感器(可變磁阻式),利用互感原理的有互感式(差動變壓器式和渦…

AI學習指南線性代數篇-矩陣的運算

AI學習指南線性代數篇-矩陣的運算 線性代數中,矩陣的運算是一項重要而基礎的內容。在人工智能領域,矩陣的運算被廣泛應用于各種算法中,如神經網絡、圖像處理、自然語言處理等。本文將從矩陣的運算概述、在AI中的使用場景、定義和意義以及公式…

QT:QML制作線形圖

目錄 一.介紹 二.引入庫 三.自定義屬性 四.懸停處理函數 五.設置X軸 六.設置Y軸 七.畫線 八.測試點坐標 九.設置值 十.效果演示 十一.代碼演示 1.LineGraph.qml 2.main.qml 一.介紹 線形圖(也稱為折線圖)是一種常用的數據可視化工具&#…

如何找到MySQL中存儲引擎所對應的表空間并且打開?

在上節課我們學習了數據庫(MySQL)進階:存儲引擎,有不少同學產生疑惑,到底要怎么找到表空間并且打開啊?這節課我們就來探討。 首先,根據這個路徑:C:\ProgramData\MySQL\MySQL Server…

mybatis-plus如何使用QueryWrapper和LambdaQueryWrapper的and方法?

構造器去構造條件的時候,我們都知道eq方法去鏈式的時候是自動添加and的,那如果需要and的那個條件需要加括號呢? 環境 Jdk 1.8、mybatis-plus 3.5.3.2、mysql 5.7.11 示例 sql: select * from user where openid 1 and (phon…

谷歌Flank潛藏3年的Github Action供應鏈攻擊

01 簡 介 Flank [1] 是谷歌 Firebase Test lab 開源在 Github 的一個項目,用于同時對多個安卓和IOS設備進行測試。2024年4月15號 AWS 安全工程師 Adnan Khan 公布了關于該項目代碼倉庫 Github Action CI/CD 存在漏洞的細節[2],漏洞在2020年于此 代碼合…

通信網絡時鐘同步(PTP網絡授時服務器)技術探討

通信網絡時鐘同步(NTP網絡授時服務器)技術探討 通信網絡時鐘同步(NTP網絡授時服務器)技術探討 1、著移動通信業務的發展和移動用戶的快速增長, 移動網絡架構向IP化、寬帶化進展。為了適應業務IP化發展趨勢&#xff0c…

02 VUE學習:模板語法

模板語法 Vue 使用一種基于 HTML 的模板語法,使我們能夠聲明式地將其組件實例的數據綁定到呈現的 DOM 上。所有的 Vue 模板都是語法層面合法的 HTML,可以被符合規范的瀏覽器和 HTML 解析器解析。 在底層機制中,Vue 會將模板編譯成高度優化的…

開發vue3,真的可以不用ref/reactive了,也不需要ref.value

什么是Cabloy-Front? Cabloy-Front 是一款支持 IOC 容器的 Vue3 框架。不用ref/reactive,不用ref.value,不用pinia 與UI庫的配合 Cabloy-Front 可以搭配任何 UI 庫使用,并且內置了幾款 UI 庫的項目模版,便于開箱即用…

免費SSL證書簽發安裝指南

一、簽發 1.選擇證書頒發機構(CA):首先,你需要找到一個提供免費SSL證書的CA。有些CA會提供永久免費的SSL證書,而有些則可能只提供有限時間的試用證書,如JoySSL就提供永久免費證書。 2.生成CSR&#xff08…

WPF 鼠標拖拽平移

效果 xaml <ScrollViewer x:Name"scrollViewer" HorizontalScrollBarVisibility"Hidden" VerticalScrollBarVisibility"Disabled" Background"#FFF1ADAD"PreviewMouseDown"ScrollViewer_OnPreviewMouseDown"PreviewMou…

Electron學習筆記(一)

文章目錄 相關筆記筆記說明 一、輕松入門 1、搭建開發環境2、創建窗口界面3、調試主進程 二、主進程和渲染進程1、進程互訪2、渲染進程訪問主進程類型3、渲染進程訪問主進程自定義內容4、渲染進程向主進程發送消息5、主進程向渲染進程發送消息6、多個窗口的渲染進程接收主進程發…

白鯨開源CEO郭煒在2024 DataOps發展大會上獲聘專家

2024年5月15日&#xff0c;白鯨開源CEO郭煒在2024 DataOps發展大會上被正式聘任為DataOps專家&#xff0c;并獲得了榮譽證書。本次大會由中國通信標準化協會主辦&#xff0c;中關村科學城管委會提供支持&#xff0c;大數據技術標準推進委員會&#xff08;CCSATC601&#xff09;…

iisnginx環境一次奇怪的跨域問題解決經過

跨域問題描述&#xff1a; iis網站跨域、nginx 網站跨域 都已配置&#xff0c;訪問接口依然出現跨域問題。 錯誤提示&#xff1a; ccess to XMLHttpRequest at ‘https://xxx.com/gameapi/preserve/get/status’ from origin ‘https://cdn.xxx.com’ has been blocked by CO…

Python簡易信息管理系統

我們將通過一個實例來探討如何使用Python與MySQL數據庫進行交互&#xff0c;以構建一個簡單的學生信息管理系統。這個系統將能夠執行基本的CRUD&#xff08;創建(Create)、讀取(Retrieve)、更新(Update)、刪除(Delete)&#xff09;操作&#xff0c;以管理學生信息。我們將使用m…