1、環境簡述mysql
一、工做邏輯圖sql
二、MySQL-MMM優缺點數據庫
優勢:高可用性,擴展性好,出現故障自動切換,對於主主同步,在同一時間只提供一臺數據庫寫操做,保證的數據的一致性。安全
缺點:Monitor節點是單點,能夠結合Keepalived實現高可用。bash
三、MySQL-MMM工做原理服務器
MMM(Master-Master replication managerfor Mysql,Mysql主主複製管理器)是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)。網絡
mmm_mond:監控進程,負責全部的監控工做,決定和處理全部節點角色活動。此腳本須要在監管機上運行。架構
mmm_agentd:運行在每一個mysql服務器上的代理進程,完成監控的探針工做和執行簡單的遠端服務設置。此腳本須要在被監管機上運行。負載均衡
mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令。工具
mysql-mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,經過監管的管理,這些IP會綁定在可用mysql之上,當某一臺mysql宕機時,監管會將VIP遷移至其餘mysql。
在整個監管過程當中,須要在mysql中添加相關受權用戶,以便讓mysql能夠支持監理機的維護。受權的用戶包括一個mmm_monitor用戶和一個mmm_agent用戶,若是想使用mmm的備份工具則還要添加一個mmm_tools用戶。
四、需求描述
操做系統:CentOS 6.5_X64
數據庫:MySQL 5.1
MMM:MySQL-MMM 2.2.1
數據庫分配:
function |
ip |
hostname |
server id |
monitoring host |
192.168.0.201 |
monitor |
無 |
master 1 |
192.168.0.202 |
db1 |
1 |
master 2 |
192.168.0.203 |
db2 |
2 |
slave 1 |
192.168.0.204 |
db3 |
3 |
slave 2 |
192.168.0.205 |
db4 |
4 |
虛擬IP地址(VIP):
ip |
role |
192.168.0.211 |
writer |
192.168.0.212 |
reader |
192.168.0.213 |
reader |
數據庫同步須要的用戶:
function |
description |
privileges |
monitor user |
mmm監控用於對mysql服務器進程健康檢查 |
REPLICATION CLIENT |
agent user |
mmm代理用來更改只讀模式,複製的主服務器等 |
SUPER, REPLICATION CLIENT, PROCESS |
replication user |
用於複製 |
REPLICATION SLAVE
|
2、db1,db2,db3和db4安裝數據庫並配置
3、配置db1和db2主主同步
#先查看下log bin日誌和pos值位置
db1配置以下:
db2配置以下:
#主主同步配置完畢,查看同步狀態Slave_IO和Slave_SQL是YES說明主主同步成功。
在db2插入數據測試下:
在db2查看是否同步成功:
能夠看到已經成功同步過去,一樣在db2插入到user表數據,也能同步過去。咱們的雙主就成功了,開始作主從複製。
4、配置slave1和slave2作爲master1的從庫
#先看下master1狀態值
在slave1和slave2分別執行:
在slave1和slave2查看以下說明主從複製成功。可是數據沒過來,這是由於主從複製原理只同步配置完後的增刪改記錄,之後的數據是不能同步的,咱們能夠把主的數據庫備份了,而後在送數據庫還原。
5、MySQL-MMM安裝配置
CentOS默認沒有mysql-mmm軟件包,官方推薦使用epel的網絡源,五臺都安裝epel:
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
一、monitor節點安裝
[root@monitor ~]# yum -y install mysql-mmm-monitor
二、四臺db節點安裝
[root@db1 ~]# yum -y install mysql-mmm-agent
三、在四臺db節點受權monitor訪問
四、修改mmm_common.conf文件(五臺相同)
#經過scp命令傳送到其餘四臺:
scp /etc/mysql-mmm/mmm_common.conf root@192.168.0.202/203/204/205:/etc/mysql-mmm/
五、修改四臺db代理端mmm_agent.conf文件
六、修改管理端mmm_mon.conf文件
6、啓動MySQL-MMM
一、db代理端啓動
[root@db1 ~]# /etc/init.d/mysql-mmm-agent start
[root@db1 ~]# chkconfigmysql-mmm-agent on
二、monitor管理端啓動
[root@monitor ~]# /etc/init.d/mysql-mmm-monitor start
[root@monitor ~]# chkconfigmysql-mmm-monitor on
7、測試集羣
一、查看集羣狀態
由此看來,主db1是對外一個寫入的角色,但不真正提供只寫,要想實現讀寫分離還須要結合amoeba。後面的虛擬IP是真正來訪問Mysql數據庫的。
二、故障轉移切換
停掉主db1數據庫,等待幾秒後,能夠看到數據庫db1處於HARD_OFFLINE(離線狀態),檢測不到數據庫的存在。
啓動主db1數據庫後,能夠看到數據庫db1處於AWAITING_RECOVER(恢復狀態),幾秒後將恢復在線狀態。模擬Slave故障也是如此,DOWN掉一個,虛擬IP會所有在另外一臺正常數據庫上。
至此,MySQL-MMM架構配置完畢。後續會寫在此基礎上實現讀寫分離、負載均衡機制。如圖: