目錄
一、概述
一、概念
二、組成
三、特點
四、工作原理
二、案例
三、構建MHA
一、基礎環境
二、ssh免密登錄
三、主從復制
master
slave1
四、MHA安裝
一、環境
二、安裝node
三、安裝manager
一、概述
一、概念
????????MHA(MasterHigh Availability)是一套優秀的MySQL高可用環境下故障切換和主從復制的軟件。
????????MHA 的出現就是解決MySQL 單點的問題。
????????MySQL故障切換過程中,MHA能做到0-30秒內自動完成故障切換操作。
????????MHA能在故障切換的過程中最大程度上保證數據的一致性,以達到真正意義上的高可用。
二、組成
????????MHA manager????????????????管理節點
????????MHA node?????????????????????? 數據節點????????每個節點上都需要安裝
三、特點
????????自動故障切換過程中,MHA試圖從宕機的主服務器上保存二進制日志,最大程度的保證數據不丟失
????????使用半同步復制,可以大大降低數據丟失的風險,如果只有一個slave已經收到了最新的二進制日志,MHA可以將最新的二進制日志應用于其他所有的slave服務器上,因此可以保證所有節點的數據一致性
????????目前MHA支持一主多從架構,最少三臺服務,即一主兩從
四、工作原理
????????從宕機崩潰的master 保存二進制日志事件(binlog events);
????????識別含有最新的更新slave日志
????????應用差異的中繼日志(relay log)到其他的slave
????????應用從master保存的二進制日志事件
????????提升一個slave為新的master
????????使其他的slave連接新的master進行復制
二、案例
????????192.168.100.3??? manager(MHA)? ? ?? ???? mgt
????????192.168.100.4??? master?? ???????????????????????????? master
????????192.168.100.5??? slave?? ??????????????????????? ? ? ??? slave1
????????192.168.100.6??? slave?? ????????????????????? ? ? ???? slave2
三、構建MHA
一、基礎環境
??????? 關閉防火墻
??????? 設置selinux寬容模式
??????? 配置靜態IP
????????????????????192.168.100.3??? manager(MHA)? ? ?? ???? mgt
??????????????????? 192.168.100.4??? master?? ???????????????????????????? master
??????????????????? 192.168.100.5??? slave?? ??????????????????????? ? ? ??? slave1
??????????????????? 192.168.100.6??? slave?? ????????????????????? ? ? ???? slave2
??????? 修改主機名
??????????????????? 192.168.100.3????? ????????????????????????? ?? ???? mgt
??????????????????? 192.168.100.4???????????????????????????????? master
??????????????????? 192.168.100.5???? ??????????????????????? ? ? ??? slave1
??????????????????? 192.168.100.6???? ????????????????????? ? ? ???? slave2
二、ssh免密登錄
????????
????????192.168.100.3
?????????????????? ?ssh-keygen
?????????????????? ?for i in 4 5 6;do ssh-copy-id root@192.168.100.$i;done
????????? 192.168.100.4
?????????????????? ?ssh-keygen
?????????????????? ?for i in 3 5 6;do ssh-copy-id root@192.168.100.$i;done
???????? 192.168.100.5
?????????????????? ?ssh-keygen
?????????????????? ?for i in 4 3 6;do ssh-copy-id root@192.168.100.$i;done
???????? 192.168.100.6
?????????????????? ?ssh-keygen
?????????????????? ?for i in 4 5 3;do ssh-copy-id root@192.168.100.$i;done
???????? 所有節點配置hosts?
??????????????????? vim /etc/hosts
???????????????????? for i in 4 5 6 ;do scp/etc/hosts 192.168.100.$i:/etc;done
?????????????????? ?192.168.100.3?? ?mgt
?????????????????? ?192.168.100.4?? ?master
?????????????????? ?192.168.100.5?? ?slave1
?????????????????? ?192.168.100.6?? ?slave2
???????? 測試
?????????????????? ?for i in 3 4 5;do ssh 192.168.100.$i ;done??????? (在192.168.100.3測試?? )
???? ??????????????? for i in master slave1 slave2;do ssh $i ;done??
三、主從復制
master
????????vim? /etc/my.cnf
[mysqld]
server-id = 1
log-bin = master-bin
log-slave-updates = true
ystemctl restart mariadb
mysql -e "grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.5' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.6' identified by '123.com';"
mysql -e "show master status";
slave1
server-id=2
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index
mysql -e "grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.4' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.6' identified by '123.com';"
mysql -e "change master to master_host='192.168.100.4',master_user='myslave',master_password='123.com',master_log_file='master-bin.000003',master_log_pos=1007;"mysql -e “slave start”
slave2
server-id=3
log-bin=master-bin
relay-log=relay-log-bin
relay-log-index=relay-log-bin.index
??
mysql -e "grant replication slave on *.* to 'myslave'@'192.168.100.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.%' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.3' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.4' identified by '123.com';"
mysql -e "grant all privileges on *.* to 'mha'@'192.168.100.5' identified by '123.com';"
mysql -e "change master to master_host='192.168.100.4',master_user='myslave',master_password='123.com',master_log_file='master-bin.000003',master_log_pos=1007;"mysql -e “slave start”
四、MHA安裝
一、環境
????????所有節點安裝perl環境
yum install epel-release -y &&yum install epel-release -y(第二次是更新)
yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN
二、安裝node
????????所有節點安裝node(已經下載的源碼包)
tar xf mha4mysql-node-0.57.tar.gz
cd mha4mysql-node-0.57
perl Makefile.PL && make && make install
????????cd /usr/local/bin??????? (發現存在文件)
yum install epel-release -y && yum install epel-release -y && yum -y install perl-DBD-MySQL perl-ExtUtils-MakeMaker perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-CPAN&&tar xf mha4mysql-node-0.57.tar.gz && cd mha4mysql-node-0.57 && perl Makefile.PL && make && make install && cd /usr/local/bin && ls
三、安裝manager
tar xf mha4mysql-manager-0.57.tar.gz
cd /root/mha4mysql-manager-0.57
perl Makefile.PL && make && make install
cp sample/scripts/master_ip_failover /usr/local/bin/
cp sample/scripts/master_ip_online_change?? ? /usr/local/bin/cd /usr/local/bin?
vim??? master_ip_failover??
????????腳本說明(master_ip_failover)
?????????? ?master_ip_failover?? ?自動切換時 VIP 管理的腳本
?????????? ?master_ip_online_change?? ?在線切換時 vip 的管理
?????????? ?power_manager?? ?故障發生后關閉主機的腳本
?????????? ?send_report?? ?因故障切換后發送報警的腳本
配置文件建立
?????????? ?mkdir /etc/masterha
?????????? ?vim /etc/masterha/app1.cnf
????????mkdir /var/log/masterha/app1
測試MHA
?? masterha_check_ssh --conf=/etc/masterha/app1.cnf
?? ?masterha_check_repl --conf=/etc/masterha/app1.cnf
啟動
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
?此時master不顯示vip——ip
停止master后? slave1 會出現vip-ip
查看slave1狀態
?slave2
?實現MySQL高可用MHA