您好,登錄后才能下訂單哦!
MMM架構(gòu)方案與實(shí)施
MMM即Master-Master Replication Manager for MySQL(mysql主主復(fù)制管理器),是關(guān)于mysql主主復(fù)制配置的監(jiān)控、故障轉(zhuǎn)移和管理的一套可伸縮的腳本套件(在任何時(shí)候只有一個(gè)節(jié)點(diǎn)可以被寫入),這個(gè)套件也能基于標(biāo)準(zhǔn)的主從配置的任意數(shù)量的從服務(wù)器進(jìn)行讀負(fù)載均衡,所以你可以用它來在一組居于復(fù)制的服務(wù)器啟動(dòng)虛擬ip,除此之外,它還有實(shí)現(xiàn)數(shù)據(jù)備份、節(jié)點(diǎn)之間重新同步功能的腳本。
MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實(shí)現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實(shí)現(xiàn)mysql的高可用。
MMM項(xiàng)目來自 Google:http://code.google.com/p/mysql-master-master
官方網(wǎng)站為:http://mysql-mmm.org
MMM主要功能由下面三個(gè)腳本提供
mmm_mond :負(fù)責(zé)所有的監(jiān)控工作的監(jiān)控守護(hù)進(jìn)程,決定節(jié)點(diǎn)的移除等等
mmm_agentd :運(yùn)行在mysql服務(wù)器上的代理守護(hù)進(jìn)程,通過簡單遠(yuǎn)程服務(wù)集提供給監(jiān)控節(jié)點(diǎn)
mmm_control :通過命令行管理mmm_mond進(jìn)程
關(guān)于此架構(gòu)的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):安全性、穩(wěn)定性高,可擴(kuò)展性好,當(dāng)主服務(wù)器掛掉以后,另一個(gè)主立即接管,其他的從服務(wù)器能自動(dòng)切換,不用人工干預(yù)。
缺點(diǎn):至少三個(gè)節(jié)點(diǎn),對主機(jī)的數(shù)量有要求,需要實(shí)現(xiàn)讀寫分離,可以在程序擴(kuò)展上比較難實(shí)現(xiàn)。同時(shí)對主從(雙主)同步延遲要求比較高!因此不適合數(shù)據(jù)安全非常嚴(yán)格的場合。
實(shí)用場所:高訪問量,業(yè)務(wù)增長快,并且要求實(shí)現(xiàn)讀寫分離的場景。
環(huán)境部署:
master1 ip :192.168.1.10
master2 ip :192.168.1.20
slave1 ip :192.168.1.30
slave2 ip:192.168.1.40
monitor ip:192.168.1.50
所有主機(jī)都要安裝MMM的依賴包這里就單以master1為例進(jìn)行演示其他四臺(tái)均是如此,無任何的修改變動(dòng)。
#yum -y install perl-* libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64
安裝perl庫,使用centos7的互聯(lián)網(wǎng)yum源安裝
#cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl Mail::Send Net::Ping Proc::Daemon Time::HiResParams::Validate Net::ARP
為了防止后續(xù)環(huán)境中出現(xiàn)報(bào)錯(cuò)信息這里進(jìn)行修改;給出解決方法:
解決方法:
# cpan Proc::Daemon
# cpan Log::Log4perl
在所有主機(jī)上配置/etc/hosts文件,添加如下內(nèi)容:這里還是以master1為例;其他四臺(tái)均是如此
在這里我們使用monitor對其他四臺(tái)主機(jī)進(jìn)行ping命令測試,查看是否可以互通:
在master1、master2、slave1、slave2主機(jī)上安裝mysql5.7和配置復(fù)制
master1和master2互為主從,slave1、slave2為master1的從
在每個(gè)mysql的配置文件/etc/my.cnf中加入以下內(nèi)容, 注意server_id不能重復(fù)。
master1服務(wù)器:
master2服務(wù)器
slave1服務(wù)器
slave2服務(wù)器
在完成了對my.cnf的修改后,通過systemctl restart mysqld重新啟動(dòng)mysql服務(wù)
4臺(tái)數(shù)據(jù)庫主機(jī)若要開啟防火墻,要么關(guān)閉防火墻或者創(chuàng)建訪問規(guī)則:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
在這里我們采用關(guān)閉防火墻;但如果應(yīng)用在生產(chǎn)環(huán)境當(dāng)中,此做法不可取,可使用上面的方式,開放3306端口
主從配置(master1和master2配置成主主,slave1和slave2配置成master1的從):
在master1上授權(quán):
mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123456';
在master2上授權(quán):
mysql> grant replication slave on *.* to rep@'192.168.1.%' identified by '123456';
把master2、slave1和slave2配置成master1的從庫:
在master1上執(zhí)行show master status; 獲取binlog文件和Position點(diǎn)
mysql> show master status;
在master2、slave1和slave2執(zhí)行
mysql> change master to master_host='192.168.1.10',master_port=3306,master_user='rep',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=451;
master2執(zhí)行:
slave1執(zhí)行:
slave2執(zhí)行:
執(zhí)行成功之后開始驗(yàn)證主從復(fù)制結(jié)果:
mysql> start slave;
mysql> show slave status\G;
首先對master2進(jìn)行驗(yàn)證結(jié)果let's go
接下來是slave1驗(yàn)證:
最后是對slave2進(jìn)行驗(yàn)證:
通過以上結(jié)果表明這四臺(tái)數(shù)據(jù)庫的主從復(fù)制已經(jīng)搭建好了;但是我們需要的是master1和master2是主主復(fù)制,所以接下來還要對master1進(jìn)行配置:
把master1配置成master2的從庫:
在master2上執(zhí)行show master status ;獲取binlog文件和Position點(diǎn)
mysql> show master status;
在master1上執(zhí)行:
mysql> change master to master_host='192.168.1.20',master_port=3306,master_user='rep',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=154;
驗(yàn)證master1和master2的主主復(fù)制:
mysql> start slave ;
mysql> show slave status\G;
我們來捋一捋思路;這里master1和master2是主主復(fù)制;
slave1和slave2與master1是主從復(fù)制的關(guān)系,接下來配置MMM的配置;
首先:在4臺(tái)mysql節(jié)點(diǎn)上創(chuàng)建用戶{master1、2和 slave1、2}
創(chuàng)建代理賬號:
mysql> grant super,replication client,process on *.* to 'mmm_agent'@'192.168.1.%' identified by '123456';
創(chuàng)建監(jiān)控賬號:
mysql> grant replication client on *.* to 'mmm_monitor'@'192.168.1.%' identified by '123456';
這里還是以master1為例,由于他們已經(jīng)是主從同步的關(guān)系了,所以其他三臺(tái)主機(jī)也有這兩個(gè)賬號。
這里呢我們以其中的一臺(tái)slave2為例查看下是否存在呢?
可以看到在master1上創(chuàng)建的兩個(gè)賬號,在slave2上面已經(jīng)同步過來了。
mmm_monitor用戶:mmm監(jiān)控用于對mysql服務(wù)器進(jìn)程健康檢查
mmm_agent用戶:mmm代理用來更改只讀模式,復(fù)制的主服務(wù)器等
二:mysql-mmm的安裝
在monitor主機(jī)上安裝監(jiān)控程序:
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
在數(shù)據(jù)庫{master1,master2,slave1,slave2上安裝代理}
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
主:此軟件必須在每臺(tái)MySQL上面進(jìn)行安裝;這個(gè)不能同步。
master1服務(wù)器;
master2服務(wù)器:
slave1服務(wù)器:
slave2服務(wù)器:
接下來進(jìn)入激動(dòng)人心的時(shí)刻了,大家提起點(diǎn)精神,開始配置MMM的文件,五臺(tái)文件要保持一致。{mmm_commin.conf}
所有的配置文件都放到了/etc/mysql-mmm/下面。管理服務(wù)器和數(shù)據(jù)庫服務(wù)器上都要包含一個(gè)共同的文件mmm_common.conf,內(nèi)容如下:
將以上的文件拷貝到其他四臺(tái)服務(wù)器上確保這五臺(tái)服務(wù)器的此文件內(nèi)容相同。此外:
還有一個(gè)mmm_agent.conf需要修改,其內(nèi)容是:
includemmm_common.conf
this master1
這里以master1為例:其他三臺(tái)修改為{master2、slave1、slave2}monitor除外
啟動(dòng)代理進(jìn)程 其他三臺(tái)也是monitor除外,這里以master1為例:
在 /etc/init.d/mysql-mmm-agent的腳本文件的#!/bin/sh下面,加入如下內(nèi)容
加入系統(tǒng)服務(wù)
啟動(dòng)服務(wù)會(huì)報(bào)錯(cuò)解決方法:
# cpan Proc::Daemon
# cpan Log::Log4perl
就可以解決
在此重啟的結(jié)果
以上都是以master1為例,其他三臺(tái)配置方式和master1方式相同, 但在mmm_agent.conf文件修改不同上面已經(jīng)指出。
編輯 monitor主機(jī)上的/etc/mysql-mmm/mmm_mon.conf
includemmm_common.conf
啟動(dòng)監(jiān)控進(jìn)程:
在 /etc/init.d/mysql-mmm-monitor的腳本文件的#!/bin/sh下面,加入如下內(nèi)容
source /root/.bash_profile
添加成系統(tǒng)服務(wù)并設(shè)置為自啟動(dòng)
#chkconfig --add mysql-mmm-monitor
#chkconfig mysql-mmm-monitor on
#/etc/init.d/mysql-mmm-monitor start
啟動(dòng)會(huì)報(bào)錯(cuò)。解決方法
安裝下列perl的庫
#cpan Proc::Daemon
#cpan Log::Log4perl
在此啟動(dòng)
接下來查看群集狀態(tài):
以及服務(wù)器上線的命令:
群集狀態(tài):
查看所有群集的狀態(tài):
接下來可以將主master1的服務(wù)器模擬宕機(jī),查看vip是否會(huì)漂移到master2上面。這里不再重復(fù)。
這就是今天為大家?guī)淼?/span>MMM架構(gòu),如果有什么疑問可以在評論中提問。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。