1. 程式人生 > >MySQL-高可用MHA+Atlas讀寫分離

MySQL-高可用MHA+Atlas讀寫分離

逗哥 mysql 主從 mha atals讀寫分離

公司最近為新的MySQL架構進行調整,要求給出方案,我這邊提出使用MHA+Atlas做高可用集群讀寫分離架構,就多方討論最終確認方案,進行實施;

一、簡單說下MHA的工作原理

技術分享

1個管理節點可以管理多套mysql架構,可以不裝在mysql主機上

通過管理節點,來對其它數據節點上的mysql做監控,會每隔幾秒做心跳檢測

二、MHA的簡單架構圖

技術分享

三、部署MHA

1,環境準備(依賴包、軟件包、創建存放目錄等)所有節點進行

#安裝依賴包
[[email protected] ~]#yum install perl-DBD-MySQL -y
#進入安裝包存放目錄
[[email protected] ~]#cd /home/oldboy/tools/
#上傳mha安裝包
[[email protected]
/* */]# rz -be mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-manager-0.56.tar.gz mha4mysql-node-0.56-0.el6.noarch.rpm mha4mysql-node-0.56.tar.gz #安裝node包 [[email protected] tools]# rpm -ivhmha4mysql-node-0.56-0.el6.noarch.rpm Preparing... ########################################### [100%] 1:mha4mysql-node ###########################################[100%] #登錄數據庫 [[email protected]
/* */]# mysql -uroot -poldboy123 #添加mha管理賬號 mysql> grant allprivileges on *.* to [email protected]%‘ identified by ‘mha‘; #查看是否添加成功 mysql> selectuser,host from mysql.user; #主庫上創建,從庫會自動復制(在從庫上查看)

2,命令軟連接 所有節點進行

[[email protected] ~]# ln -s /application/mysql/bin/mysqlbinlog/usr/bin/mysqlbinlog
[[email protected] ~]# ln -s /application/mysql/bin/mysql/usr/bin/mysql
#如果不創建命令軟連接,檢測mha復制情況的時候會報錯

3,部署管理節點(mha-manager)

1) 在mysql-db03上部署管理節點

#使用epel源
[[email protected] ~]#
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#安裝manager依賴包
[[email protected] ~]# yum install -y perl-Config-Tinyepel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
#安裝manager包
[[email protected] tools]# rpm -ivhmha4mysql-manager-0.56-0.el6.noarch.rpm 
Preparing...              ###########################################[100%]
1:mha4mysql-manager      ########################################### [100%]

2) 編輯配置文件

#創建配置文件目錄
[[email protected] ~]# mkdir -p /etc/mha
#創建日誌目錄
[[email protected] ~]# mkdir -p /var/log/mha/app1
#編輯mha配置文件
[[email protected] ~]# vim /etc/mha/app1.cnf
[server default]
candidate_master=1
check_repl_delay=0
manager_log=/var/log/mha/app1/manager
manager_workdir=/var/log/mha/app1
master_binlog_dir=/application/mysql/data
master_ip_failover_script=/usr/local/bin/master_ip_failover
password=mha
ping_interval=2
repl_password=oldboy123
repl_user=rep
ssh_user=root
user=mha

[server1]
hostname=10.0.0.51
port=3306

[server2]
hostname=10.0.0.52
port=3306

[server3]
hostname=10.0.0.53
port=3306

3) 建立ssh-key免秘鑰登錄 所有節點進行

#創建秘鑰對
[[email protected] ~]# ssh-keygen -t dsa -P ‘‘ -f ~/.ssh/id_dsa>/dev/null 2>&1
#發送公鑰,包括自己
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]
[[email protected] ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub [email protected]

4) 啟動測試 db03

#測試ssh
[[email protected] ~]# masterha_check_ssh --conf=/etc/mha/app1.cnf
#看到如下字樣,則測試成功
Tue Mar  7 01:03:33 2017 -[info] All SSH connection tests passed successfully.
#測試復制
[[email protected] ~]# masterha_check_repl --conf=/etc/mha/app1.cnf
#看到如下字樣,則測試成功
MySQL Replication Health is OK.

5) 啟動MHA db03

[[email protected] ~]# nohup masterha_manager--conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null > /var/log/mha/app1/manager.log 2>&1 &

6) 切換master測試

登錄數據庫db02

[[email protected] ~]# mysql -uroot -poldboy123
#檢查復制情況
mysql> show slave status\G
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.0.51
                 Master_User: rep
                 Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: mysql-bin.000006
         Read_Master_Log_Pos: 191
              Relay_Log_File: mysql-db02-relay-bin.000002
               Relay_Log_Pos: 361
       Relay_Master_Log_File: mysql-bin.000006
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

#登錄數據庫(db03)

[[email protected] ~]# mysql -uroot -poldboy123
#檢查復制情況
mysql> show slave status\G
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.0.0.51
                 Master_User: rep
                  Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: mysql-bin.000006
         Read_Master_Log_Pos: 191
               Relay_Log_File: mysql-db03-relay-bin.000002
               Relay_Log_Pos: 361
        Relay_Master_Log_File:mysql-bin.000006
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

#停掉主庫

[[email protected] ~]# /etc/init.d/mysqld stop
Shutting down MySQL..... SUCCESS!
#登錄數據庫(db02)
[[email protected] ~]# mysql -uroot -poldboy123
#查看slave狀態
mysql> show slave status\G
#db02的slave已經為空
Empty set (0.00 sec)
#登錄數據庫(db03)
[[email protected] ~]# mysql -uroot -poldboy123
#查看slave狀態
mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State:Waiting for master to send event
                  Master_Host: 10.0.0.52
                 Master_User: rep
                 Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos:191
              Relay_Log_File: mysql-db03-relay-bin.000002
               Relay_Log_Pos: 361
       Relay_Master_Log_File: mysql-bin.000006
            Slave_IO_Running: Yes
           Slave_SQL_Running: Yes

本文出自 “逗哥筆記” 博客,請務必保留此出處http://qiuyt.blog.51cto.com/1229789/1930629

MySQL-高可用MHA+Atlas讀寫分離