目錄
部署mysql高可用集羣MHA(Master High Availability)
2、配置所有數據節點主機之間可以互相以ssh密鑰對方式認證登陸 配置manager56主機 無密碼ssh登錄 所有數據節點主機
5、授權監控用戶root,方便管理主機監控狀態及做相關操作(51)----51上操作,通過主從同步,其它從庫也會做同樣的授權
6-3、把VIP地址手動部署在當前主庫192.168.4.51 上
部署mysql高可用集羣MHA(Master High Availability)
1、準備實驗拓撲:
拓撲結構
master51
|
|
______________________________________________________
| | | | |
slave52 slave53 slave54 slave55 mgm56
Manager
公共配置:
在所有主機上安裝軟件軟件包(將mha-soft-student.zip解壓)
[root@db108 share]# ls perl-*.rpm
perl-Config-Tiny-2.14-7.el7.noarch.rpm
perl-Mail-Sender-0.8.23-1.el7.noarch.rpm
perl-MIME-Types-1.38-2.el7.noarch.rpm
perl-Email-Date-Format-1.002-15.el7.noarch.rpm
perl-Mail-Sendmail-0.79-21.el7.art.noarch.rpm
perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm
perl-Log-Dispatch-2.41-1.el7.1.noarch.rpm
perl-MIME-Lite-3.030-1.el7.noarch.rpm
[root@db108 share]# yum -y install perl-*.rpm
2、配置所有數據節點主機之間可以互相以ssh密鑰對方式認證登陸
配置manager56主機 無密碼ssh登錄 所有數據節點主機
ssh-keygen ssh-copy-id ip地址
3、配置主從同步,要求如下:
51 主庫 開半同步複製
52 從庫(備用主庫) 開半同步複製
53 從庫(備用主庫) 開半同步複製
54 從庫 不做備用主庫所以不用開半同步複製
55 從庫 不做備用主庫所以不用開半同步複製
3-1、master51配置:
vim /etc/my.cnf
[mysqld]
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---啓動從庫的半同步模塊
server_id=51
log-bin=master51----開啓binlog日誌
binlog-format="mixed"
:wq
[root@db107 ~]# systemctl restart mysqld
[root@db107 ~]# ls /var/lib/mysql/master51.*
/var/lib/mysql/master51.000001 /var/lib/mysql/master51.index
[root@db107 ~]# mysql -uroot -p123456
mysql> grant replication slave on *.* to repluser@"%" identified by "123456";---授權可以做爲主庫從庫的用戶名密碼及主機
Query OK, 0 rows affected, 1 warning (10.04 sec)
mysql> set global relay_log_purge=off;----不刪除中繼日誌
Query OK, 0 rows affected (0.15 sec)
mysql> show master status;----查看正在使用的日誌信息
+-----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| master51.000001 | 441 | | | |
+-----------------+----------+--------------+------------------+-------------------+
mysql> quit;
3.2、備用master52的配置
vim /etc/my.cnf
[mysqld]
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
server_id=52
log-bin=master52
binlog-format="mixed"
]# systemctl restart mysqld
[root@db108 ~]# ls /var/lib/mysql/master52.*
/var/lib/mysql/master52.000001 /var/lib/mysql/master52.index
[root@db108 ~]# mysql -uroot -p123456
mysql> set global relay_log_purge=off;
Query OK, 0 rows affected (0.13 sec)
mysql> change master to
-> master_host="192.168.4.51",
-> master_user="repluser",
-> master_password="123456",
-> master_log_file="master51.000001",
-> master_log_pos=441;----指定主庫信息,以成爲主庫的從庫
Query OK, 0 rows affected, 2 warnings (0.04 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
[root@db108 ~]# mysql -uroot -p123456 -e "show slave status\G" | grep -i YES
mysql: [Warning] Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[root@db108 ~]#
3.3、備用master53的配置
]# vim /etc/my.cnf
[mysqld]
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
server_id=53
log-bin=master53
binlog-format="mixed"
:wq
[root@db109 ~]# systemctl restart mysqld
[root@db109 ~]# ls /var/lib/mysql/master53.*
/var/lib/mysql/master53.000001 /var/lib/mysql/master53.index
[root@db109 ~]#
[root@db109 ~]# mysql -uroot -p123456
mysql> set global relay_log_purge=off;
Query OK, 0 rows affected (0.14 sec)
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123456",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.05 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql>
[root@db109 ~]# mysql -uroot -p123456 -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[root@db109 ~]#
3.4、配置從服務器54
[root@db111 ~]# vim /etc/my.cnf
[mysqld]
server_id=54
:wq
[root@db111 ~]# systemctl restart mysqld
[root@db111 ~]# mysql -uroot -p123456
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123456",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.09 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
[root@db111 ~]#
[root@db111 ~]# mysql -uroot -p123456 -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[root@db111 ~]#
3.5、配置從服務器55
[root@db111 ~]# vim /etc/my.cnf
[mysqld]
server_id=55
:wq
[root@db111 ~]# systemctl restart mysqld
[root@db111 ~]# mysql -uroot -p123456
mysql> change master to master_host="192.168.4.51",master_user="repluser",master_password="123456",master_log_file="master51.000001",master_log_pos=441;
Query OK, 0 rows affected, 2 warnings (0.09 sec)
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
mysql> quit;
Bye
[root@db111 ~]#
[root@db111 ~]# mysql -uroot -p123456 -e "show slave status\G" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
[root@db111 ~]#
3.6、在客戶端測試主從同步配置
3.7 在主庫51上添加訪問數據的授權用戶
[root@db107 ~]# mysql -uroot -p123456
mysql> grant all on gamedb.* to admin@"%" identified by "123456";
3.8 在客戶端主機連接主庫51 建庫表記錄
mysql> create database gamedb;
Query OK, 1 row affected (0.01 sec)
mysql> create table gamedb.t1 (id int);
Query OK, 0 rows affected (0.04 sec)
mysql> insert into gamedb.t1 values(999);
Query OK, 1 row affected (0.15 sec)
mysql> insert into gamedb.t1 values(999);
Query OK, 1 row affected (0.05 sec)
mysql> select * from gamedb.t1;
2 rows in set (0.00 sec)
mysql>
3.9 在客戶端使用授權用戶連接從庫52-55,也能看到同樣的庫表及記錄
[root@host114 ~]# mysql -h從庫IP地址 -uadmin -p123456
mysql> select * from gamedb.t1;
4、配置集羣
4-1、配置數據庫服務器(51-55)
安裝yum -y install perl-DBD-mysql--------安裝依賴包
yum -y install /root/mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm---安裝節點包
4-2、配置管理服務器(56)
安裝yum -y install perl-DBD-mysql--------安裝依賴包
yum -y install /root/mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm---安裝節點包
ho
yum -y install perl-ExtUtils-* perl-CPAN-*----安裝依賴包
cd /mha-soft-student/mha4mysql-manager-0.56/----進入源碼包安裝管理節點的包
make-----編譯
make install----將編譯好的程序複製到默認路徑下
cp -r bin /root----將bin下的管理命令放到linux尋找命令的環境變量$PATH下
echo $PATH---查看環境變量
mkdir /etc/mha_manager----創建工作目錄
cp conf/app1.cnf /etc/mha_manager----將主配置文件放在工作目錄下
vim /etc/mha_manager/app1.cnf
----------------------------------------------------------------------------------------------------------------------------------------
[server default]
manager_workdir=/etc/mha_manager-----工作目錄
manager_log=/etc/mha_manager/manager.log-----日誌文件目錄
master_ip_failover_script=/etc/mha_manager/master_ip_failover-----自動failover腳本的目錄位置
ssh_user=root---管理主機遠程主從庫時的用戶名
ssh_port=22----訪問遠程的端口
repl_user=repluser----主庫授權從庫的用戶名
repl_password=123456----主庫授權從庫的密碼
user=root------管理主機爲了監控主從庫的狀態及在其上面做相關操作時登陸主從數據庫的用戶名
password=123456----管理主機爲了監控主從庫的狀態及在其上面做相關操作時登陸主從數據庫的密碼
[server1]
hostname=192.168.4.51-----當前主庫ip地址
candidate_master=1--------------設置爲候選主庫
[server2]
hostname=192.168.4.52
candidate_master=1--------------設置爲候選主庫
[server3]
hostname=192.168.4.53
candidate_master=1--------------設置爲候選主庫
[server4]
hostname=192.168.4.54
no_master=1--------------------不競選master
[server5]
hostname=192.168.4.55
no_master=1--------------------不競選master
-------------------------------------------------------------------------------------------------------------------------------------------
cp /mha-soft-student/master_ip_failover /etc/mha_manager/----將failover腳本放到工作目錄下
vim /etc/mha_manager/master_ip_failover-------------設定vip IP地址
my $vip = '192.168.4.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";
5、授權監控用戶root,方便管理主機監控狀態及做相關操作(51)----51上操作,通過主從同步,其它從庫也會做同樣的授權
51]mysql>
grant all on *.* to root@'%' identified by "123qqq...A";
select user,host from mysql.user where user="root";
56]# mysql -h192.168.4.51 -uroot -p123qqq...A-----管理主機測試登陸
6、測試配置文件配置
6-1、測試ssh登陸
]#masterha_check_ssh --conf=/etc/mha_manager/app1.cnf
Tue Jul 24 14:17:39 2018 - [info] All SSH connection tests passed successfully.
6-2、測試主從同步配置
]#masterha_check_repl --conf=/etc/mha_manager/app1.cnf
MySQL Replication Health is OK.
6-3、把VIP地址手動部署在當前主庫192.168.4.51 上
51]#/sbin/ifconfig eth0:1 192.168.4.100/24
]#/sbin/ifconfig eth0:1
]#/sbin/ifconfig eth0
休息到 15:30
6-4、啓動管理服務
tty1 56]# masterha_manager --conf=/etc/mha_manager/app1.cnf
--remove_dead_master_conf-------從/etc/mha_manager/app1.cnf中移除宕機主庫maste信息
--ignore_last_failover-----忽略xxx.health文件,即連續有主庫宕機,也允許高可用機制繼續運行
tty2 56]# masterha_check_status --conf=/etc/mha_manager/app1.cnf----查看當前誰上位爲主庫
7、測試集羣配置
客戶端連接vip地址 存儲數據
50: mysql -h192.168.4.100 -uadmin -p123456
mysql> select * from db8.t1;
mysql> select @@hostname;
測試高可用
把當前主庫51 的數據庫服務停止,但客戶端訪問數據庫連接不會斷,查看主機名顯示的是52主機的主機名;在52本機查看VIP地址也能夠查看到。
主庫51的配置在管理主機56的app1.cnf文件裏查看不到了。
所有從庫服務器都會把 主庫的Ip地址自動指向192.168.4.52
目錄
部署mysql高可用集羣MHA(Master High Availability) 1、準備實驗拓撲:
2、配置所有數據節點主機之間可以互相以ssh密鑰對方式認證登陸 配置manager56主機 無密碼ssh登錄 所有數據節點主機
5、授權監控用戶root,方便管理主機監控狀態及做相關操作(51)----51上操作,通過主從同步,其它從庫也會做同樣的授權
6-3、把VIP地址手動部署在當前主庫192.168.4.51 上
8、把壞掉的主機51 添加到集羣裏
51:把自己配置爲當前主庫的從庫
]# systemctl start mysqld
mysql> change master to
-> master_host="192.168.4.52",
-> master_user="repluser",
-> master_password="123qqq...A",
-> master_log_file="master52.000001",master_log_pos=1791;
mysql> start slave;
56: 把主機51的信息添加到主配置文件app1.cnf ,並啓動管理服務
]# vim /etc/mha_manager/app1.cnf
[server1]----因爲之前被移除了
candidate_master=1
hostname=192.168.4.51
:wq
tty1 ]#masterha_manager --conf=/etc/mha_manager/app1.cnf
--remove_dead_master_conf --ignore_last_failover
tty2 56]# masterha_check_status --conf=/etc/mha_manager/app1.cnf