MySQL高可用羣集------配置MMM高可用架構

MMM簡介:

MMM(Master-Master replication manager for Mysql,Mysql 主主複製管理器)是一套支持雙主故障切換和雙主平常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理Mysql Master-Master(雙主)複製,雖然叫作雙主複製,可是業務上同一時刻只容許對一個主進行寫入,另外一臺備選主上提供部分讀服務,以加速在主主切換時備選主的預熱,能夠說MMM這套腳本程序一方面實現了故障切換的功能,另外一方面其內部附加的工具腳本也能夠實現多個Slave的read負載均衡。MMM是一套靈活的腳本程序,基於Perl實現,用來對mysql replication進行監控和故障轉移並能管理Mysql Master-Master複製的配置mysql

MMM高可用架構的說明:

1.mmm_mon:監控進程,負責全部的監控工做,決定和處理全部節點角色活動。此腳本須要在監管機上運行
2.mmm_agent:運行在每一個Mysql服務器上的代理進程,完成監控的探針工做和執行簡單的遠端服務設置。此腳本須要在各節點上運行
3.mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令
4.mysql-mmm的監控端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,經過監管的管理,這些IP會綁定在可用的Mysql之上,當某一臺Mysql宕機時,監控會將VIP遷移至其餘Mysql
在整個監管過程當中,須要在Mysql中添加相關受權用戶,以便讓Mysql能夠支持監理機的維護。受權的用戶包括一個mmm_monitor和一個mmm_agent用戶。
sql

實驗案例環境部署:

本實驗使用五臺服務器模擬搭建(CentOS7 操做系統 )
主服務器master1 : ip:192.168.100.10 db1 vip: 192.168.100.199
主服務器master2:ip: 192.168.100.20 db2
從服務器 slave1 : ip:192.168.100.30 db3 vip: 192.168.100.33
從服務器 slave2: ip: 192.168.100.40 db4 vip: 192.168.100.44
監控服務器 monitor ip: 192.168.100.50數據庫


實驗的過程已整理好腳本以下:

----------master01/master02/slave01/slave02都須要安裝mysql數據庫-----
配置ALI雲源,而後安裝epel-release源。 (四臺主從服務器都須要裝)
systemctl stop firewalld.service
setenforce 0
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release //安裝epel源
yum clean all && yum makecache //清空全部,從新設置數據緩存vim


----------搭建本地yum源----------下面直接作-----------------
yum -y install mariadb-server mariadb (四臺主從服務器都須要裝)
systemctl stop firewalld.service
setenforce 0
systemctl start mariadb緩存


----------修改ml主配置文件-----------(四臺主從服務器都須要)-------------------------
vi /etc/my.cnf (9dd刪掉以前的內容)
vi /etc/my.cnf (9dd刪掉[mysqld]標籤以前的內容,從新插入下面的配置)
[mysqld]
log_error=/var/lib/mysql/mysql.err //開啓錯誤日誌功能
log=/var/lib/mysql/mysql_log.log //開啓通常日誌功能
log_slow_queries=/var/lib/mysql_slow_queris.log //開啓慢日誌功能
binlog-ignore-db=mysql,information_schema //不須要同步的數據庫名稱
character_set_server=utf8 //設置默認的字符集爲utf-8
log_bin=mysql_bin //開啓二進制日誌,用於主從數據複製
server_id=1 //每臺server_id的值不能相同
log_slave_updates=true //此數據庫宕機,備用數據庫接管
sync_binlog=1
auto_increment_increment=2 //字段一次遞增2
auto_increment_offset=1 //自增字段的起始值:1,3,5,7.........等奇數ID服務器


修改完後:
systemctl stop firewalld.service
setenforce 0
systemctl start mariadb
netstat -anpt | grep 3306架構


-------------沒有問題後,把配置文件複製到其餘3臺數據庫服務器上並啓動服務器----------
一臺一臺配置 或:scp /etc/my.cnf root@192.168.100.10:/etc/ //此命令在文件源端服務器上執行
注:第二臺server_id=2 第三臺11 第四臺22負載均衡


-------------配置主主複製----兩臺主服務器互相複製---------------------------------------
show master status; //記錄日誌文件名稱和位置,在兩臺主上查看。
-----在m1上爲m2授予從的權限,在m2上也要給m1授予從的權限----
grant replication slave on . to 'replication' @'192.168.100.%' identified by '123456'; //兩臺主都執行,從不須要ide

change master to master_host='192.168.100.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
注意:在m1上要指定m2上的日誌文件名和位置參數。在m2上要反過來指定m1的。(注意其中要改的IP地址、文件名及偏移量)工具

start slave; //開啓同步功能
show slave status\G;
Slave_I0_Running: Yes
Slave_SQL_Running: Yes


----------------在兩臺從上作------注意日誌文件和位置參數的改變--------------
注:兩臺從都須要指向其中的一臺主服務器(這裏指向m1)
change master to master_host='192.168.100.10',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;

start slave; //開啓同步
show slave status\G;//查看狀態


---------------測試主從、主主、同步狀況------------
創建數據庫而後測試同步狀況


----------------安裝MMM-----在全部服務器上安裝--------注意,epel源要配置好
yum -y install mysql-mmm*


----------------安裝結束後 對mmm進行配置---------------------------------
cd /etc/mysql-mmm/
vim mmm_common.conf //全部主機上都要配置,直接複製多份
<host default>
cluster_interface ens33
.....
replication_user replication
replication_password 123456
agent_user mmm_agent
agent_password 123456

<host db1>
ip 192.168.100.10
mode master
peer db2
</host>

<host db2>
ip 192.168.100.20
mode master
peer db1
</host>

<host db3>
ip 192.168.100.30
mode slave
</host>

<host db4>
ip 192.168.100.40
mode slave
</host>

<role writer>
hosts db1,db2
ips 192.168.100.199 //虛擬IP
mode exclusive
</role>

<role reader>
hosts db3,db4
ips 192.168.100.33, 192.168.100.44 //虛擬IP
mode balanced
</role>

遠程複製 覆蓋配置文件:
scp mmm_common.conf root@192.168.100.20:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.100.30:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.100.40:/etc/mysql-mmm/
vim /etc/mysql-mmm/mmm_common.conf 挨個查看一下


-----------最後一臺監控服務器也須要安裝mmm--------(epel源先裝好)------
systemctl stop firewalld.service
setenforce 0
wget -0 /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all && yum makecache (可不執行)
yum install -y mysql-mmm*
scp mmm_common.conf root@192.168.100.50:/etc/mysql-mmm/ //在m1上執行


--------------在monitor服務器上配置---------------------------------------
cd /etc/mysql-mmm/
vim mmm_mon.conf
ping_ips 192.168.100.10,192.168.100.20,192.168.100.30,192.168.100.40 //監視器監聽的服務器地址
auto_set_online 10 //自動上線時間10秒
<host default>
monitor_user mmm_monitor
monitor_password 123456 //改密碼
</host>


---------------在全部數據庫上爲mmm_agent受權----------(進入數據庫)-----------------
grant super, replication client, process on . to 'mmm_agent'@'192.168.100.%' identified by '123456';


---------------在全部數據庫上爲mmm_moniter受權---------(進入數據庫)------------------
grant replication client on . to 'mmm_monitor'@'192.168.48.%' identified by '123456';

flush privileges; //刷新


---------------修改全部數據庫的mmm_agent.conf---------------------------------------------
vim /etc/mysql-mmm/mmm_agent.conf
this db1 //根據以前代理名稱的規劃進行逐一調整


----------------在所在數據庫服務器上啓動mysql-mmm-agent----------------------------------
systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service //開機自啓動


----------------在monitor服務器上配置----------------------------------------------------------
cd /etc/mysql-mmm/
vim mmm_mon.conf
..........
ping_ips
192.168.100.10,192.168.100.20,192.168.100.30,192.168.100.40 //數據庫服務器地址

auto_set_online 10 //自動上線時間10秒
........
systemctl start mysql-mmm-monitor.service //啓動監控服務mysql-mmm-montior

mmm_control show //查看各節點的狀況:
db1(192.168.235.132) master/ONLINE. Roles:writer(192.168.100.199)
db2(192.168.235.191) master/ONLINE. Roles:
db3(192.168.235.177) slave/ONLINE. Roles:reader(192.168.100.33)
db4(192.168.235.181) slave/ONLINE. Roles:reader(192.168.100.44)

mmm_control checks all //須要各類OK
mmm_control move_role writer db2 //將虛擬IP200切換到db2服務器上

service mariadb restart //監控機作客戶端
systemctl restart mysql-mmm-agent


-----------------------故障測試-----------------------------------------------
中止m1 確認 虛擬地址 200 是否移動到m2上。 注意:主不會搶佔。
systemctl stop mariadb.service

而後再監控服務器上 ,查看是否切換到m2上:mmm_control show


能夠把從服務器一臺也關掉 試一下。 注意:從會搶佔

在m1服務器上進數據庫爲監控機地址受權登陸
grant all on . to 'testdba'@'192.168.100.50' identified by '123456';
flush privileges; //刷新

按理來說監控服務器只單獨充當監控這一角色就好了,這裏臨時將它也做爲客戶端來配置一下:
yum install -y mariadb-server mariadb


------------------在監控服務器上登陸-------------------------------------------
mysql -utestdba -p -h 192.168.100.199 //虛擬地址
建立數據,測試同步狀況

腳本到此結束!

本篇總結

.MySQL-MMM適用於數據的一致性要求不是很高,可是又想最大程度地保證業務可用性的場景。

相關文章
相關標籤/搜索