MySQL高可用部署MHA
阿新 • • 發佈:2018-06-16
運行 code relay rontab form inter 二進制 for 簡單記錄 MHA簡介
- MHA 由兩部分組成: MHA Manager(管理節點)和 MHA Node(數據節點)。 MHA Manager可以單獨部署在一臺獨立的機器上管理多個 master-slave 集群,也可以部署在一臺 slave 節點上。
- MHA Node 運行在每臺 MySQL 服務器上, MHA Manager 會定時探測集群中的 master節點,當 master 出現故障時,它可以自動將最新數據的 slave 提升為新的 master,然後將所有其他的 slave 重新指向新的 master。整個故障轉移過程對應用程序完全透明。
環境準備
服務器(安裝MHA):172.20.29.201 主服務器:172.20.29.202 從服務器A:172.20.29.203 從服務器B:172.20.29.204
1. 同步時間
#定義計劃任務
crontab -e
*/5 * * * * /usr/sbin/ntpdate 172.20.0.1 &> /dev/null #每5分鐘自動同步時間至服務器
2. 關閉防火墻,SELINUX
iptables -vnL #查看防火墻狀態
systemctl stop firewall #關閉防火墻
getenforce #查看SELinux狀態
setenforce 0 #關閉SElinux
3. 配置SSH公鑰(基於key驗證)
ssh-keygen -t rsa -P ‘‘ -f "/root/.ssh/id_rsa" #生成私鑰
ssh-copy-id 172.20.29.201 #復制公鑰至本機
#四臺主機共用一把鑰匙
scp -pr /root/.ssh 172.20.29.202:/root/
scp -pr /root/.ssh 172.20.29.203:/root/
scp -pr /root/.ssh 172.20.29.204:/root/
4. 所有服務器上安裝MHA-node包
yum install mha4mysql-node-0.56-0.el6.noarch
mysql5.5
MHA服務器配置
#MHA服務器上安裝MHA包(註意安裝依賴epel源) yum install mha4mysql-manager-0.56-0.el6.noarch #創建並修改MHA配置文件 mkdir /etc/mha/ -p vim /etc/mha/app1.cnf [server default] user=MHAuser #連接每一臺數據庫的用戶 password=centos #連接每一臺數據庫的密碼 manager_workdir=/data/mastermha/app1/ manager_log=/data/mastermha/app1/manager.log remote_workdir=/data/mastermha/app1/ master_binlog_dir=/data/binlogs/ #指定管理的二進制文件目錄 ssh_user=root #使用什麽賬號來連接每臺主機 repl_user=MHAuser #ssh協議連接的用戶 repl_password=centos #ssh協議連接的密碼 ping_interval=1 #多長時間去探測每個節點 [server1] hostname=172.20.29.202 #主服務器地址 candidate_master=1 #設置為主服務器 [server2] hostname=172.20.29.203 #從服務器地址 candidate_master=1 #設置主服務器宕機立刻升級為主服務器 [server3] hostname=172.20.29.204 #從服務器地址 #檢查每一臺主機ssh協議是否生效 masterha_check_ssh --conf=/etc/mha/app1.cnf #檢查每一臺主機復制是否正常 masterha_check_repl --conf=/etc/mha/app1.cnf #開啟MHA集群(註意此處前臺執行,長期前臺執行,建議在主機上運行) masterha_manager --conf=/etc/mha/app1.cnf
主服務器配置.
#創建文件夾用於存放二進制日誌文件(註意文件夾權限)
mkdir /data/binlogs
chown mysql.mysql /data/binlogs/
chmod 770 /data/binlogs/
#修改mysql配置文件
vim /etc/my.cnf
server_id= 11 #主服務器ID標識
log_bin=/data/binlogs/master-bin #配置文件裏指定二進制日誌文件存放目錄
binlog_format=row #以行模式復制數據
skip_name_resolve=1 #做名字解析
rpl_semi_sync_master_enabled=ON #開啟半同步插件
#授權從服務器登錄本機數據庫
grant replication slave,replication client on *.* to ‘jian‘@‘172.20.29.%‘ identified by ‘centos‘;
#授權所有權限給MHA管理所有服務器
grant all on *.* to MHAuser@‘172.20.29.%‘ identified by ‘centos‘;
#刷新系統權限列表
flush privileges;
從服務器A配置
#創建文件夾用於存放二進制日誌文件(註意文件夾權限)
mkdir /data/binlogs
chown mysql.mysql /data/binlogs/
chmod 770 /data/binlogs/
#修改mysql配置文件
vim /etc/my.cnf
server-id = 12 #從服務器ID標識
log-bin=/data/binlogs/master-bin #配置文件裏指定二進制日誌文件存放目錄
read_only=on #配置從服務器只讀
relay_log_purge=0 #中繼日誌不清除
skip_name_resolve=1 #做名字解析
rpl_semi_sync_slave_enabled=ON; #開啟半同步插件
#從庫建立與主庫的連接
change master to
MASTER_HOST=‘172.20.29.202‘,
MASTER_USER =‘jian‘,
MASTER_PASSWORD =‘centos‘,
MASTER_LOG_FILE =‘master-bin.000001‘,
MASTER_LOG_POS =245;
start slave; #開啟IO線程
show slave status\G #查看IO線程
Slave_IO_Running: Yes #這兩項全部為yes,成功;否則失敗.
Slave_SQL_Running: Yes
從服務器B配置
#創建文件夾用於存放二進制日誌文件(註意文件夾權限)
mkdir /data/binlogs
chown mysql.mysql /data/binlogs/
chmod 770 /data/binlogs/
#修改mysql配置文件
vim /etc/my.cnf
server-id = 13 #從服務器ID標識
log-bin=/data/binlogs/master-bin #配置文件裏指定二進制日誌文件存放目錄
read_only=on #配置從服務器只讀
relay_log_purge=0 #中繼日誌不清除
skip_name_resolve=1 #做名字解析
#建立連接之前建議清理線程緩存
stop slave;
reset slave;
#從庫建立與主庫的連接
change master to
MASTER_HOST=‘172.20.29.202‘,
MASTER_USER =‘jian‘,
MASTER_PASSWORD =‘centos‘,
MASTER_LOG_FILE =‘master-bin.000001‘,
MASTER_LOG_POS =245;
start slave; #開啟IO線程
show slave status\G #查看IO線程
Slave_IO_Running: Yes #這兩項全部為yes,成功;否則失敗.
Slave_SQL_Running: Yes
測試
- 假設主服務器宕機
-
MHA程序將自動將從服務器A切換為主服務器,並停下MHA程序
- 後續啟用集群管理
- 備註:本文只簡單記錄了mha的環境部署過程.
MySQL高可用部署MHA