1. 程式人生 > >MySQL高可用部署MHA

MySQL高可用部署MHA

運行 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