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;
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
3、在接收端的3臺機器的/root/.ssh目錄下找到key檔案,改名為authorized_keys
4、在其他3臺機器重複步驟1-3,如果有已經存在的authorized_keys,將key檔案下的密碼拷貝到authorized_keys中。保證每臺機器的authorized_keys都存在其他3臺機器的公鑰。
5、在每臺機器測試ssh其他任意機器是否成功
[
四、安裝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、在db1(192.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.12升為master,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