MHA管理所有数据库服务器
目錄
一.MHA概述
1.MHA簡介
2.MHA組成
3.MHA工作過程
二.部署MHA集群
1.環(huán)境準備架構(gòu)圖
2.數(shù)據(jù)庫服務(wù)器基礎(chǔ)配置
3.配置ssh免密登錄
4.安裝MHA
5.配置一主多從結(jié)構(gòu)
6.配置MHA管理節(jié)點
7. 配置數(shù)據(jù)節(jié)點
8. 測試配置
9.訪問集群
10.測試高可用
11.修復故障服務(wù)器
一.MHA概述
1.MHA簡介
????????- 由日本DeNA公司youshimaton開發(fā)
????????- 是一套優(yōu)秀的實現(xiàn)MySQL高可用的解決方案
????????- 數(shù)據(jù)庫的自動故障切換操作能做到在0~30秒之內(nèi)完成
????????- MHA能確保在故障切換過程中最大限度保證數(shù)據(jù)的一致性,以達到真正意義上的高可用
2.MHA組成
????????- MHA Manager(管理節(jié)點)
??????? - 可以單獨部署在一臺獨立的機器上
??????? - 也可以部署在某臺數(shù)據(jù)庫服務(wù)器上
????????- MHA Node(數(shù)據(jù)節(jié)點)
? ????? - 存儲數(shù)據(jù)的MySQL服務(wù)器
? ????? - 運行在每臺MySQL服務(wù)器上
3.MHA工作過程
????????- 由Manager定時探測集群中的master節(jié)點
????????- 當master故障時,Manager自動將擁有最新數(shù)據(jù)的slave提升為新的master
二.部署MHA集群
1.環(huán)境準備架構(gòu)圖
?2.數(shù)據(jù)庫服務(wù)器基礎(chǔ)配置
1) - 配置服務(wù)器192.168.1.11
[root@mysql1 ~]# vim /etc/my.cnf [mysqld] server_id = 11 log-bin = master11 plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" rpl_semi_sync_master_enabled=1 rpl_semi_sync_slave_enabled=1 relay_log_purge=0 # 禁止slave_sql線程執(zhí)行完relay log后將其刪除。 ... ...[root@mysql1 ~]# systemctl start mysqld [root@mysql1 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> grant replication slave on *.* to repluser@'%' Identified by 'NSD2021@tedu.cn';2) 配置服務(wù)器192.168.1.12
[root@mysql2 ~]# vim /etc/my.cnf [mysqld] server_id=12 log_bin=master12 plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" rpl_semi_sync_master_enabled=1 rpl_semi_sync_slave_enabled=1 relay_log_purge=0[root@mysql2 ~]# systemctl start mysqld [root@mysql2 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> grant replication slave on *.* to repluser@'%' Identified by 'NSD2021@tedu.cn';3)配置服務(wù)器192.168.1.13
[root@mysql3 ~]# vim /etc/my.cnf [mysqld] server_id=13 log_bin=master13 plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" rpl_semi_sync_master_enabled=1 rpl_semi_sync_slave_enabled=1 relay_log_purge=0 ... ...[root@mysql3 ~]# systemctl start mysqld [root@mysql3 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> grant replication slave on *.* to repluser@'%' Identified by 'NSD2021@tedu.cn';3.配置ssh免密登錄
- 配置服務(wù)器192.168.1.11
[root@mysql1 ~]# ssh-keygen [root@mysql1 ~]# for i in 12 13 > do > ssh-copy-id root@192.168.1.$i > done- 配置服務(wù)器192.168.1.12
[root@mysql2 ~]# ssh-keygen [root@mysql2 ~]# for i in 11 13; do ssh-copy-id root@192.168.1.$i; done- 配置服務(wù)器192.168.1.13
[root@mysql3 ~]# ssh-keygen [root@mysql3 ~]# for i in 11 12; do ssh-copy-id root@192.168.1.$i; done### 配置管理服務(wù)器
- 實現(xiàn)免密連接三臺數(shù)據(jù)庫服務(wù)器
[root@mha1 ~]# ssh-keygen [root@mha1 ~]# for i in 11 12 13; do ssh-copy-id root@192.168.1.$i; done4.安裝MHA
1) 配置yum源
[root@zzgrhel8 mha-soft-student]# ls mha4mysql-node-0.56-0.el6.noarch.rpm perl-Config-Tiny-2.14-7.el7.noarch.rpm perl-Email-Date-Format-1.002-15.el7.noarch.rpm perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm perl-Mail-Sender-0.8.23-1.el7.noarch.rpm perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm perl-MIME-Lite-3.030-1.el7.noarch.rpm perl-MIME-Types-1.38-2.el7.noarch.rpm perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm [root@zzgrhel8 mha-soft-student]# cp *.rpm /var/www/html/mysql/ [root@zzgrhel8 mha-soft-student]# cd /var/www/html/mysql/ [root@zzgrhel8 mysql]# createrepo -v .2)在三臺數(shù)據(jù)庫服務(wù)器和管理節(jié)點上安裝perl軟件包
# mha node節(jié)點 [root@mysql{1,2,3} ~]# yum clean all [root@mysql{1,2,3} ~]# yum install -y gcc pcre-devel pkgconfig autoconf automake perl-ExtUtils-MakeMaker perl-CPAN perl-DBI perl-DBD-MySQL# mha 管理節(jié)點 [root@mha1 ~]# yum clean all [root@mha1 ~]# yum install -y perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-ExtUtils-MakeMaker perl-CPAN5.配置一主多從結(jié)構(gòu)
1) 配置主服務(wù)器192.168.1.11
[root@mysql1 ~]# mysql -uroot -pNSD2021@tedu.cn
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File??????????? | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master11.000002 |????? 701 |????????????? |????????????????? |?????????????????? |
+-----------------+----------+--------------+------------------+-------------------+
1 row in set (0.18 sec)
2)配置主服務(wù)器192.168.1.12
[root@mysql2 ~]# mysql -uroot -pNSD2021@tedu.cn
3)配置主服務(wù)器192.168.1.13
[root@mysql3 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> change master to-> master_host="192.168.1.11",-> master_user="repluser",-> master_password="NSD2021@tedu.cn",-> master_log_file="master11.000002",-> master_log_pos=701;mysql> start slave;mysql> show slave status\G ... ...Slave_IO_Running: YesSlave_SQL_Running: Yes ... ...6.配置MHA管理節(jié)點
1)安裝軟件
[root@mha1 ~]# yum clean all [root@mha1 ~]# yum install -y mha4mysql-node下載地址:https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2https://code.google.com/p/mysql-master-ha/wiki/Downloads?tm=2
# 拷貝mha服務(wù)端到管理節(jié)點
[root@zzgrhel8 mha]# scp mha4mysql-manager-0.56.tar.gz 192.168.1.15:/root[root@mha1 ~]# tar xf mha4mysql-manager-0.56.tar.gz [root@mha1 ~]# cd mha4mysql-manager-0.56 [root@mha1 mha4mysql-manager-0.56]# perl Makefile.PL [root@mha1 mha4mysql-manager-0.56]# make [root@mha1 mha4mysql-manager-0.56]# make install2)修改主配置文件
[root@mha1 ~]# mkdir /etc/mha # 拷貝配置文件到mha服務(wù)器,并修改,或改本地配置文件 [root@zzgrhel8 mha]# scp app1.cnf 192.168.1.15:/etc/mha/ [root@mha1 ~]# vim /etc/mha/app1.cnf [server default] manager_log=/var/log/manager.log # 日志文件 manager_workdir=/etc/mha # 工作目錄 master_ip_failover_script=/etc/mha/master_ip_failover # 故障切換腳本repl_user=repluser # 主服務(wù)器數(shù)據(jù)同步授權(quán)用戶 repl_password=NSD2021@tedu.cn # 密碼ssh_port=22 # ssh服務(wù)端口 ssh_user=root # 訪問ssh服務(wù)用戶user=mhamon # 監(jiān)控用戶 password=NSD2021@tedu.cn # 密碼[server1] # 第1臺數(shù)據(jù)庫服務(wù)器配置 candidate_master=1 hostname=192.168.1.11 port=3306[server2] # 第2臺數(shù)據(jù)庫服務(wù)器配置 candidate_master=1 hostname=192.168.1.12 port=3306[server3] # 第3臺數(shù)據(jù)庫服務(wù)器配置 candidate_master=1 hostname=192.168.1.13 port=33063)創(chuàng)建故障切換腳本
# 拷貝故障切換腳本文件到mha服務(wù)器,并修改
注:在/root/mha4mysql-manager-0.56該目錄下故障文件,與主配置文都有
[root@zzgrhel8 mha]# scp master_ip_failover 192.168.1.15:/etc/mha/ [root@mha1 ~]# vim +35 /etc/mha/master_ip_failover ... ... my $vip = '192.168.1.100/24'; # Virtual IP my $key = "1"; my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; ... ... [root@mha1 ~]# chmod +x /etc/mha/master_ip_failover- 在當前主服務(wù)器部署vip地址 [root@mysql1 ~]# ifconfig eth0:1 192.168.1.100/24 up [root@mysql1 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:22:3a:a0 brd ff:ff:ff:ff:ff:ffinet 192.168.1.11/24 brd 192.168.1.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.1.100/24 brd 192.168.1.255 scope global secondary eth0:1valid_lft forever preferred_lft foreverinet6 fe80::96a0:26f0:cac4:f130/64 scope link noprefixroutevalid_lft forever preferred_lft forever7. 配置數(shù)據(jù)節(jié)點
1) 在所有數(shù)據(jù)庫服務(wù)器上,安裝mha-node軟件包
[root@mysql{1,2,3} ~]# yum clean all [root@mysql{1,2,3} ~]# yum install -y mha4mysql-node-0.56-0.el62)在所有數(shù)據(jù)服務(wù)器上添加監(jiān)控用戶
[root@mysql1 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> grant all on *.* to mhamon@"%" identified by "NSD2021@tedu.cn"; mysql> show grants for mhamon; +---------------------------------------------+ | Grants for mhamon@% | +---------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'mhamon'@'%' | +---------------------------------------------+ 1 row in set (0.00 sec)# 在從服務(wù)器上查看同步過來的監(jiān)控用戶 [root@mysql2 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> show grants for mhamon; +---------------------------------------------+ | Grants for mhamon@% | +---------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'mhamon'@'%' | +---------------------------------------------+ 1 row in set (0.00 sec)[root@mysql3 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> show grants for mhamon; +---------------------------------------------+ | Grants for mhamon@% | +---------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'mhamon'@'%' | +---------------------------------------------+ 1 row in set (0.00 sec)8. 測試配置
#### 測試集群環(huán)境
- 在管理主機,測試ssh配置
[root@mha1 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf ... ... Thu Apr 15 20:15:39 2021 - [info] All SSH connection tests passed successfully.- 在管理主機,測試主從同步
[root@mha1 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf ... ... MySQL Replication Health is OK.- 啟動管理服務(wù)
[root@mha1 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover # 打開新終端查看服務(wù)狀態(tài) [root@mha1 ~]# masterha_check_status --conf=/etc/mha/app1.cnf app1 (pid:7199) is running(0:PING_OK), master:192.168.1.11# 查看工作目錄文件列表 [root@mha1 ~]# ls /etc/mha app1.cnf app1.master_status.health master_ip_failover ```9.訪問集群
- 在主服務(wù)器 添加訪問數(shù)據(jù)的連接用戶
[root@mysql1 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> create database db1 default charset utf8mb4; Query OK, 1 row affected (0.02 sec)mysql> grant select,insert on db1.* to dbuser1@"%" identified by 'NSD2021@tedu.cn'; Query OK, 0 rows affected, 1 warning (0.02 sec)mysql> create table db1.students(id int primary key auto_increment, name varchar(20)); Query OK, 0 rows affected (0.74 sec)- 客戶端192.168.1.10連接vip192.168.1.100地址訪問集群
[root@node10 ~]# mysql -h192.168.1.100 -udbuser1 -pNSD2021@tedu.cn mysql> insert into db1.students values(1, 'tom'); Query OK, 1 row affected (0.04 sec)mysql> select * from db1.students; +----+------+ | id | name | +----+------+ | 1 | tom | +----+------+ 1 row in set (0.00 sec)- 在兩臺從服務(wù)器查看數(shù)據(jù)
[root@mysql2 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> select * from db1.students; +----+------+ | id | name | +----+------+ | 1 | tom | +----+------+ 1 row in set (0.00 sec)[root@mysql3 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> select * from db1.students; +----+------+ | id | name | +----+------+ | 1 | tom | +----+------+ 1 row in set (0.00 sec)10.測試高可用
- 停止主服務(wù)器192.168.1.11的mysql服務(wù)
[root@mysql1 ~]# systemctl stop mysqld- 查看管理服務(wù) ,輸出的監(jiān)控信息
# 此時啟動管理服務(wù)的監(jiān)控主機終端已經(jīng)退出
- 客戶端依然連接vip192.168.1.100地址,可以訪問到數(shù)據(jù)。如果稍有卡頓,請耐心等待
[root@node10 ~]# mysql -h192.168.1.100 -udbuser1 -pNSD2021@tedu.cn mysql> select * from db1.students; +----+------+ | id | name | +----+------+ | 1 | tom | +----+------+ 1 row in set (0.00 sec)- 在工作的兩臺主機192.168.1.12和192.168.1.13上查看VIP地址。VIP地址將會轉(zhuǎn)移到某一臺主機上。
[root@mysql2 ~]# ip a s eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 52:54:00:cf:98:9a brd ff:ff:ff:ff:ff:ffinet 192.168.1.12/24 brd 192.168.1.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet 192.168.1.100/24 brd 192.168.1.255 scope global secondary eth0:1valid_lft forever preferred_lft foreverinet6 fe80::88e7:d3e5:dc70:7b30/64 scope link noprefixroutevalid_lft forever preferred_lft forever- 在新的主服務(wù)器上更新數(shù)據(jù)
[root@mysql2 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> insert into db1.students values(2, 'jerry'); Query OK, 1 row affected (0.08 sec)# 在從服務(wù)器上查看數(shù)據(jù)是否同步 [root@mysql3 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> select * from db1.students; +----+-------+ | id | name | +----+-------+ | 1 | tom | | 2 | jerry | +----+-------+ 2 rows in set (0.00 sec)11.修復故障服務(wù)器
- 啟動出現(xiàn)故障服務(wù)器的mysqld服務(wù)
? [root@mysql1 ~]# systemctl start mysqld- 同步現(xiàn)有數(shù)據(jù)到修復的服務(wù)器
[root@mysql2 ~]# mysqldump -uroot -pNSD2021@tedu.cn --master-data db1 > db1.sql [root@mysql2 ~]# scp db1.sql 192.168.1.11:/root/[root@mysql1 ~]# mysql -uroot -pNSD2021@tedu.cn db1 < db1.sql- 配置修復的服務(wù)器為當前主服務(wù)器的從服務(wù)器
[root@mysql1 ~]# grep master12 db1.sql CHANGE MASTER TO MASTER_LOG_FILE='master12.000002', MASTER_LOG_POS=964;[root@mysql1 ~]# mysql -uroot -pNSD2021@tedu.cn mysql> change master to-> master_host="192.168.1.12",-> master_user="repluser",-> master_password="NSD2021@tedu.cn",-> master_log_file="master12.000002",-> master_log_pos=964; Query OK, 0 rows affected, 2 warnings (0.42 sec)mysql> start slave; Query OK, 0 rows affected (0.03 sec)mysql> show slave status\G ... ...Slave_IO_Running: YesSlave_SQL_Running: Yes... ...- 配置管理服務(wù)器,將修復的服務(wù)器添加到服務(wù)器聲明中
[root@mha1 ~]# vim /etc/mha/app1.cnf # 尾部追加以下內(nèi)容 ... ... [server1] candidate_master=1 hostname=192.168.1.11 port=3306[點擊并拖拽以移動]# 測試集群環(huán)境 [root@mha1 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf ... ... Thu Apr 15 20:52:53 2021 - [info] All SSH connection tests passed successfully.# 測試主從同步 [root@mha1 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf ... ... MySQL Replication Health is OK.- 重啟管理服務(wù)
[root@mha1 ~]# masterha_stop --conf=/etc/mha/app1.cnf [root@mha1 ~]# masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover &[root@mha1 ~]# masterha_check_status --conf=/etc/mha/app1.cnf app1 (pid:7856) is running(0:PING_OK), master:192.168.1.12總結(jié)
以上是生活随笔為你收集整理的MHA管理所有数据库服务器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mysql分库分表(Mycat)
- 下一篇: linux cmake编译源码,linu