Mha-Mysql(例)

需要先將防火牆都關閉

service iptables stop
setenforce 0
準備3臺虛擬機並且裝好mysql,並在本機做好映射
echo “192.168.40.133 Mysql-Master” >> /etc/hosts
echo “192.168.40.132 Mysql-Slave” >> /etc/hosts
echo “192.168.40.134 Mysql-SlaveA” >> /etc/hosts
在這裏插入圖片描述

工作流程

1.從宕機崩潰的Master保存二進制日誌事件(binlog events)
2.識別含有最新更新的slave
3.應用差異的中繼日誌(relay log ) 到其他的slave
4.應用從master保存的二進制日誌事件(binlog events)
5.提升一個slave爲新的master
6.使其他的slave連接新的master進行復制


複製之苦binlog日誌出來
找出relaylog日誌最全的從庫
將最全的relaylog日誌在所有從庫中同步(第一次數據同步)
將之前最全的從庫提升爲主庫
將複製出來的binlog日誌放到新提升的主庫裏
其他所有從庫重新指向新提升的主庫,繼續主從複製

MHA架構

在這裏插入圖片描述

MHA工具介紹

在這裏插入圖片描述

/etc/init.d/mysqld start (開啓mysql)
並且設置mysql的賬戶和密碼

配置基於GTID的主從複製

條件:

主庫和從庫都要開啓binlog
主庫和從庫server-id不同
要有主從複製用戶並且要賬戶一致

主庫操作

在這裏插入圖片描述

登陸mysql並創建主從複製賬號

在這裏插入圖片描述

從庫操作

修改配置文件從1
在這裏插入圖片描述修改配置文件從2
在這裏插入圖片描述

特別提示:
<1>在以往如果是基於binlog日誌的主從複製,則必須要記住主庫的master狀態信息。
<2>但是在MySQL5.6版本里多了一個Gtid的功能,可以自動記錄主從複製位置點的信息,並在日誌中輸出出來。

開啓GTID

在這裏插入圖片描述

編輯mysql配置文件(主庫從庫都需要修改)

在這裏插入圖片描述修改之後重啓mysql

主從的server_id後面的數值是不能一樣的

修改之後在mysql數據庫中查看GTID

在這裏插入圖片描述主庫從庫都必須要開啓GTID,否則在做主從複製的時候就會報錯.

配置主從複製

登陸在從庫mysql,並輸入:

change master to master_host='192.168.40.128',master_user='rep',master_password='123456',master_auto_position=1;

start slave;               開啓主從同步功能

show slave status\G;

在這裏插入圖片描述

GTID的新特性

在這裏插入圖片描述

禁止主庫刪除relay_log日誌的方法

#臨時禁用主庫自動刪除relay log功能
mysql> set global relay_log_purge = 0;
Query OK, 0 rows affected (0.00 sec)

#設置只讀
mysql> set global read_only=1;
Query OK, 0 rows affected (0.00 sec)

在這裏插入圖片描述

加上之後要重啓mysql

部署MHA

環境準備(所有節點mysql-01,mysql-02,mysql-03)

#光盤安裝依賴包
[root@mysql-db01 ~]# yum -y install perl-DBD-MySQL

#安裝mha4mysql-node-0.56-0.el6.noarch.rpm
[root@mysql-db01 rpm]# rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm 
Preparing...                ########################################### [100%]
   1:mha4mysql-node         ########################################### [100%]

[root@mysql-db01 ~]# mysql -uroot -p123123

mysql> grant all privileges on *.* to mha@'192.168.0.%' identified by '123123';
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host from mysql.user where user='mha';
+------+-------------+
| user | host        |
+------+-------------+
| mha  | 192.168.0.% |          #主庫上創建從庫會自動複製
+------+-------------+
1 row in set (0.00 sec)

#特別提示:3臺MySQL都需要安裝mha4mysql-node-0.56-0.el6.noarch.rpm
## 部署管理節點(mha-manager)
#使用阿里雲源+epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo

#安裝manager依賴包(需要公網源)
[root@mysql-db03 ~]# yum -y install perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes

#安裝manager包
[root@mysql-db03 rpm]# rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm 
Preparing...                ########################################### [100%]
   1:mha4mysql-manager      ########################################### [100%]
 ### 編輯配置文件
 #創建配置文件目錄
[root@mysql-db03 ~]# mkdir -p /etc/mha

#創建日誌目錄
[root@mysql-db03 ~]# mkdir -p /var/log/mha/mha1

#創建配置文件(默認沒有)
[root@mysql-db03 ~]# cd /etc/mha/
[root@mysql-db03 mha]# ls
[root@mysql-db03 mha]# vim /etc/mha/mha1.cnf
[root@mysql-db03 mha]# cat /etc/mha/mha1.cnf
[server default]
manager_log=/var/log/mha/mha1/manager               #manager管理日誌存放路徑
manager_workdir=/var/log/mha/mha1                   #manager管理日誌的目錄路徑
master_binlog_dir=/usr/local/mysql/data             #binlog日誌的存放路徑
user=mha                                            #管理賬戶
password=123123                                     #管理賬戶密碼
ping_interval=2                                     #存活檢查的間隔時間
repl_user=rep                                       #主從複製的授權賬戶
repl_password=123123                                #主從複製的授權賬戶密碼
ssh_user=root                                       #用於ssh連接的賬戶

[server1]
hostname=192.168.0.51                               
port=3306                                           

[server2]
#candidate_master=1                                 #此條暫時註釋掉(後面解釋)
#check_repl_delay=0                                 #此條暫時註釋掉(後面解釋)
hostname=192.168.0.52
port=3306

[server3]
hostname=192.168.0.53
port=3306

#**特別提示:**
#以上配置文件內容裏每行的最後不要留有空格,因此,不能複製的




### 配置ssh信任
#創建密鑰對
[root@mysql-db03 ~]# ssh-keygen -t dsa -P "" -f ~/.ssh/id_dsa >/dev/null 2>&1

#發送mysql-db03公鑰,包括自己
[root@mysql-03 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[root@mysql-03 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[root@mysql-03 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]

#發送mysql-db02公鑰,包括自己
[root@mysql-02 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[root@mysql-02 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[root@mysql-02 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]

#發送mysql-db01公鑰,包括自己
[root@mysql-01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[root@mysql-01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[root@mysql-01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]

### 啓動測試

![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20181203185115755.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2h1aWdxaW5nMzAx,size_16,color_FFFFFF,t_70)

### 啓動MHA
#啓動
[root@mysql-03 ~]# nohup masterha_manager --conf=/etc/mha/mha1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/mha1/manager.log 2>&1 &
[root@mysql-03 ~]# ps -ef | grep perl | grep -v grep
root       4961   4690  0 06:33 pts/2    00:00:00 perl /usr/bin/masterha_manager --conf=/etc/mha/mha1.cnf --remove_dead_master_conf --ignore_last_failover

#說明:
nohup:啓動命令
--conf:指定配置文件位置
--remove_dead_master_conf:如果有master down了,就去掉配置文件裏該master的部分

進行mha自動切換master的測試

在這裏插入圖片描述
(1)登陸mysql-02(192.168.40.140)查看信息狀態
停掉mysql-db01(192.168.0.51)上的MySQL服務在這裏插入圖片描述<2>停掉mysql-db01(192.168.40.128)上的MySQL服務
在這裏插入圖片描述在這裏插入圖片描述

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