1. 程式人生 > 其它 >mysql——mmm高可用架構

mysql——mmm高可用架構

目錄

一、MMM架構

1.1、MMM簡介

MMM(Master-Master replication manager for MvSQL,MySQL主主複製管理器)是一套支援雙主故障切換和雙主日常管理的指令碼程式。MMM使用perl語言開發,主要用來監控和管理MySQL Master-Master

(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時備選主的預熱,可以說MMM這套指令碼程式一方面實現了故障切換的功能,另一方面其內部附加的工具指令碼也可以實現多個slave的read負載均衡

MMM提供了自動和手動兩種凡是移除一組伺服器中複製延遲較高的伺服器的虛擬IP,同時它還可以備份資料,實現兩節點之間的資料同步等。由於MMM無法完全保證資料的一致性,所以MMM適用於對資料的一致性要求不是很高,但是又想最大程度地保證業務可用性的場景

MMM是一套靈活的指令碼程式,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql master-master複製的配置

1.2、MMM 高可用架構的說明

  • mmm_non:監控程序,負責所有的監控工作,決定和處理所有節點角色活動。此指令碼需要在監控主機上執行
  • mmm_agent:執行在每個mysql伺服器上的代理程序,完成監控的探針工作和執行簡單的遠端服務設定。此指令碼需要在被監管機上執行
  • mmm_control:一個簡單的指令碼,提供管理mmm_mon程序的命令
  • mysql-mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,通過監管的管理,這些IP會繫結在可用mysql之上,當某一個mysql宕機時,監管會將VIP遷移至其他mysql

在整個監管過程中,需要在mysql中新增相關授權使用者,以便讓mysql可以支援監控主機的維護

授權的使用者包括一個mmm_monitor使用者和一個mmm_agent使用者

二、搭建mysql-mmm

2.1、實驗準備

master01(db1)			192.168.80.11                mysql5.7、mysql-mmm
master02(db2)			192.168.80.12                 mysql5.7、mysql-mmm
slave01(db3)			192.168.80.13                 mysql5.7、mysql-mmm
slave02(db4)			192.168.80.14                 mysql5.7、mysql-mmm
monitor					192.168.80.15                 mysql-mmm

2.2、搭建 MySQL 多主多從模式

systemctl stop firewalld 
setenforce 0

#修改 master01 配置檔案
vim /etc/my.cnf
......
[mysqld]
user = mysql
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
character_set_server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket = /usr/local/mysql/mysql.sock
server-id = 1                                               #每臺 Mysql 主機的 server-id 不能相同
log-error=/usr/local/mysql/data/mysql_error.log             #錯誤日誌
general_log=ON                                              #通用查詢日誌
general_log_file=/usr/local/mysql/data/mysql_general.log
slow_query_log=ON                                           #慢查詢日誌
slow_query_log_file=mysql_slow_query.log
long_query_time=5
binlog-ignore-db=mysql,information_schema        #不需要同步的庫名
log_bin=mysql_bin                                #開啟二進位制日誌用於主從資料複製
log_slave_updates=true                           #允許slave從master複製資料時可以寫入到自己的二進位制日誌
sync_binlog=1                            #"雙1設定",MySQL 在每寫一次二進位制日誌時都會同步到磁碟中去    
innodb_flush_log_at_trx_commit=1         #"雙1設定",每次事務提交時MySQL都會把快取的資料寫入日誌檔案,並且刷到磁碟中去
auto_increment_increment=2               #自增欄位一次遞增多少
auto_increment_offset=1                  #自增欄位的起始值

#把配置檔案複製到其它 3 臺數據庫伺服器上並啟動伺服器,注意:配置檔案中的 server_id 要修改
scp /etc/my.cnf [email protected]:/etc/
scp /etc/my.cnf [email protected]:/etc/
scp /etc/my.cnf [email protected]:/etc/

systemctl restart mysqld

2.2.1、配置主主複製,兩臺主伺服器相互複製

##在兩臺主伺服器上都執行授予從的許可權,從伺服器上不需要執行
grant replication slave on *.* to 'replication'@'192.168.80.%' identified by '123456';
#在兩臺主伺服器上檢視,記錄日誌檔名稱和同步點
show master status;
#在 master01 上配置同步
change master to master_host='192.168.80.12',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=460;

start slave;

show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

#在 master02 上配置同步
change master to master_host='192.168.80.11',master_user='replication',master_password='123456',master_log_file='mysql_bin.000001',master_log_pos=460;

start slave;

show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

2.2.2、配置主從複製,在兩臺從伺服器上做

change master to master_host='192.168.80.11',master_user='replication',master_password='264196',master_log_file='mysql_bin.000001',master_log_pos=460;

start slave;

show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

2.2.3、測試主主、主從 同步情況

#主上新建資料
#另外三臺驗證

2.3、安裝配置 MySQL-MMM

2.3.1、在所有伺服器上安裝 MySQL-MMM

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum -y install mysql-mmm*

2.3.2、在 master01 上對 MySQL-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.80.11
mode    master
peer    db2
</host>

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

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

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

<role writer>
hosts   db1, db2
ips     192.168.80.188
mode    exclusive           #只有一個 host 可以進行寫操作模式
</role>

<role reader>
hosts   db3, db4
ips     192.168.80.198, 192.168.80.199
mode    balanced            #多個 slave 主機可以進行讀操作模式
</role>
#把配置檔案複製到其它 4 臺主機,所有主機該配置檔案內容都是一樣的

scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/

2.3.2、修改所有資料庫伺服器的代理配置檔案 mmm_agent.conf

vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db1				#根據不同的主機分別修改為 db1,db2,db3,db4

2.3.3、在 monitor 監控伺服器上修改監控配置檔案 mmm_mon.conf

vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
.....
ping_ips        	192.168.80.11,192.168.80.12,192.168.80.13,192.168.80.14    #指定所有資料庫伺服器的 IP
auto_set_online		10				#指定自動上線時間
</monitor>

<host default>
monitor_user        mmm_monitor		#指定 mmm_monitor 的使用者名稱
monitor_password    123456          #指定 mmm_monitor 的密碼
</host>

2.3.4、在所有資料庫上為 mmm_agent(代理程序)授權

grant super, replication client, process on *.* to 'mmm_agent'@'192.168.80.%' identified by '123456';

2.3.5、在所有資料庫上為 mmm_moniter(監控程序)授權

grant replication client on *.* to 'mmm_monitor'@'192.168.80.%' identified by '123456';

flush privileges;

2.3.6、在所有資料庫伺服器上啟動 mysql-mmm-agent

systemctl start mysql-mmm-agent.service
systemctl enable mysql-mmm-agent.service

2.3.7、在 monitor 伺服器上啟動 mysql-mmm-monitor

systemctl start mysql-mmm-monitor.service

2.3.8、在 monitor 伺服器上測試群集

#檢視各節點的情況
mmm_control show
db1(192.168.80.11) master/ONLINE. Roles: writer(192.168.80.200)
db2(192.168.80.12) master/ONLINE. Roles: 
db3(192.168.80.13) slave/ONLINE. Roles: reader(192.168.80.188)
db4(192.168.80.14) slave/ONLINE. Roles: reader(192.168.80.189)
#檢測監控功能是否都完善,需要各種OK
mmm_control checks all
#指定繫結 VIP 的主機
mmm_control move_role writer db2

三、故障測試

mmm_control move_role writer db1
#停止 master01 確認 VIP 是否移動到 master02 上。注意:master01 主伺服器恢復服務後,不會搶佔

#停止一臺從伺服器
systemctl stop mysqld
# monitor 伺服器查詢
mmm_control show

四、客戶端測試

#在 master01 伺服器上為 monitor 伺服器地址授權登入

grant all on *.* to 'test'@'192.168.80.15' identified by '123456';
flush privileges;
#在 monitor 伺服器上使用 VIP 登入
yum install -y mariadb-server mariadb
systemctl start mariadb.service

mysql -utest -p123456 -h 192.168.80.200

#建立資料,測試同步情況
use test;
insert into aaa values (3,'cc');
#其他伺服器檢視