MHA集羣架構

部署mysql集羣,使用MHA軟件+mysql主從同步 實現

一.什麼時集羣?   多臺服務器提供相同的服務(網站,數據庫)

二 集羣分類?  LB (負載均衡)    HA(高可用)  HPC(專業領域)

三 爲什麼使用集羣

四  配置集羣?  安裝軟件提供服務實現(LVS,haproxy,nginx,keepalived)

部署MYSQL高可用集羣

5.1 MHA集羣   :  自動切換故障

   組成   :管理節點,  數據節點

 5.1  MHA集羣環境準備

    主機51-56   :   yum  -y install  perl-*

           cd  mha-soft-student/

          yum  -y install  perl-*

   主機 51-55: 

 cd  mha-soft-student/

yum  -y install  mha4mysql-node-0.56-0.el6.noarch.rpm 

主機56

:[root@host56 mha-soft-student]# yum  -y install  mha4mysql-node-0.56-0.el6.noarch.rpm 

[root@host56 mha-soft-student]# tar  -zxvf mha4mysql-manager-0.56.tar.gz 
[root@host56 mha-soft-student]# cd mha4mysql-manager-0.56/
[root@host56 mha4mysql-manager-0.56]# perl Makefile.PL 

*** Module::AutoInstall version 1.03
*** Checking for Perl dependencies...
[Core Features]
- DBI                   ...loaded. (1.627)
- DBD::mysql            ...loaded. (4.023)
- Time::HiRes           ...loaded. (1.9725)
- Config::Tiny          ...loaded. (2.14)
- Log::Dispatch         ...loaded. (2.41)
- Parallel::ForkManager ...loaded. (1.18)
- MHA::NodeConst        ...loaded. (0.56)
*** Module::AutoInstall configuration finished.
Checking if your kit is complete...

[root@host56 mha4mysql-manager-0.56]# make && make install
[root@host56 mha4mysql-manager-0.56]# masterha_TAB鍵
 

56可以無密碼  ssh  51-55

ssh [email protected]
   42  ssh [email protected]
   43  ssh [email protected]
   44  ssh [email protected]
   45  ssh [email protected]
 

51-55主機可以彼此互相無密碼ssh

 

二 配置MHA集羣

     2.1  配置mysql 主從同步 (一主一從)

           2.1.1,配置主服務器51

[root@host51 ~]#  vim  /etc/my.cnf
[mysqld]

secure_file_priv=/mybak
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
relay_log_purge=off

[root@host51 ~]# systemctl  restart mysqld
 

mysql> grant replication slave on *.* to plj@"%" identified by "123qqq...A";
mysql>  set global relay_log_purge=off;
 

           2.1.2 配置從服務器52 (備用主庫)

[root@host52~]#  vim  /etc/my.cnf
[mysqld]

secure_file_priv=/mybak
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
relay_log_purge=off

[root@host52 ~]# systemctl  restart mysqld

[root@host52 mha-soft-student]# mysql -uroot -p123456

mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;

mysql> start slave;
mysql>  show slave status\G;

   2.1.2 配置從服務器53 (備用主庫)   

 vim  /etc/my.cnf

     [mysqld]
validate_password_length=6  
validate_password_policy=0
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
relay_log_purge=off 

[root@host53~]# systemctl  restart mysqld

mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.11 sec)

mysql> start slave;
mysql> show  slave status\G;

           

             2.1.2 配置從服務器54(純從庫)    

[root@host54 mha-soft-student]# vim  /etc/my.cnf
server_id=54
plugin-load ="rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off

mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.11 sec)

mysql> start slave;
mysql> show  slave status\G;

     

             2.1.2 配置從服務器55(純從庫)  

 [root@host54 mha-soft-student]# vim  /etc/my.cnf
server_id=55
plugin-load ="rpl_semi_sync_slave=semisync_slave.so"
rpl-semi-sync-slave-enabled = 1
relay_log_purge=off

mysql> change master to master_host="192.168.4.51",master_user="plj",master_password="123qqq...A",master_log_file="master51.000001",master_log_pos=436;
Query OK, 0 rows affected, 2 warnings (0.11 sec)

mysql> start slave;
mysql> show  slave status\G;

    2.2  配置管理主機1(192.168.4.56)

[root@host56 ~]#  mkdir /etc/mha_manager           #創建指定的目錄
[root@host56 ~]#  cd mha-soft-student/
[root@host56 ~]# ls

[root@host56 mha-soft-student]# cd mha4mysql-manager-0.56/

[root@host56 mha4mysql-manager-0.56]#  cp samples/conf/app1.cnf  /etc/mha_manager/    #拷貝配置文件
[root@host56 mha4mysql-manager-0.56]#  vim  /etc/mha_manager/app1.cnf                        
 

            2.2.1編寫配置文件

   [root@host56 mha4mysql-manager-0.56]#  vim  /etc/mha_manager/app1.cnf     

    [server default]            #    服務的默認配置   
                                    

ma nager_workdir=/etc/mha_manager
manager_log=/etc/mha_manager/manager.log
master_ip_failover_script=/etc/mha_manager/master_ip_failover             #自動failover 切換的腳本  ,利用perl語言

ssh_user=root
ssh_port=22                        #連接所有主機的用戶和端口號

repl_user=plj                        #連接主從服務器的用戶
repl_password=123qqq...A         

user=root                                # 操作數據庫的用戶
password=123456
 

[server1]                               # 指定服務器
hostname=192.168.4.51               
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


[server5]
hostname=192.168.4.55
no_master=1
       

 

    2.2.2 創建故障切換腳本

[root@host56 ~]# cd mha-soft-student/
[root@host56 mha-soft-student]# cp  master_ip_failover  /etc/mha_manager/
[root@host56 mha-soft-student]# vim +35 /etc/mha_manager/master_ip_failover 

my $vip = '192.168.4.100/24';  # Virtual IP   修改vip地址

[root@host56 mha-soft-student]# chmod  +x /etc/mha_manager/master_ip_failover 

              2.2.3把vip 地址部署在當前的主庫上(192.168.4.51)

[root@host51 ~]# ifconfig  eth0:1 192.168.4.100/24       #在主機51上配置vip
[root@host51 ~]#  ifconfig eth0:1
eth0:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.4.100  netmask 255.255.255.0  broadcast 192.168.4.255
        ether 52:54:00:2c:d4:60  txqueuelen 1000  (Ethernet)
 

  2.2.4 用戶授權(根據配置文件)

                          2.2.4.1  給從服務器同步數據的連接用戶(51/52/53)

    52mysql> grant replication slave on *.* to plj@"%"
                   identified by  "123qqq...A";            
   53mysql> grant replication slave on *.* to plj@"%"
                   identified by  "123qqq...A";

                         2.2. 4.2 管理主機56監控數據庫服務器狀態的連接用戶root(51-55)

   51mysql> grant all  on *.* to   root@'%'  
                    identified  by  "123qqq...A";     

52mysql> grant all  on *.* to   root@'%'  
                    identified  by  "123qqq...A";

53mysql> grant all  on *.* to   root@'%'  
                    identified  by  "123qqq...A";

54mysql> grant all  on *.* to   root@'%'  
                    identified  by  "123qqq...A";

55mysql> grant all  on *.* to   root@'%'  
                    identified  by  "123qqq...A";

三 測試配置(192.168.4.56)

3.1 測試ssh無密碼登陸

[root@host56 mha-soft-student]# masterha_check_ssh --conf=/etc/mha_manager/app1.cnf    #檢查56是不是都可以無密碼登陸                                                                                                                                                         (51-55)
Wed May 15 17:57:50 2019 - [info] All SSH connection tests passed successfully.
 

3.2 測試mysql主從同步

[root@host56 mha-soft-student]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf  # 檢查51-55之間的主從是否ok

Weokd May 15 17:58:38 2019 - [info] Dead Servers:
Wed May 15 17:58:38 2019 - [info] Alive Servers:
Wed May 15 17:58:38 2019 - [info]   192.168.4.51(192.168.4.51:3306)
Wed May 15 17:58:38 2019 - [info]   192.168.4.52(192.168.4.52:3306)
Wed May 15 17:58:38 2019 - [info]   192.168.4.53(192.168.4.53:3306)
Wed May 15 17:58:38 2019 - [info]   192.168.4.54(192.168.4.54:3306)
Wed May 15 17:58:38 2019 - [info]   192.168.4.55(192.168.4.55:3306)

MySQL Replication Health is OK.
 

3.3 啓動管理服務

    查看

    [root@host56 mha-soft-student]# masterha_check_status --conf=/etc/mha_manager/app1.cnf
   app1 is stopped(2:NOT_RUNNING).

 

[root@host56 ~]# masterha_manager  --conf=/etc/mha_manager/app1.cnf --remove_dead_master_conf --ignore_last_failover
 

  3.4 測試mysql服務高可用

     3.4.1  在主庫51上添加訪問數據的連接用戶

mysql> create database db9;
            mysql> create table db9.t1 (id int);
            mysql> grant select ,insert on db9.* to 
                yaya99@"%" identified by "123qqq...A";
 

 3.4.2    在客戶端50連接vip地址訪問數據庫服務

50]# mysql  -h192.168.4.100 -uyaya99  -p123qqq...A
            mysql> insert into  db9.t1 values(100),(200),(300);
            mysql> select  * from  db9.t1;
            在51的所有從服務器上都可以看到同樣的數據
  

3.4.3  停止主庫51的數據庫的服務,50主機依然可以訪問到數據

 

[root@host51 ~]# systemctl  stop mysqld.service 
 

如何把壞掉的51和52 服務機器再添加到集羣裏?

 2.1  啓動51 和52 主機的數據庫服務

 2.2 把51 和52主機配置爲的當前主服務器的從服務器

2.3  把主機51 和52 添加app1.cnf 文件裏

]#vim /etc/mha_manager/app1.cnf
                        [server1]
                        candidate_master=1
                        hostname=192.168.4.51

                        [server2]
                        candidate_master=1
                        hostname=192.168.4.52
                    :wq    
    

2.4在主機56上運行管理服務,並查看服務狀態

]# masterha_check_repl --conf=/etc/mha_manager/app1.cnf
                ]# masterha_manager --conf=/etc/mha_manager/app1.cnf
 

     測試ssh 登陸

     測試主從服務

 

 

 

 

 

 

            

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章