數據庫_MHA羣集搭建

 MHA概念介紹,羣集搭建與測試node

, MHA介紹

1.概念:MHA master high availability,由日本DeNA公司開發,解決mysql故障切換能夠作到0-30,並且在故障切換過程當中,能最大限度保障數據的一致性,實現真正的高可用.mysql

2.組成:管理節點(MHA manager),管理全部數據庫服務器,能夠部署於一臺獨立的主機,也能夠與某臺數據庫服務器共用一臺主機;數據節點(MHA node),運行在每臺存儲數據的服務器上.sql

3.原理:manager探測集羣中的master節點; master故障時,manager自動將擁有最新數據的從庫提高爲新的master.數據庫

,搭建MHA羣集

1.拓撲圖vim

2.部署環境服務器

- 準備3臺數據庫服務器4.51,4.52,4.53,配置爲一主多從結構(4.51爲主庫,4.524.53爲從庫),而且相互之間能夠用root無密碼登陸.app

-實現無密碼登陸的方式:(3臺服務器上都須要重複4.51的動做)ssh

 例,在主機4.51上操做:#ssh-keygen -f /root/.ssh_rsa -N ‘’   //生成祕鑰
ide

                      #for i in 51 52 53   //拷貝祕鑰到其它主機測試

                      do

                          ssh-copy-id root@192.168.4.$i

                      done

- 準備2臺虛擬機:主機4.57作管理節點manager,主機4.50作客戶端client.

- 在主機4.50,4.51,4.52,4.53,4.57上安裝系統自帶的軟件perl-*

- 管理節點4.57能夠用root用戶無密碼登陸3臺數據庫服務器4.51,4.52,4.53.

- 全部主機安裝共享的perl軟件包(從真機上scp文件夾mha-soft-student->cd進入文件夾->yum安裝perl-* )

- rpm -qa|grep perl|wc -l //查看安裝的perl軟件包數量是否爲382

3.安裝管理節點的軟件

#cd mha-soft-student/  進入文件夾

cd mha-soft-student]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm //安裝鏈接服務器節點的軟件

# tar -xvf mha4mysql-manager-0.56.tar.gz      //解壓管理軟件包

# cd mha4mysql-manager-0.56                //進入文件夾

mha4mysql-manager-0.56]# perl Makefile.PL  //指定目標文件,檢查安裝環境

mha4mysql-manager-0.56]# make           //編譯源碼

mha4mysql-manager-0.56]# make install    //編譯並安裝

#ls /root/perl5/bin/masterha_*              //查看安裝的管理集羣的命令

4.編寫主配置文件app1.cnf

# mkdir /etc/mha  //建立新目錄,以存儲配置文件(不在系統默認配置文件的目錄下操做)

#cd mha-soft-student   //進入文件夾

mha-soft-student]# cp mha4mysql-manager-0.56/samples/conf/app1.cnf  /etc/mha/                     //將系統配置文件拷貝到新建目錄/etc/mha

mha-soft-student]# vim /etc/mha/app1.cnf  //編輯配置文件

[server default]               //管理服務器的默認配置

manager_workdir=/etc/mha         //工做目錄

manager_log=/etc/mha/manager.log        //工做日誌

master_ip_failover_script=/etc/mha/master_ip_failover   //故障切換腳本

ssh_user=root               //訪問ssh服務的用戶

ssh_port=22                 //ssh服務端口

repl_user=repluser           //主庫同步到從庫的受權用戶

repl_password=123qqq...A   //主庫同步到從庫的受權密碼

user=root                    //manager登陸數據庫服務器使用的用戶

password=123qqq...A        //manager登陸數據庫服務器使用的密碼

[server1]                   //指定第1臺數據庫服務器

hostname=192.168.4.51   //數據庫服務器IP地址

port=3306                 //服務端口

candidate_master=1       //競選主機,當主庫故障時,其它的從庫參入新主庫的競選

[server2]                  //指定第2臺數據庫服務器

hostname=192.168.4.52  //數據庫服務器IP地址

port=3306                //服務端口

candidate_master=1

[server3]                  //指定第3臺數據庫服務器

hostname=192.168.4.53  //數據庫服務器IP地址

port=3306                //服務端口

candidate_master=1      //競選主機,當主庫故障時,其它的從庫參入新主庫的競選

5.在管理節點4.57上建立故障切換腳本master_ip_failover

#cp mha-soft-student/master_ip_failover  /etc/mha/

#vim /etc/mha/master_ip_failover  

my $vip = '192.168.4.100/24';  #定義VIP 

my $key = "1";   //定義地址編號

my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip";   //綁定VIP地址

my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down";  //釋放VIP地址   

# chmod +x /etc/mha/master_ip_failover   //賦予權限 ,這一步很重要,漏掉會致使集羣起不來.

6.在主庫4.51上部署vip

# ifconfig eth0:1 192.168.4.100    //設置VIP

# ifconfig eth0:1     //查看VIP,誰是主庫,誰就擁有VIP

client ~]# ping -c2 192.168.4.100  //客戶端ping一下鏈接狀態

7.在從庫4.52,4.53上配置數據節點

[root@db51 mha-soft-student]# for i in 51 52 53  //安裝鏈接節點的軟件

 > do

>ssh 192.168.4.$i "yum -y install /root/mha-soft-student/mha4mysql-node-0.56-0.el6.noarch.rpm"

> done

mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";  //在從庫4.52,4.53上受權用戶repluser及密碼

mysql> grant all on *.* to root@"%" identified by "123qqq...A"; //3臺數據庫4.57上受權管理節點監控數據庫時使用的鏈接用戶及密碼

8.主庫加載master,slave模塊

[mysqld]

log-bin=db51    //啓用log-bin日誌

server_id=51

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"  //加載模塊

rpl_semi_sync_master_enabled=1  //啓用master模塊

rpl_semi_sync_slave_enabled=1    //啓用slave模塊

relay_log_purge=0     //禁止軟件自動刪除中繼日誌文件

#systemctl restart mysqld   //重啓,加載配置

9.從庫4.52加載master,slave模塊

[mysqld]

server_id=52

log-bin=master52    //啓用log-bin日誌

relay_log_purge=0   //禁止軟件自動刪除中繼日誌文件

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"   //加載模塊

rpl_semi_sync_master_enabled=1    //啓用master模塊

rpl_semi_sync_slave_enabled=1     //啓用slave模塊

#systemctl restart mysqld    //重啓,加載配置

10.從庫4.53加載master,slave模塊

[mysqld]

server_id=53

log_bin=master53    //啓用log-bin日誌

relay_log_purge=0   //禁止軟件自動刪除中繼日誌文件

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"   //加載模塊

rpl_semi_sync_master_enabled=1   //啓用master模塊

rpl_semi_sync_slave_enabled=1    //啓用slave模塊

#systemctl restart mysqld

11.測試一下數據庫主從是否同步

mysql-uroot -p123qqq...A -e ‘insert into db1.t1 values(6,」wangwu」,30)’ //在主庫4.51上插入數據

[root@db51 ~]# for i in 52 53   //查看從庫是否同步數據

> do

> ssh root@192.168.4.$i 'mysql -uroot -p123qqq...A -e "select * from db1.t1"'

> done

,測試MHA羣集

1.在管理節點上測試ssh配置

[root@db57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

Thu Jun 20 15:30:08 2019 - [info] All SSH connection tests passed successfully.

2.在管理節點上測試主從同步

[root@db57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

MySQL Replication Health is OK

3.啓動masterha_manager服務

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

--remove_dead_master_conf //主庫故障時,刪除管理節點配置文件中的server主機

--ignore_last_failover //軟件默認故障發生時,有一個切換時間.加載該選項能夠實現時間點無縫切換.

4.在主庫4.51添加訪問數據的鏈接用戶及密碼,並同步到4.524.53

mysql> create database db9;

mysql> create table db9.a(id int,name char(10));

mysql> grant select,insert on db9.* to yaya55@"%" identified by '123qqq...A';

# mysql -uroot -p123qqq...A -e 'select host,user from mysql.user where user="yaya55";'  //分別在4.524.53查看受權的用戶yaya55

5.客戶端登陸插入數據

[root@client ~]# mysql -h192.168.4.100 -uroot -p123qqq...A

mysql> insert into db9.a values(1,"lisi");

mysql> insert into db9.a values(2,"wangwu");

mysql> select * from db9.a;

+------+--------+

| id   | name   |

+------+--------+

|    1 | lisi   |

|    2 | wangwu |

+------+--------+

2 rows in set (0.00 sec)

# mysql -uroot -p123qqq...A -e ‘select * from db9.a’ //分別在4.524.53上查看插入的數據

6.測試高可用

思路:中止4.51mysql服務->管理節點4.57會監控到master4.51發生故障,並中止監控服務,觸發故障腳本master_ip_failover2臺從庫中競選出新的master主機,數據庫服務不會中止->客戶端鏈接到vip,依然能夠訪問數據庫,作讀寫操做.

6.1中止主庫4.51mysql服務

[root@db51 ~]# systemctl stop mysqld

6.2客戶端再次登陸vip

[root@client ~]# mysql -h192.168.4.100 -uroot -p123qqq...A

6.3插入數據,並查看

mysql> insert into db9.a values(3,"jack");

mysql> select * from db9.a;  //在主機4.524.53上查看插入的數據

6.4 配置文件/etc /mha/aqq1.cnf中的[server1]容器被刪除,即主機4.51被踢出了服務序列,具體見下圖:

7.將down機的4.51從新添加入集羣服務序列

7.1啓動數據庫4.51

#systemctl start mysqld

7.24.51配置爲當前集羣的從服務器

7.2.1把新主庫4.52的數據備份,並在4.51上恢復,以確保與主服務器數據保持一致.

[root@db52 ~]# mysqldump -uroot -p123qqq...A --master-data db9 > db9.sql //主庫備份數據

[root@db52 ~]# scp db9.sql root@192.168.4.51:/root/  //上傳數據給4.51

[root@db51 ~]# mysql -uroot -p123qqq...A db9 < /root/db9.sql  //在主機4.51上恢復數據

7.2.2定義從庫信息,啓動slave進程,查看狀態

mysql> change master to

  ->master_host="192.168.4.52",master_user="repluser",master_password="123qqq...A",

-> master_log_file="master52.000002",master_log_pos=154;

//定義從庫信息

mysql> start slave;  

[root@db51 ~]# mysql -uroot -p123qqq...A -e "show slave status\G"|head -13

//查看已經定義的從庫信息

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.52

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master52.000002

          Read_Master_Log_Pos: 154

               Relay_Log_File: db51-relay-bin.000002

                Relay_Log_Pos: 319

        Relay_Master_Log_File: master52.000002

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

7.3 將主機4.51添加到集羣配置文件中

7.3.1中止管理節點4.57的監控服務

[root@db57 ~]# masterha_stop --conf=/etc/mha/app1.cnf

7.3.2添加主機4.51server到集羣配置文件/etc/mha/app1.cnf

[server1]

candidate_master=1

hostname=192.168.4.51

port=3306

7.3.3管理節點作啓動前的sshrepl檢測

[root@db57 ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf

[info] All SSH connection tests passed successfully.

[root@db57 ~]# masterha_check_repl --conf=/etc/mha/app1.cnf

MySQL Replication Health is OK.

7.3.4啓動管理節點,監控數據庫服務器

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

[root@db57 ~]# masterha_check_status --conf=/etc/mha/app1.cnf

app1 (pid:1991) is running(0:PING_OK), master:192.168.4.52

,總結

必須配置實現ssh無密碼登陸(數據庫服務器之間,管理節點與數據庫服務器之間)

必須配置主從同步結構

必須設置VIP地址

down機的服務器須要人爲配置爲集羣從服務器,才能從新添加到集羣服務序列.

down機的服務器不能自動同步down機期間的數據(缺點)

在主從同步結構中,沒有從服務器時,不能實現故障切換.

 結束.

相關文章
相關標籤/搜索