在Centos7玩轉Mysql半同步和keepalived+MHA(二)

來源:互聯網
上載者:User

標籤:mysql mha keepalived

在上一篇完成了Mysql的半同步配置。

連結:在Centos7玩轉Mysql半同步和keepalived+MHA(一),本篇則繼續完成MHA+keepalived的配置。

角色 IP OS MySQL MHA
mha-manager 192.168.1.92 CentOS 7 mha-manager mha-node
mysql-master 192.168.1.151 CentOS 7 mysql-master mha-node
mysql-slave01 192.168.1.152 CentOS 7 mysql-slave mha-node
mysql-slave02 192.168.1.153 CentOS 7 mysql-slave mha-node

在所有的伺服器上面安裝mha-node。

安裝依賴

yum install perl-DBD-MySQL perl-Module-Install cpan perl-DBI -y

從git上面拉取mha-node安裝包


mkdir /root/softcd /root/softgit clone https://github.com/kevin-hao/mha-node.gitcd mha-node/perl Makefile.PLmake && make install

再強調一遍,四台伺服器全部要安裝node。

下面配置MHA manager

安裝依賴

yum   install -y perl perl-Config-Tiny perl-Email-Date-Forma perl-Log-Dispatch perl-MIME-Liteperl-MIME-Types perl-Mail-Sender perl-Mail-Sendmail perl-MailTools perl-Parallel-ForkManagerperl-Params-Validate perl-Time-HiRes perl-TimeDate

從git上面拉取mha-manager安裝包

cd /root/softgit clone cd mha-managerperl Makefile.PLmake && make install

配置hosts檔案

vim /etc/hosts192.168.1.92  mha-manager192.168.1.151 mysql-master192.168.1.152 mysql-slave01192.168.1.153 mysql-slave02 scp   /etc/hosts   [email protected]:/etc/ scp   /etc/hosts   [email protected]:/etc/ scp   /etc/hosts   [email protected]:/etc/

在主庫mysql和參與選舉的從庫中配置mha監控使用者和repl同步處理的使用者,不參與選舉的從庫可以不用配置。

mysql> grant all privileges on *.* to ‘mha‘@‘192.168.1.%‘ identified by ‘123456‘;mysql> grant replication slave on *.* to ‘repl‘@‘192.168.1.%‘ identified by ‘repl‘;mysql> flush privileges;

注意:關於參與選舉的從庫也要配置這兩個使用者的原因在於主庫宕機的時候,從庫要提升為主庫,repl是繼續和剩下的從庫保持主從關係,mha監控使用者是為了,mha可以繼續監視,從而可以讓修複了的原主庫作為新的備庫上線。

規範MHA目錄

mkdir -p /application/mha/confmkdir -p /application/mha/workstatus/app1mkdir -p /application/mha/logscp /root/soft/mha-manager/samples/conf/* /application/mha/conf/mkdir -p  /application/mha/workstatus/app1cd /application/mha/conf/cp app1.cnf app1.cnf.ori

接下來這個檔案很重要,關係到能不能啟動mha。

vim app1.cnf

檔案內容

[server default]port=3306user=mhapassword=123456repl_user=replrepl_password=replremote_workdir=/var/log/mha/app1master_binlog_dir=/var/lib/mysql #這個是Master-mysql主庫的binlog目錄別以為是本地目錄。manager_workdir=/application/mha/workstatus/app1manager_log=/application/mha/logs/app1.log[server1]hostname=mysql-master[server2]hostname=mysql-slave01candidate_master=1 #參與主庫選舉check_repl_delay=0 #預設情況下如果一個slave落後master 100M的relay logs的話,MHA將不會選擇該slave作為一個新的master,因為對於這個slave的恢複需要花費很長時間,通過設定check_repl_delay=0,MHA觸發切換在選擇一個新的master的時候將會忽略複製延時,這個參數對於設定了candidate_master=1的主機非常有用,因為這個候選主在切換的過程中一定是新的master[server3]hostname=mysql-slave02no_master=1  #設定之後不參與切換主,並且不需要在此從庫配置repl,否則需要配置。

配置全域設定檔

cp masterha_default.cnf masterha_default.cnf.oldvim masterha_default.cnf[server default]log-level=debugcheck_repl_delay=1check_repl_filter=1ping_interval=5ping_type=CONNECT設定relay log清除方式(在每個slave上)

在所有的salve上面配置relay log清除方式

mysql> set global relay_log_purge=0;

在crontab添加自動清理指令碼樣本如下

vim /etc/cron.d/purge_relay_logs0 4 * * * /usr/bin/purge_relay_logs --user=root --password=xxx --disable_relay_log_purge --port=3306 --workdir=/var/lib/mysql/ >>/application/mha/logs/purge_relay_logs.log 2>&1

檢查配置分別用masterha_check_ssh和masterha_check_repl

masterha_check_ssh  --conf=/application/mha/conf/app1.cnf

看到[info] All SSH connection tests passed successfully.字樣代表ssh是通的。

masterha_check_repl --conf=/application/mha/conf/app1.cnf

看到MySQL Replication Health is OK.字樣代表資料庫之間同步是沒有問題的。


啟動

nohup masterha_manager --conf=/application/mha/conf/app1.cnf --remove_dead_master_conf --ignore_last_failover </dev/null 2>&1 &

啟動參數解釋:

–remove_dead_master_conf   該參數代表當發生主從切換後,老的主庫的ip將會從設定檔中移除。

–ignore_last_failover     在預設情況下,如果MHA檢測到連續發生宕機,且兩次宕機間隔不足8小時的話,則不會進行Failover,之所以這樣限制是為了避免ping-pong效應。該參數代表忽略上次MHA觸發切換產生的檔案,預設情況下,MHA發生切換後會在日誌目錄,本樣本會在/application/mha/workstatus/app1產生app1.failover.complete檔案,下次再次切換的時候如果發現該目錄下存在該檔案將不允許觸發切換,除非在切換後刪除該檔案,為了方便,這裡設定為–ignore_last_failover。

檢查MHA manager狀態

masterha_check_status  --conf=/application/mha/conf/app1.cnfapp1 (pid:43568) is running(0:PING_OK), master:mysql-master

測試

到151上面關掉資料庫,在92也就是mha-manager上面tail -f /application/mha/logs/app1.log可以查看切換日誌

切換完成後到153的mysql上面使用show slave status\G;查看master是不是已經變成了152。

關於測試的一些說明,在測試過程中如果想驗證資料是否有丟失,可以採用sysbench進行壓測,通過安裝percona-toolkit的pt-table-checksum來檢查資料一致性,如果發現有不一致的資料,可以使用pt-table-sync 工具來修複。

關於二次三次測試

當主庫宕了之後,修複好之後,在151上面啟動。在mha-manager伺服器上面使用

grep -i "All other slaves should start" manager.log

(不需要鎖表)或者登陸到新主庫152上面show master status;(需要鎖表和解鎖)查看位置和binlog檔案資訊。

在151上面做change master操作

change master to master_host=‘192.168.1.152‘,master_user=‘repl‘,master_password=‘repl‘,master_port=3306,master_log_file=‘master-bin.00000X‘,master_log_pos=XXXX;

然後start slave;查看同步資訊show slave status\G;。

回到mha-manager伺服器,停掉mha

masterha_stop --conf=/application/mha/conf/app1.cnf

然後編輯app1.cnf,由於運行是採用了–remove_dead_master_conf這個參數,發現server1不見了,添加進去,並把

candidate_master=1 

check_repl_delay=0

加入到master下面,作為新主庫的從庫,並參與選舉。

然後啟動mha,就完成了一輪測試。

---------------------------分割線---------------------------------

下面配置keepalived,先停掉mha

masterha_stop --conf=/application/mha/conf/app1.cnf

在151和152上面安裝keepalived。

yum install -y gcc kernel-devel openssl-devel popt-develyum install -y keepalived
vim /etc/keepalived/keepalived.conf

內容如下:

! Configuration File for keepalivedglobal_defs {   notification_email {        [email protected]   }   notification_email_from [email protected]   smtp_server smtp.126.com   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script Monitor_mysql {                script "/etc/keepalived/scripts/monitor_mysql.sh"                interval 1                 weight 2                }track_script {                Monitor_mysql                        }vrrp_instance VI_1 {    state BACKUP   #主備都配置為BACKUP模式    interface eno16777736  #虛擬機器是這個,用ip addr查看自己網卡    virtual_router_id 51   #主備必須相同    priority 100    advert_int 1    authentication {        auth_type PASS    #主備必須相同        auth_pass 1111    #主備必須相同    }    virtual_ipaddress {        192.168.1.150     #也可以配置多個虛擬IP        #192.168.200.18    }}

配置監控mysql指令碼

注意:這裡採用的是其中一種關掉keepalived的方法,還可以通過配置MHA的master_ip_failover指令碼,指定keepalived相關設定,然後在app1.cnf裡面添加

master_ip_failover_script= /路徑/master_ip_failover來控制keepalived進程。

mkdir -p /etc/keepalived/scripts/vim /etc/keepalived/scripts/monitor_mysql.sh

內容如下:

#!/bin/bashMYSQL=mysqlMYSQL_HOST=127.0.0.1MYSQL_PORT=3306MYSQL_USER=rootMYSQL_PASSWORD=Www.vcolco.comCHECK_TIME=3#mysql  is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0MYSQL_OK=1function check_mysql_helth (){$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD -P$MYSQL_PORT -e "show status;" >/dev/null 2>&1if [ $? = 0 ] ;then     MYSQL_OK=1else     MYSQL_OK=0fi     return $MYSQL_OK}while [ $CHECK_TIME -ne 0 ]do     let "CHECK_TIME -= 1"     check_mysql_helthif [ $MYSQL_OK = 1 ] ; then     CHECK_TIME=0     exit 0fiif [ $MYSQL_OK -eq 0 ] &&  [ $CHECK_TIME -eq 0 ]then     pkill keepalivedexit 1fisleep 1done

啟動151和152的keepalived

systemctl start keepalived

在分別在151和152上面查看ip

ip a

發現優先順序高的151正在使用150這個VIP(虛IP),而152沒有。

測試keepalived可以使用pkill keepalived掉151的keepalived進程。然後去152上面使用ip a查看VIP是否漂移。

到此Mysql半同步+MHA+keepalived已經配置完成。

本文出自 “叼磚小書童” 部落格,請務必保留此出處http://newbye.blog.51cto.com/5197506/1893099

在Centos7玩轉Mysql半同步和keepalived+MHA(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.