1. 程式人生 > >MySQL簡單MHA環境搭建

MySQL簡單MHA環境搭建

MySQL-MHA是日本MySQL專家用Perl寫的一套MySQL故障切換方案,它有Node、Manager兩種角色。Node需要安裝在所有MySQL伺服器不管主還是從,Manager執行在獨立伺服器。

環境:centos6.5
硬體:四臺虛擬機器,如下
manager:192.168.1.10
db1 (主)  :192.168.1.11
db2 (備)  :192.168.1.12
db3 (從)  :192.168.1.13
其中Manager是管理節點,db1是主庫,db2是Master備節點,db3是從庫。


一、安裝MySQL
     步驟省略

二、搭建主從複製
1、配置my.cnf檔案
     db1主庫:     server-id = 1     log-bin=mysql-bin   
     db2備庫:     server-id = 2     log-bin=mysql-bin     relay_log = mysql-relay-bin
     db3從庫:     server-id = 3     log-bin=mysql-bin     relay_log = mysql-relay-bin

2、配置主從    
(1) 在3臺庫上配置mha使用者
mysql> grant all privileges on *.* to 'mha_manager'@'%' identified by '123456';

(2) 配置複製使用者
   db1主庫、db2備庫(db2也要授權,因為這個是備用master):
mysql> grant replication slave on *.* to 'repl'@'%' identified by '123456';
mysql> flush privileges;
    檢視db1主庫狀態,並記錄下pos,在從庫配置中會用到
mysql> show master status\G;

    db2備庫、db3從庫:
mysql> CHANGE MASTER TO
          -> MASTER_HOST='192.168.1.10',
          -> MASTER_USER='repl',
          -> MASTER_PASSWORD='123456',
          -> MASTER_LOG_FILE='mysql-bin.000010',
          -> MASTER_LOG_POS=528;
    檢視從庫狀態
mysql> show slave status\G;
    啟動複製
mysql> start slave;

三、ssh-keygen實現四臺主機之間相互免金鑰登入
1、在db1執行ssh-keygen
shell> ssh-keygen -t rsa -b 2048

2、將公鑰id_rsa.pub傳送到其他3臺機器
[
[email protected]
]# scp id_rsa.pub [email protected]:/root/.ssh/key
[[email protected]]# scp id_rsa.pub [email protected]:/root/.ssh/key
[[email protected]]# scp id_rsa.pub [email protected]:/root/.ssh/key

3、在接收端的3臺機器的/root/.ssh目錄下找到key檔案,改名為authorized_keys

4、在其他3臺機器重複步驟1-3,如果有已經存在的authorized_keys,將key檔案下的密碼拷貝到authorized_keys中。保證每臺機器的authorized_keys都存在其他3臺機器的公鑰。

5、在每臺機器測試ssh其他任意機器是否成功
[
[email protected]
]# ssh IP


四、安裝MHA

1、Node角色:db1主、db2備、db3從
      yum install perl-DBD-MySQL
      這裡可能遇到依賴問題,比如yum源是mysq5.1 lib,但是安裝的是mysql5.6,就算解除安裝了mysq5.1 lib還是報錯,方法是安裝MySQL-shared-compat就可以了。
      yum install mha4mysql-node-0.56-0.el6.noarch.rpm

2、Manager角色:manager管理節點
# yum install perl cpan
# yum install perl-Config-Tiny
# yum install perl-Time-HiRes
# yum install -y rrdtool perl-rrdtool rrdtool-devel perl-Params-Validate

wget http://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/perl-Log-Dispatch-2.26-1.el6.rf.noarch.rpm
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/perl-Parallel-ForkManager-0.7.5-2.2.el6.rf.noarch.rpm
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/perl-Mail-Sender-0.8.16-1.el6.rf.noarch.rpm
wget ftp://rpmfind.net/linux/dag/redhat/el6/en/x86_64/dag/RPMS/perl-Mail-Sendmail-0.79-1.2.el6.rf.noarch.rpm

rpm -ivh perl-Mail-Sender-0.8.16-1.el6.rf.noarch.rpm
rpm -ivh perl-Mail-Sendmail-0.79-1.2.el6.rf.noarch.rpm
yum localinstall perl-Log-Dispatch-2.26-1.el6.rf.noarch.rpm
yum localinstall perl-Parallel-ForkManager-0.7.5-2.2.el6.rf.noarch.rpm
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm

3、建立mha資料夾和配置檔案
shell> mkdir /etc/masterha
shell> vim /etc/masterha/app1.cnf
[server default]
manager_log=/var/log/mha/app1/manager.log
manager_workdir=/var/log/mha/app1
#master_binlog_dir路徑是master下的binlog檔案地址
master_binlog_dir=/usr/local/mysql/data
remote_workdir=/var/log/mha/app1
user=mha_manager
password=123456
repl_user=repl
repl_password=123456
ssh_user=root
ping_interval=1

[server1]
hostname=192.168.1.11
#可以升為master
candidate_master=1

[server2]
hostname=192.168.1.12
#可以升為master
candidate_master=1
#預設情況下如果一個slave落後master 100M的relay logs的話,MHA將不會選擇該slave作為一個新的master,因為對於這個slave的恢復需要花費很長時間,通過設定check_repl_delay=0,MHA觸發切換在選擇一個新的master的時候將會忽略複製延時,
check_repl_delay=0

[server3]
hostname=192.168.1.13
#不設定為master
no_master=1

4、驗證ssh信任登入是否成功
shell> masterha_check_ssh --conf=/etc/masterha/app1.cnf
Tue Aug 25 15:40:11 2015 - [debug]   ok.
Tue Aug 25 15:40:11 2015 - [info] All SSH connection tests passed successfully.

5、驗證mysql複製是否成功
shell> masterha_check_repl --conf=/usr/local/mha/mha.conf
Wed Aug 26 17:40:19 2015 - [info] Checking replication health on 192.168.1.12..
Wed Aug 26 17:40:19 2015 - [info]  ok.
Wed Aug 26 17:40:19 2015 - [info] Checking replication health on 192.168.1.13.
Wed Aug 26 17:40:19 2015 - [info]  ok.
Wed Aug 26 17:40:19 2015 - [warning] master_ip_failover_script is not defined.
Wed Aug 26 17:40:19 2015 - [warning] shutdown_script is not defined.
Wed Aug 26 17:40:19 2015 - [info] Got exit code 0 (Not master dead).

MySQL Replication Health is OK.

※如果這裡碰到問題,在所有node節點下檢視路徑是否正確
[[email protected]]# which apply_diff_relay_logs
然後在每個node節點執行下面的命令,做個軟連線  
[[email protected]]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog
[[email protected]]# ln -s /usr/local/mysql/bin/mysql /usr/local/bin/mysql


6、啟動mha管理節點
[[email protected]]# nohup masterha_manager --conf=/usr/local/mha/mha.conf > /tmp/mha_manager.log  < /dev/null 2>&1


7、檢視mha狀態
[[email protected]]# masterha_check_status --conf=/usr/local/mha/mha.conf
[[email protected]]# app1 (pid:26683) is running(0:PING_OK), master:192.168.1.11
     結果說明MHA執行正常,正在監控master是否正常工作
也可以在app1的配置檔案對manager_log引數設定的路徑中找到manager.log檔案,檢視狀態
Mon Aug 31 10:39:21 2015 - [info] Slaves settings check done.
Mon Aug 31 10:39:21 2015 - [info]
192.168.1.11(192.168.1.11:3306) (current master)
 +--192.168.1.12(192.168.1.12:3306)
 +--192.168.1.13(192.168.1.13:3306)


、測試MHA1、db1192.168.1.11上停止mysqld服務
[[email protected]]# server mysqld stop

2、manager.log,檢視狀態
......
----- Failover Report -----

app1: MySQL Master failover 192.168.1.11(192.168.1.11:3306) to 192.168.1.12(192.168.1.12:3306) succeeded

Master 192.168.1.11(192.168.1.11:3306) is down!

Check MHA Manager logs at localhost.mhaMaster:/var/log/mha/app1/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 192.168.1.12(192.168.1.12:3306) has all relay logs for recovery.
Selected 192.168.1.12(192.168.1.12:3306) as a new master.
192.168.1.12(192.168.1.12:3306): OK: Applying all logs succeeded.
192.168.1.13(192.168.1.13:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.1.13(192.168.1.13:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.1.12(192.168.1.12:3306)
192.168.1.12(192.168.1.12:3306): Resetting slave info succeeded.
Master failover to 192.168.1.12(192.168.1.12:3306) completed successfully.

     log檔案說明192.168.1.11已經關閉,192.168.1.12master,192.168.1.13是192.168.1.12的從庫,故障轉移正常結束。

※如果在最後出現Lastfailover was done一類的問題,刪除掉app1.failover.complete,測試3臺機器資料一致性,然後從步驟1開始測試

3、在192.168.1.12插入資料192.168.1.13也同時顯示資料測試完畢。

注意:當主DB故障,切換到另外的伺服器上後,主DB恢復了,如果想繼續作為主,得重新部署;如果只是加入到叢集,那麼可以作為備庫,使用change master加入到叢集。 而且當發生一次切換後,管理節點的監控程序就會自動退出,需要手動啟動或者用指令碼來自動啟動。另外還得刪除app1.failover.complete這個檔案,否則新的主DB出現問題MHA就不會切換了。
MySQL資料庫主從複製在預設情況下從庫的relay logs會在SQL執行緒執行完畢後被自動刪除,但是對於MHA場景下,對於某些滯後從庫的恢復依賴於其他從庫的relay log,因此採取禁用自動刪除功能以及定期清理的辦法。對於清理過多過大的relay log需要注意引起的複製延遲資源開銷等。MHA可通過purge_relay_logs指令碼及配合cronjob來完成此項任務。


相關推薦

MySQL簡單MHA環境搭建

MySQL-MHA是日本MySQL專家用Perl寫的一套MySQL故障切換方案,它有Node、Manager兩種角色。Node需要安裝在所有MySQL伺服器不管主還是從,Manager執行在獨立伺服器。 環境:centos6.5 硬體:四臺虛擬機器,如下 manager:1

MySQL InnoDB Cluster環境搭建簡單測試

InnoDB Cluster初印象 記得MySQL Group Replicatioin 剛開始的時候,MySQL界很是轟動,等待了多年,終於有了官方的這個高可用解決方案。你要說還有一些方案補充,比如MySQL Cluster,MySQL Proxy,這些的使用率個人感覺還是不高,也就是經受的考驗還

php+mysql+nginx+phpmyadmin環境搭建

nts home sem 鏈接 ipv4 1.5 不出 英文 由於 英文原文:http://blog.frd.mn/install-nginx-php-fpm-mysql-and-phpmyadmin-on-os-x-mavericks-using-homebrew/ 參照

docker+mysql+zabix-server環境搭建

str reg mirrors RR yun 保存 ble cte roo 本次使用docker搭建zabbix的組合是mysql+docker+zabix-server,使用zabbix容器連接mysql容器,mysql容器的數據庫文件保存在物理主機/opt/mysql_

MySQL主從、環境搭建、主從配制

mysql name roo user mysqld 主庫 狀態 ima slave 1、 MySQL主從介紹 2、環境搭建 2、主從配制:修改主配制文件:vim /etc/my.cnf添加: server_id = ### log_bin = diy_name

NFS簡單應用場景及簡單環境搭建

技術 共享 創建 oss -o mage utils ces 防火 一丶基礎環境搭建:關閉防火墻,配置yum源,掛載,更改主機名。(服務端和客戶端都要做)二丶服務端安裝NFS服務,並啟動服務,查看狀態和端口號(我將用戶名不小心寫成了客戶端的意思,請大家註意)三丶服務端創建共

ubuntu系統的mysql+hadoop+hive環境搭建

1.在ubuntu系統上安裝mysql資料庫 sudo apt-get install mysql-server 安裝過程中會提示兩次輸入密碼,己住自己設定的密碼,一直下一步。 檢查是否安裝成功:mysql -u 使用者名稱 -p 密碼 顯示資料庫後 show databases; 出現數

Spring日記_02之 json、javaBean、.do、MySql、MyBatis 環境搭建結束

JSON Json是JavaScript直接量語法   無參構造方法直接 Alt + \ 就可以提示新增 Project – Clean 瀏覽器向伺服器傳送請求,伺服器中的Spring中的SpringMVC將Json字串傳送到客戶端瀏覽器,瀏覽器的jquery解析JSON字串成為J

MYSQL安裝及環境搭建

安裝資料庫與配置使用環境 *** 1.程式碼介面 傻瓜式安裝 記住密碼 2.綠色解壓版 1. 5.7以後的版本需要先初始化 mysqld --initialize-insecure 2.啟動需要先進入安裝目錄 比較麻煩 需要新增到環境變數

Mysql + canal + zookeeper環境搭建

Mysql + canal + zookeeper環境搭建 一、mysql叢集搭建 1. mysql基本環境 作業系統: Linux version 2.6.32-431.el6.x86_64 資料庫:MySQL Community Server 5.7.20 主節點IP:10.60.81.157

IIS、MySQL、Redis環境搭建

IIS 安裝:(1)開啟“控制面板”-“程式”-“開啟或關閉Windows功能”,如下圖,勾選“Internet服務”,點選“確定”              (2)安裝相應的.net framework 版本,自己機器上安裝的是.net framework4.6.2  

mysql主從結構環境搭建

首先要有兩個裝有mysql的節點系統 然後將一臺定為主節點,一臺定位從節點 在主節點中,將/usr/share/mysql/my-medium.cnf /etc/my.cnf 並vi /etc/my.cnf將server_id改為1 從節點做法一樣,但要將serv

史上最簡單lamp環境搭建

lamp,即linux、Apache、mysql、php 環境:centos 7.4 mysql官網下載安裝mysql-server wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarc

mysql主備環境搭建

#主機配置: service mysqld stop #配置my.cnf: vim /etc/my.cnf log-bin=mysql-bin-master #啟用二進位制日誌 server-id = 1 #本機資料庫ID 標示 binlog-do-db=sdg

CentOS 7 yum nginx MySQL PHP 簡易環境搭建

[[email protected]192 yum.repos.d]# yum list nginx 已載入外掛:fastestmirror nginx

VS2010 + Cmake + Qt4.8 簡單環境搭建例項。

很多人都用的Qt Creator進行開發, creator 確實很方便, 但除錯起來,還是沒有vs快捷。  cmake 實用於較為大型的專案的開始, 而且與vs組合, 更是功能強大, 加上比creator方便的除錯優勢,還是很不錯的一個選擇。  由於近一兩年接觸的幾個專

PHP 簡單環境搭建

windows + nginx + mysql + php https://code.google.com/p/wnmp-server/ php手冊 http://www.phpchina.com/download/handbook/openbiz_manual/php-

Spring security oauth2最簡單入門環境搭建--二、乾貨

轉載自:http://wwwcomy.iteye.com/blog/2230265 友情提示 學習曲線:spring+spring mvc+spring security+Oauth2基本姿勢,如果前面都沒看過請及時關閉本網頁。我有信心我的這個blog應該是迄今為止使用

kubernetes實戰之consul簡單測試環境搭建及填坑

這一節內容有點長,我們將介紹如何基於docker搭建一client一server的consul測試環境,以及如何搭建多server consul測試叢集.在基於docker搭建多server的consul叢集時出碰到了一些坑,這對我們是很有益的提醒,很多時候我們不能僅僅滿足於最小化的環境搭建及簡單使用,而是

MYSQL雙機主從環境搭建(流程簡單

MYSQL資料庫沒有增量備份的機制,當資料量太大的時候備份是一個很大的問題。還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的資料同時寫到備份資料庫中,實現mysql資料庫的熱備份。要想實現雙機的熱備首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都要高於3.2