003.Heartbeat MySQL雙主複製

来源:https://www.cnblogs.com/itzgr/archive/2019/01/07/10231866.html
-Advertisement-
Play Games

一 基礎環境 節點 系統版本 MySQL版本 業務IP 心跳IP Master01 CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Master02 CentOS 7.5 MySQL 5.6 192.168.88.101 192.168.77.1 ...


一 基礎環境

節點 系統版本 MySQL版本 業務IP 心跳IP
Master01 CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100
Master02 CentOS 7.5 MySQL 5.6 192.168.88.101 192.168.77.101
VIP 192.168.88.88
關閉防火牆及SELinux; 配置NTP時鐘同步。

二 實際部署

2.1 安裝MySQL

  1 [root@master1 ~]# yum list installed | grep mysql	        #查看是否存在其他MySQL組件
  2 [root@master1 ~]# yum -y remove mysql*			#為避免衝突引,卸載已存在的組件
  3 [root@master1 ~]# yum -y install mariadb mariadb-server
  4 [root@master1 ~]# systemctl start mariadb.service
  註意:以上操作在Master02主機上也需要執行。

2.2 初始化MySQL

  1 [root@master1 ~]# mysql_secure_installation		#設置root密碼
  2 [root@master1 ~]# systemctl restart mariadb.service
  註意:以上操作在Master02主機上也需要執行。

2.3 master01 my.cf配置

  1 [root@master1 ~]# vi /etc/my.cnf
  2 [mysqld]
  3 ……
  4 server-id=1				#設置主伺服器master的id
  5 log-bin=mysql-bin			#配置二進位變更日誌命名格式
  6 replicate-wild-ignore-table=mysql.%
  7 replicate-wild-ignore-table=test.%
  8 replicate-wild-ignore-table=information_schema.%
  註意: master開啟二進位日誌後預設記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的資料庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項: 方法一: 不同步哪些資料庫:
  1 binlog-ignore-db = mysql
  2 binlog-ignore-db = test
  3 binlog-ignore-db = information_schema
  只同步哪些資料庫,除此之外,其他不同步
  1 binlog-do-db = mysqltest
方法二: 建議採用以下方式配置過濾:
  1 replicate-wild-ignore-table=mysql.%	        #從庫配置不同步表
  2 replicate-wild-do-table=test.%		#從庫配置需要同步的表
  提示:不要在主庫使用binlog-ignore-db和binlog-do-db,也不要在從庫使用replicate-wild-ignore和replicate-wild-do-table。

2.4 創建賬號

  1 [root@master1 ~]# mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  grant replication slave on *.* to 'repl_user'@'192.168.88.101' identified by 'x12345678';
  4 MariaDB [(none)]>  grant all privileges on *.* to 'root'@'192.168.88.%'  identified by 'x120952576' with grant option;
  5 MariaDB [(none)]>  flush privileges;
  6 [root@master1 ~]# systemctl restart mariadb.service
  7 [root@master1 ~]# mysql -uroot -p
  8 Enter password:
  9 MariaDB [(none)]>  show master status;
  01 master01: file:mysql-bin.000001 position:245

2.5 master02 my.cf配置配置

  1 [root@master2 ~]# vi /etc/my.cnf
  2 [mysqld]
  3 server-id=2				#設置主伺服器master的id
  4 log-bin=mysql-bin			#配置二進位變更日誌命名格式
  5 replicate-wild-ignore-table=mysql.%
  6 replicate-wild-ignore-table=test.%
  7 replicate-wild-ignore-table=information_schema.%
  8 read_only=1
 

2.6 創建賬號

  1 [root@master2 ~] mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  grant replication slave on *.* to 'repl_user'@'192.168.88.100' identified by 'x12345678';
  4 MariaDB [(none)]>  grant all privileges on *.* to 'root'@'192.168.88.%'  identified by 'x120952576' with grant option;
  5 MariaDB [(none)]>  flush privileges;
  6 [root@master2 ~]# systemctl restart mariadb.service
  7 [root@master2 ~]# mysql -uroot -p
  8 Enter password:
  9 MariaDB [(none)]>  show master status;
  02 master02: file:mysql-bin.000001 position:245

三 啟動主從

3.1 手動同步

如果Master01和Master02已經存在數據,則在開啟主備複製之前,需要將Master01和Master02手動同步一次(/var/lib/mysql整個目錄打包tar.gz),具體方法略。 註意:本實驗都是重新安裝的MySQL,可直接啟動同步。

3.2 啟動Master01的slave功能

  1 [root@master1 ~]# mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  change master to master_host='192.168.88.101',
  4 master_user='repl_user',
  5 master_password='x12345678',
  6 master_log_file='mysql-bin.000001',
  7 master_port=3306,
  8 master_log_pos=245;
  9 MariaDB [(none)]>  start slave;
 10 MariaDB [(none)]>  show slave status\G			#查看slave狀態
  03

3.3 啟動Master02的slave功能

  1 [root@Master02 ~]# mysql -uroot -p
  2 Enter password:
  3 MariaDB [(none)]>  change master to master_host='192.168.88.100',
  4 master_user='repl_user',
  5 master_password='x12345678',
  6 master_log_file='mysql-bin.000001',
  7 master_log_pos=245;
  8 MariaDB [(none)]>  start slave;
  9 MariaDB [(none)]>  show slave status\G			#查看slave狀態
  04 提示: slave的I/O和SQL線程都已經開始運行,而且Seconds_Behind_Master不再是NULL。日誌的位置增加了,意味著一些事件被獲取並執行了。如果你在master上進行修改,你可以在slave上看到各種日誌文件的位置的變化,同樣,你也可以看到資料庫中數據的變化。

四 安裝Heartbeat

略,見《002.Heartbeat部署及httpd高可用》中的Heartbeat安裝部分。 提示:相關安裝及主機名等準備步驟參考《002.Heartbeat部署及httpd高可用》即可。

五 配置Heartbeat

5.1 配置authkeys

  1 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/authkeys
  2 auth 3
  3 3 md5 Yes!
 

5.2 配置Heartbeat

  1 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
  2 logfile /var/log/ha-log			#記錄Heartbeat其他相關日誌信息
  3 logfacility     local0			#設置heartbeat的日誌,這裡用的是系統日誌
  4 keepalive 2				        #設定心跳(監測)時間間隔為2秒
  5 deadtime 15				        #宣告死亡時間
  6 warntime 10				        #心跳延時時間
  7 initdead 60				        #初始化時間
  8 udpport 694				        #用於通信的UDP埠
  9 bcast   eth1				#接受廣播心跳的網卡介面
 10 ucast eth1 192.168.77.101		        #置對方機器心跳檢測的IP
 11 auto_failback off			        #關閉自動切回恢復正常的主節點
 12 node master1.yewu.com			#集群節點的名稱,必須匹配uname -n的結果。
 13 node master2.yewu.com
 14 ping 192.168.88.1
 15 respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail
  註意: 主機和備機之間進行心跳檢測,當備機無法檢測到主機的心跳,則開啟vip; 如果主機和備機都沒有掛掉,由於通信問題導致相互無法連接,則會出現裂腦,即主備都對外聲明瞭vip,導致數據出現故障 ,因此建議主機和備機間應該採用專門只是用於檢測心跳的網卡(網路),其他數據(業務)網路應該獨立於此心跳網路。

5.3 配置haresources

  1 [root@master1 ~]# ll /usr/local/heartbeat/etc/ha.d/resource.d/	#查看現有資源類型
  2 [root@master1 ~]# vi /usr/local/heartbeat/etc/ha.d/haresources
  3 master1.yewu.com IPaddr::192.168.88.88/24/eth0 mariadb
  4 [root@master1 ~]# scp /usr/local/heartbeat/etc/ha.d/{ha.cf,haresources,authkeys} 192.168.88.101:/usr/local/heartbeat/etc/ha.d/		                                                #將所有配置複製至master2節點
  5 [root@master2 ~]# vi /usr/local/heartbeat/etc/ha.d/ha.cf
  6 ucast eth1 192.168.77.100		                                #置對方機器心跳檢測的IP
  7 [root@master1 ~]# systemctl stop mariadb.service
  8 [root@master1 ~]# systemctl disable mariadb.service
  9 [root@master2 ~]# systemctl stop mariadb.service
 10 [root@master2 ~]# systemctl disable mariadb.service
  提示:關閉MySQL啟動及自啟動,從而使mariadb基於Heartbeat資源形式喚醒; Heartbeat的haresources調用/etc/init.d下的腳本來啟動資源,基於CentOS7系統不存在此腳本,可手動寫入一個啟動腳本,MariaDB的啟動腳本可留言索要,兩個腳本都可用。

六 驗證Heartbeat

6.1 master1單節點啟動驗證

  1 [root@master1 ~]# systemctl start heartbeat.service
  2 [root@master1 ~]# systemctl enable heartbeat.service
  3 [root@master1 ~]# tail -f /var/log/ha-log		#驗證日誌
  05
  1 [root@master1 ~]# ifconfig				#查看活的的vip
06 埠測試:tcping.exe 192.168.88.88 3306 07

6.2 master2啟動並驗證

  1 [root@master2 ~]# systemctl start heartbeat.service
  2 [root@master1 ~]# tail -f /var/log/ha-log	#觀察master2節點啟動後的master1日誌
  08 埠測試:tcping.exe 192.168.88.88 3306 09
  1 [root@master1 ~]# shutdownr			#模擬master1節點宕機
  2 [root@master2 ~]# tail -f /var/log/ha-log	#觀察master2節點的切換log
  10
  1 [root@master2 ~]# ifconfig			#master2節點會自動接管vip
11 埠測試:tcping.exe 192.168.88.88 3306 12 提示:由於配置了auto_failback off,在master1節點恢復後資源依舊會保留至master2節點; 對於集群上節點之間的切換實質上是資源的接管,通常包括VIP分配回收,磁碟卸載掛載,以及服務的啟停等; 對於備用節點,其相應的共用磁碟狀態為不可讀寫,服務處於停止狀態; Heartbeat現有項目已拆分,建議使用pacemaker+corosync,可參考RH436相關文檔。

七 其他優化

7.1 檢測腳本

heartbeat只檢測心跳,即可檢測設備是否宕機,然後宕機後進行切換,而不會檢測上層應用,如MySQL。可手動寫入一個腳本檢測服務狀態,如MySQL。若mysql服務宕掉,則kill掉heartbeat進程從而實現故障轉移(類似keepalived),參考腳本如下: 腳本一:# cat mysql_down.sh
  1 #!/bin/sh
  2 #****************************************************************#
  3 # ScriptName: mysql_down.sh
  4 # Author: xhy
  5 # Create Date: 2018-12-20 16:40
  6 # Modify Author: xhy
  7 # Modify Date: 2018-12-20 16:40
  8 # Version:
  9 #***************************************************************#
 10 Date=$(date +%F" "%T)
 11 IP=$(ifconfig eth0 |grep "inet addr" |cut -d":" -f2 |awk '{print $1}')
 12 Mail="[email protected]"
 13 pkill keepalived
 14 echo "$Date $IP The mysql service failure,kill keepalived." |mail -s "Master-Backup MySQL Monitor" $Mail
  腳本二:# cat mysql_down.sh
  1 #!/bin/sh
  2 #****************************************************************#
  3 # ScriptName: mysql_down.sh
  4 # Author: xhy
  5 # Create Date: 2018-12-20 16:40
  6 # Modify Author: xhy
  7 # Modify Date: 2018-12-20 16:40
  8 # Version:
  9 #***************************************************************#
 10 MYSQL=/usr/bin/mysql
 11 MYSQL_HOST=localhost
 12 MYSQL_USER=root
 13 MYSQL_PASSWORD=x120952576
 14 date=`date +%y%m%d-%H:%M:`
 15 echo $date
 16 $MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
 17 #$mysqlclient --host=$host --port=$port--user=$user --password=$password  -e"show databases;" > /dev/null 2>&1
 18 if [ $? == 0 ]
 19 then
 20    echo " $host mysql login successfully "
 21    exit 0
 22 else
 23    echo " $host mysql login faild"
 24    /etc/init.d/heartbeat stop
 25    exit 2
 26 fi
 

7.2 定時檢測任務

  1 [root@master2 ~]# crontab -e
  2 */1 * * * * /root/mysql_down.sh >>/root/check_mysql.log
  參考文檔:https://blog.csdn.net/yabingshi_tech/article/details/51483196
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 第一種方法: 在終端輸入命令:ifconfig ip顯示為紅線標註的部分。 第二種方法: 在終端輸入命令:hostname -I 第三種方法: 在終端輸入:ip addr show|grep "inet" 參考文獻: 1. https://blog.csdn.net/frained/article/ ...
  • 一.安裝軟體 1.1.MYSQL安裝 下載mysql的repo源: 安裝mysql-community-release-el7-5.noarch.rpm包 安裝MYSQL 重啟服務: 登錄,並修改密碼: 1.2、nginx安裝 下載對應當前系統版本的nginx包 建立nginx的yum倉庫(預設yu ...
  • 某備份系統大量使用rsync來傳輸文件,但是偶爾會出現rsync客戶端在上傳數據的時候長時間卡死,本文記錄瞭解決問題的步驟。 本文只涉及rsync客戶端中IO相關邏輯,關於rsync的發送演算法並不涉及,服務端邏輯略有提到。 ...
  • Infi-chu: http://www.cnblogs.com/Infi-chu/ /usr/bin/env python執行時,先查找python解釋器的路徑,然後執行。/usr/bin/python執行時,直接執行這個路徑的python解釋器(已將python解釋器的路徑寫死)至於使用方面來說 ...
  • 一 基礎環境 節點 系統版本 MySQL版本 業務IP 心跳IP Master CentOS 7.5 MySQL 5.6 192.168.88.100 192.168.77.100 Slave CentOS 7.5 MySQL 5.6 192.168.88.101 192.168.77.101 VI ...
  • 1、Docker的四種網路模式 (1)docker四種網路模式如下: Bridge contauner 橋接式網路模式 Host(open) container 開放式網路模式 Container(join) container 聯合掛載式網路模式,是host網路模式的延伸 None(Close) ...
  • Linux 文件夾相關常用命令 查看 ls -la -l 列出詳細信息 -a 列出全部,包括.和.. 刪除 rm <folder> -rf -r 就是向下遞歸,不管有多少級目錄,一併刪除-f 直接強行刪除,不作任何提示的意思 創建 mkdir -m 770 <folder> -m owner許可權/o ...
  • (1)使用詳情: **************************** * 操作說明 * **************************** 1、修改Config文件夾中的Setting.json里的虛擬機設置(包括虛擬機存放的位置,運行記憶體和vhd的大小) Setting.json: 2 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...