需要先將防火牆都關閉
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服務