【博文推薦】Microsoft Azure部署MYSQL-MMM過(guò)程詳解
本博文出自51CTO博客之星李珣博主,有任何問(wèn)題請(qǐng)進(jìn)入博主頁(yè)面互動(dòng)討論! |
MMM即Master-Master Replication Manager for MySQL(mysql主主復(fù)制管理器)關(guān)于mysql主主復(fù)制配置的監(jiān)控、故障轉(zhuǎn)移和管理的一套可伸縮的腳本套件(在任何時(shí)候只有一個(gè)節(jié)點(diǎn)可以被寫 入),這個(gè)套件也能對(duì)居于標(biāo)準(zhǔn)的主從配置的任意數(shù)量的從服務(wù)器進(jìn)行讀負(fù)載均衡,所以你可以用它來(lái)在一組居于復(fù)制的服務(wù)器啟動(dòng)虛擬ip,除此之外,它還有實(shí) 現(xiàn)數(shù)據(jù)備份、節(jié)點(diǎn)之間重新同步功能的腳本。
MySQL本身沒(méi)有提供replication failover的解決方案,通過(guò)MMM方案能實(shí)現(xiàn)服務(wù)器的故障轉(zhuǎn)移,從而實(shí)現(xiàn)mysql的高可用。
MMM項(xiàng)目來(lái)自 Google:http://code.google.com/p/mysql-master-master
官方網(wǎng)站為:http://mysql-mmm.org
MMM主要功能由下面三個(gè)腳本提供
- l mmm_mond 負(fù)責(zé)所有的監(jiān)控工作的監(jiān)控守護(hù)進(jìn)程,決定節(jié)點(diǎn)的移除等等
- l mmm_agentd 運(yùn)行在mysql服務(wù)器上的代理守護(hù)進(jìn)程,通過(guò)簡(jiǎn)單遠(yuǎn)程服務(wù)集提供給監(jiān)控節(jié)點(diǎn)
- l mmm_control 通過(guò)命令行管理mmm_mond進(jìn)程
在兩個(gè)節(jié)點(diǎn)的master-master環(huán)境下,MMM使用5個(gè)IP。每個(gè)單獨(dú)的節(jié)點(diǎn)使用一個(gè)固定IP,這個(gè)固定IP永遠(yuǎn)不會(huì)變化。
2個(gè)reader IPs(read-only)和一個(gè)writer IP(updates),后面三個(gè)IP(2個(gè)reader IP和一個(gè)Writer IP)在兩個(gè)節(jié)點(diǎn)之間遷移,如何遷移取決于節(jié)點(diǎn)的可用性。
正 常情況下(沒(méi)有復(fù)制失敗,沒(méi)有復(fù)制延遲等)活動(dòng)的master有兩個(gè)虛擬ip(reader和writer),備用的master有一個(gè)虛擬 ip(reader),如果活動(dòng)的master失敗了,那么所有的reader和writer虛擬IP都會(huì)被分配給備用的master。
具體的配置信息如下所示:
- 角色 ip地址 主機(jī)名字 server-id
- monitoring 10.0.0.6 monitor -
- master1 10.0.0.4 db1 1
- master2 10.0.0.5 db2 2
- slave1 10.0.0.7 db3 3
業(yè)務(wù)中的服務(wù)ip信息如下所示:
- ip地址 角色 描述
- 10.0.0.80 write 應(yīng)用程序連接該ip對(duì)主庫(kù)進(jìn)行寫請(qǐng)求
- 10.0.0.90 read 應(yīng)用程序連接該ip進(jìn)行讀請(qǐng)求
- 10.0.0.100 read 應(yīng)用程序連接該ip進(jìn)行讀請(qǐng)求
部署架構(gòu)如下圖:
MySQL-MMM優(yōu)缺點(diǎn)
優(yōu)點(diǎn):高可用性,擴(kuò)展性好,出現(xiàn)故障自動(dòng)切換,對(duì)于主主同步,在同一時(shí)間只提供一臺(tái)數(shù)據(jù)庫(kù)寫操作,保證的數(shù)據(jù)的一致性。
缺點(diǎn):Monitor節(jié)點(diǎn)是單點(diǎn),可以結(jié)合Keepalived實(shí)現(xiàn)高可用。
#p#
具體的部署步驟如下:
(1)主機(jī)配置
在Azure中創(chuàng)建一個(gè)虛擬網(wǎng)絡(luò),然后在庫(kù)中創(chuàng)建虛擬機(jī),選擇基于CENTOS Openlogic 6.5
PS:由于MMM的監(jiān)控機(jī)制需要檢查PING,請(qǐng)確保所有虛擬機(jī)在一個(gè)VNET下。
同時(shí)完成四臺(tái)虛擬機(jī)的創(chuàng)建,分別是master1、master2、slave、monitor,如下圖:
使用那個(gè)Xshell連接到VM
首先獲取root權(quán)限并修改root密碼,如下操作
Sudo su -
輸入密碼
Passwd root
在每一臺(tái)服務(wù)器上用yum命令安裝MYSQL服務(wù)
- # yum install mysql-server
安裝完成后重啟MYSQL服務(wù)
- # service mysqld restart
連接到mysql,修改mysql root密碼,如下操作:
- # mysql -uroot
- use mysql
- update user set password=password('p@ssw0rd') where user='root';
- flush privileges;
select user,host,password from mysql.user
#p#
(2)配置Master-Master復(fù)制
在db1(master1)、db2(master2)、db3(slave)上編譯my.conf
- #vi /etc/my.cnf
- [mysqld]
- datadir=/var/lib/mysql
- socket=/var/lib/mysql/mysql.sock
- user=mysql
- #下面為新添加的內(nèi)容
- default-storage-engine = innodb
- replicate-ignore-db = mysql
- binlog-ignore-db = mysql
- server-id = 1 #每臺(tái)服務(wù)器不能相同
- log-bin = /var/log/mysql/mysql-bin.log
- log_bin_index = /var/log/mysql/mysql-bin.log.index
- relay_log = /var/log/mysql/mysql-bin.relay
- relay_log_index = /var/log/mysql/mysql-bin.relay.index
- expire_logs_days = 10
- max_binlog_size = 100M
- log_slave_updates = 1
注意:
1)server-id在每臺(tái)服務(wù)器上的值都是不一樣,在這里依次為1、2、3、4。
2) 因?yàn)樵谶@里把log文件配置到了/var/log/mysql下,而mysql默認(rèn)的目錄是在/var/lib/mysql,所以首先要新建mysql文 件夾,Mkdir /var/log/mysql,然后用chown -R mysql.mysql /var/log/mysql mysql命令將mysql的所有者修改為用戶mysql。其次要保證,mysql文件夾的權(quán)限755(即-rwxr-xr-x)。
如果沒(méi) 有修改權(quán)限和所有者,重啟服務(wù)時(shí)就會(huì)在錯(cuò)誤日志中出現(xiàn)找不到mysql-bin.log或者mysql-bin.log.index的錯(cuò)誤(/usr /libexec/mysqld: File '/var/log/mysql/mysql-bin.log.index' not found (Errcode: 13))。
完成編譯后重啟MYSQL服務(wù)
檢查復(fù)制狀態(tài),如下圖:
show master status;
檢查日志是否生成道新目錄,如下
# ls /var/log/mysql
使用mysql-mmm時(shí)一共需要三個(gè)用戶: replication、mmm_agent和mmm_monitor(管理服務(wù)器上用來(lái)監(jiān)控cluster狀態(tài)的用戶,所以可以限定只能從管理服務(wù)器登錄)。使用下面三條命令新建這三個(gè)用戶并分配相應(yīng)的權(quán)限
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'10.0.0.%' IDENTIFIED BY 'monitor';
GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'10.0.0.%' IDENTIFIED BY 'agent';
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'10.0.0.%' IDENTIFIED BY 'replication';
接下來(lái)再db1和db2分別執(zhí)行下面命令修改復(fù)制賬戶和密碼。并啟動(dòng)SLAVE進(jìn)程。
change master to master_host='10.0.0.4', master_port=3306, master_user='replication', master_password='replication';start slave;
change master to master_host='10.0.0.5', master_port=3306, master_user='replication', master_password='replication';start slave;
檢查復(fù)制狀態(tài),如下圖:
show slave status\G
#p#
(3)安裝配置MYSQL-MMM
在db1、db2、db3安裝MMM所需要的Perl模塊(所有服務(wù)器)執(zhí)行該腳本,然后 yum -y install mysql-mmm-agent來(lái)安裝MMM :
- # rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
- # yum -y install mysql-mmm-agent
在Monitor節(jié)點(diǎn)安裝mysql-mmm-monitor
- # yum -y install mysql-mmm-monitor*
- # yum -y install perl-Time-HiRes*
編譯DB1上的mmm_common.conf配置agent:
- # sudo vim /etc/mysql-mmm/mmm_common.conf
- active_master_role writer
- cluster_interface eth0
- pid_path /var/run/mysql-mmm/mmm_agentd.pid
- bin_path /usr/libexec/mysql-mmm/
- replication_user replication
- replication_password replication
- agent_user mmm_agent
- agent_password agent
- ip 10.0.0.4
- mode master
- peer db2
- ip 10.0.0.5
- mode master
- peer db1
- ip 10.0.0.7
- mode slave
- hosts db1, db2
- ips 10.0.0.100
- mode exclusive
- hosts db2, db3
- ips 10.0.0.80, 10.0.0.90
- mode balanced
其中 replication_user 用于檢查復(fù)制的用戶, agent_user 為agent的用戶, mode 標(biāo)明是否為主或者備選主,或者從庫(kù)。 mode exclusive 主為獨(dú)占模式,同一時(shí)刻只能有一個(gè)主, 中hosts表示目前的主庫(kù)和備選主的真實(shí)主機(jī)ip或者主機(jī)名, ips 為對(duì)外提供的虛擬機(jī)ip地址, 中hosts代表從庫(kù)真實(shí)的ip和主機(jī)名, ips 代表從庫(kù)的虛擬ip地址。
完成編譯后通過(guò)scp復(fù)制到db2、db3、monitor節(jié)點(diǎn):
- # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.5:/etc/mysql-mmm/
- # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.7:/etc/mysql-mmm/
- # scp /etc/mysql-mmm/mmm_common.conf 10.0.0.6:/etc/mysql-mmm/
分別在db1,db2,db3三臺(tái)主機(jī)的/etc/mysql-mmm配置mmm_agent.conf文件,分別用不同的字符標(biāo)識(shí),注意這三臺(tái)機(jī)器的this db1這塊要想,比如本環(huán)境中,db1要配置this db1,db2要配置為this db2,而db3要配置為this db3。
- # sudo vim /etc/mysql-mmm/mmm_agent.conf
在monitor節(jié)點(diǎn)編譯monitor配置文件,添加ping_ips中的內(nèi)容
- # sudo vim /etc/mysql-mmm/mmm_mon.conf
在db1、db2、db3啟動(dòng)agent服務(wù)
- # service mysql-mmm-agent start
在monitor啟動(dòng)monitor服務(wù)