Mysql 5.7 MHA 高可用
Mysql 5.7 MHA 高可用部署
導讀:為節省軟體授權成本,故決定將非核心的oracle業務轉型至開源化的Mysql中。因業務使用Oracle Rac架構無感知故障轉移已熟悉,要求Mysql也需滿足無感知的故障轉移效果。經團隊評估決定使用Mysql Mha高可用架構來完成故障轉移功能(雖然有30s左右的延遲,但足已滿足非核心繫統的要求)。
1.Mysql MHA高可用部署
1.1 主從複製與Manager/Node伺服器規劃
1
2
3
4
5
6 |
主庫: 192.168
.
56.101
node 從庫: 192.168
.
56.102
node 192.168
.
56.103
node manager 192.168
.
56.104
vip |
1.2 準備環境(略。1主2從基於GTID的部署)
1.3 配置關鍵程式軟連線
1
2
3 |
# 使用軟連線解決mha原始碼中絕對路徑的問題 ln -s /data/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog ln -s /data/mysql/bin/mysql /usr/bin/mysql |
1.4 配置各節點互信
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
Mysqldb01: rm -rf /root/.ssh ssh-keygen cd /root/.ssh mv id_rsa.pub authorized_keys scp -r /root/.ssh
192.168
.
56.102
:/root scp -r /root/.ssh
192.168
.
56.103
:/root 各節點驗證 Mysqldb01: ssh
192.168
.
56.101
date ssh
192.168
.
56.102
date ssh
192.168
.
56.103
date Mysqldb02: ssh
192.168
.
56.101
date ssh
192.168
.
56.102
date ssh
192.168
.
56.103
date Mysqldb03: ssh
192.168
.
56.101
date ssh
192.168
.
56.102
date ssh
192.168
.
56.103
date |
1.5 安裝軟體
1
2
3
4
5
6
7
8
9
10
11
12
13
14 |
# 下載mha軟體 mha官網:https:
//code.google.com/archive/p/mysql-master-ha/ # 從github下載軟體地址(推薦
) manager軟體:https:
//github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm node軟體:https:
//github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58-0.el7.centos.noarch.rpm # 所有節點安裝Node軟體依賴包 yum install perl-DBD-MySQL -y rpm -ivh mha4mysql-manager-
0.58
-
0
.el7.centos.noarch.rpm # Manager軟體安裝(Mysqldb03) # Manager軟體需要以下依賴包,需要自行下載 yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes rpm -ivh mha4mysql-node-
0.58
-
0
.el7.centos.noarch.rpm # Mysqldb01主庫中建立mha需要的使用者 grant all privileges on *.* to mha@
'192.168.56.%'
identified by
'mha'
; |
1.6 配置檔案準備(Mysqldb03)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
# 建立mha配置檔案和日誌檔案目錄 mkdir -p /data/mha chown mysql:mysql /data/mha/ -R mkdir -p /data/mha/app1/log chown mysql:mysql /data/mha/app1/log -R # 編輯mha配置檔案(Mysqldb03) vi /data/mha/mha.conf [server
default
] manager_log=/data/mha/app1/log/manager manager_workdir=/data/mha/app1/log master_binlog_dir=/data/binlog # vip failover scripts master_ip_failover_script=/usr/local/bin/master_ip_failover password=mha ping_interval=
2 repl_password=oracle repl_user=repl01 ssh_user=root user=mha [server1] hostname=
192.168
.
56.101 port=
3306 [server2] hostname=
192.168
.
56.102 port=
3306 [server3] hostname=
192.168
.
56.103 port=
3306 |
1.7 互信與複製(1主2從)狀態檢查
1
2 |
masterha_check_ssh --conf=/data/mha/mha.conf masterha_check_repl --conf=/data/mha/mha.conf |
1.8 開啟MHA(Mysqldb03)
1 |
nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/
null
> /data/mha/app1/log/manager.log
2
>&
1
& |
1.9 Mysql MHA狀態檢查
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 |
# 自動獲取MHA狀態和主庫IP [root@mysqldb03 opt]# masterha_check_status -conf=/data/mha/mha.conf mha (pid:
24100
)
is
running(
0
:PING_OK), master:
192.168
.
56.101 # 檢視
3
個節點server_id [root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.101
-e
"show variables like 'server_id'" mysql: [Warning] Using a password on the command line
interface
can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id |
101
| +---------------+-------+ [root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.102
-e
"show variables like 'server_id'" mysql: [Warning] Using a password on the command line
interface
can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id |
102
| +---------------+-------+ [root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.103
-e
"show variables like 'server_id'" mysql: [Warning] Using a password on the command line
interface
can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id |
103
| |
1.10 配置MHA 的vip功能
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
## Mysql Vip故障轉移指令碼master_ip_failover修改 vi /usr/local/bin/master_ip_failover # 修改以下內容,其中vip就是你要使用的vip,其中enp0s8就是vip的物理網路卡,所有節點中物理網路卡的enp0s8名字要相同 my $vip =
'192.168.56.104/24'
; my $key =
'1'
; my $ssh_start_vip =
"/sbin/ifconfig enp0s8:$key $vip"
; my $ssh_stop_vip =
"/sbin/ifconfig enp0s8:$key down"
; # 若是指令碼中有空格可使用以下命令進行轉換 [root@mysqldb03 opt]# dos2unix master_ip_failover.txt dos2unix: converting file master_ip_failover.txt to Unix format ... [root@mysqldb03 opt]# chmod +x master_ip_failover.txt [root@mysqldb03 opt]# mv master_ip_failover.txt master_ip_failover [root@mysqldb03 opt]# mv master_ip_failover /usr/local/bin/ ## Manager配置檔案修改: vi /data/mha/mha.conf master_ip_failover_script=/usr/local/bin/master_ip_failover ## 主庫首次使用vip需要手工開啟VIP地址 # 手工在主庫上繫結vip,注意一定要和配置檔案中的enp0s8一致,我的是enp0s8:
1
(
1
是key指定的值) ifconfig enp0s8:
1
192.168
.
56.104
/
24 ## 重啟mha masterha_stop --conf=/data/mha/mha.conf nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/
null
> /data/mha/app1/log/manager.log
2
>&
1
& |
1.11 Mysql MHA故障模擬與VIP偏移功能驗證
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 |
## Manager節點監控 # 停庫前 [root@mysqldb03 ~]# mysql -umha -pmha -h
192.168
.
56.104
-e
"show variables like 'server_id'" mysql: [Warning] Using a password on the command line
interface
can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id |
101
| +---------------+-------+ # 停主庫Mysqldb01: /etc/init.d/mysqld stop # 停庫後,且從庫切換主庫 [root@mysqldb03 mha]# mysql -umha -pmha -h
192.168
.
56.104
-e
"show variables like 'server_id'" mysql: [Warning] Using a password on the command line
interface
can be insecure. +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id |
102
| +---------------+-------+ ## Mysql Mha架構中VIP
192.168
.
56.104
始終不變,但主庫已從server_id=
101
切換至server_id=
102
(模擬server_id=
101
當機)。 |
1.12 Mysql MHA 故障後修復步驟
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 |
# 修復主庫 [root@Mysqldb01 ~]# /etc/init.d/mysqld start # 恢復主從結構 CHANGE MASTER TO MASTER_HOST=
'192.168.56.102'
, MASTER_PORT=
3306
, MASTER_AUTO_POSITION=
1
, MASTER_USER=
'repl01'
, MASTER_PASSWORD=
'oracle'
; start slave ; # 修改mha的配置檔案 [server1] hostname=
192.168
.
56.101 port=
3306 # 啟動MHA nohup masterha_manager --conf=/data/mha/mha.conf --remove_dead_master_conf --ignore_last_failover < /dev/
null
> /data/mha/app1/log/manager.log
2
>&
1
& |
參考:《Oldguo-標杆班級-MySQL-lesson10-MHA高可用技術》
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26442936/viewspace-2911629/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【MHA】mysql高可用之MHAMySql
- MySQL MHA高可用方案MySql
- 基於 MHA 高可用的 MySQLMySql
- mysql高可用架構MHA搭建MySql架構
- MySQL高可用方案MHA介紹MySql
- mysql MHA 高可用架構部署MySql架構
- MySQL 實現高可用架構之 MHAMySql架構
- Mysql 高可用(MHA)-讀寫分離(Atlas)MySql
- MySQL高可用架構-MMM、MHA、MGR、PXCMySql架構
- MySQL高可用架構之MHA實踐MySql架構
- mysql5.7MHA配置MySql
- MHA+MySQL主從配置實現MySQL高可用MySql
- MHA高可用+VIP漂移
- MySQL 高可用架構 - MHA環境部署記錄MySql架構
- MySQL高可用架構-MHA環境部署記錄MySql架構
- mysql mha 主從自動切換 高可用MySql
- MySQL5.7高可用版釋出MySql
- mysql高可用架構MHA搭建(centos7+mysql5.7.28)MySql架構CentOS
- 【DB寶19】MySQL高可用之MHA功能測試MySql
- MySQL高可用架構之MHA 原理與實踐MySql架構
- MySQL——MHA高可用群集部署及故障測試MySql
- MySQL高可用群集MHA部署及故障測試分析MySql
- 構建MHA實現MySQL高可用叢集架構MySql架構
- 【DB寶19】在Docker中使用MySQL高可用之MHADockerMySql
- MySQL高可用之MHA切換測試(switchover & failover)MySqlAI
- MySQL高可用方案MHA線上切換的步驟及原理MySql
- MySQL高可用方案MHA的一些總結和思考MySql
- MySQL5.7高可用版商業化釋出MySql
- MHA高可用配置及故障切換
- 【Mysql】高可用架構之-Lvs+keepalive+Altas+MHAMySql架構
- MHA高可用架構的實現方式架構
- MySQL資料庫實現高可用架構之MHA的實戰MySql資料庫架構
- MySQL5.7 Galera Cluster安裝搭建及高可用測試MySql
- 部署MHA+keepalived+ProxySQL高可用架構SQL架構
- MySQL 5.7和8.0 MHA架構下sysbench壓測MySql架構
- MHA+ProxySQL實現讀寫分離高可用SQL
- MySQL核心月報2014.11-MySQL· 5.7特性·高可用支援MySql
- 【MySQL】【高可用】從masterha_master_switch工具簡單分析MHA的切換邏輯MySqlAST