91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql中的MMM的介紹以及部署方法

發布時間:2021-09-28 13:44:09 來源:億速云 閱讀:339 作者:柒染 欄目:MySQL數據庫

這期內容當中小編將會給大家帶來有關mysql中的MMM的介紹以及部署方法,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一、 MMM 簡介:
MMM 即 Multi-Master Replication Manager for MySQL:mysql 多主復制管理器,基于 perl 實現,
關于 mysql 主主復制配置的監控、故障轉移和管理的一套可伸縮的腳本套件(在任何時候只
有一個節點可以被寫入), MMM 也能對從服務器進行讀負載均衡,所以可以用它來在一組
用于復制的服務器啟動虛擬 ip,除此之外,它還有實現數據備份、節點之間重新同步功能的
腳本。 MySQL 本身沒有提供 replication failover 的解決方案,通過 MMM 方案能實現服務器
的故障轉移,從而實現 mysql 的高可用。 MMM 不僅能提供浮動 IP 的功能,如果當前的主服
務器掛掉后,會將你后端的從服務器自動轉向新的主服務器進行同步復制,不用手工更改同
步配置。這個方案是目前比較成熟的解決方案。
mysql中的MMM的介紹以及部署方法
優點: 高可用性,擴展性好,出現故障自動切換,對于主主同步,在同一時間只提供一臺數
據庫寫操作,保證的數據的一致性。 當主服務器掛掉以后,另一個主立即接管,其他的從服
務器能自動切換,不用人工干預。
缺點: monitor 節點是單點,不過這個你也可以結合 keepalived 或者 haertbeat 做成高可用;
至少三個節點,對主機的數量有要求,需要實現讀寫分離,還需要在前端編寫讀寫分離程序。
在讀寫非常繁忙的業務系統下表現不是很穩定,可能會出現復制延時、切換失效等問題。
MMM 方案并不太適應于對數據安全性要求很高,并且讀、寫繁忙的環境中。
適用場景:
MMM 的適用場景為數據庫訪問量大,并且能實現讀寫分離的場景。
Mmm 主要功能由下面三個腳本提供:
mmm_mond 負責所有的監控工作的監控守護進程,決定節點的移除(mmm_mond 進程定時
心跳檢測,失敗則將 write ip 浮動到另外一臺 master)等等
mmm_agentd 運行在 mysql 服務器上的代理守護進程,通過簡單遠程服務集提供給監控節點
mmm_control 通過命令行管理 mmm_mond 進程
在整個監管過程中,需要在 mysql 中添加相關授權用戶,授權的用戶包括一個 mmm_monitor
用戶和一個 mmm_agent 用戶,如果想使用 mmm 的備份工具則還要添加一個 mmm_tools用戶。
二、 部署實施
建議安裝包完在克隆虛擬機
1、 環境介紹
OS:centos7.2(64 位) 數據庫系統: mysql5.7.13
關閉 selinux
配置 ntp,同步時間
關閉防火墻

角色IPhostnameserver-idwrite vipread vip
master1192.168.41.10master11192.168.41.100
master2(backup)192.168.41.11master22
192.168.41.101
slave1192.168.41.12slave13
192.168.41.102
slave2192.168.41.13slave24
192.168.41.103
monitor192.168.41.14monitor1

192.168.41.14

2、在所有主機上配置/etc/hosts 文件,添加如下內容:
192.168.41.10 master1
192.168.41.11 master2
192.168.41.12 slave1
192.168.41.13 slave2
192.168.41.14 monitor1
在 所 有 主 機 上 安 裝 perl perl-devel perl-CPAN libart_lgpl.x86_64 rrdtool.x86_64
rrdtool-perl.x86_64 包
#yum -y install perl- libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64
注:使用 centos7 在線 yum 源安裝(如果沒有安裝成功就yum remove libvirt-client在重新yum  -y install perl-
libart_lgpl.x86_64 rrdtool.x86_64 rrdtool-perl.x86_64就好)
安裝 perl 的相關庫
#cpan -i Algorithm::Diff Class::Singleton DBI DBD::mysql Log::Dispatch Log::Log4perl
Mail::Send Net::Ping Proc::Daemon Time::HiRes Params::Validate Net::ARP
3、在 master1、 master2、 slave1、 slave2 主機上安裝 mysql5.7 和配置復制
master1 和 master2 互為主從, slave1、 slave2 為 master1 的從
在每個 mysql 的配置文件/etc/my.cnf 中加入以下內容, 注意 server-id 不能重復。
master1 主機:
log-bin = mysql-bin
binlog_format = mixed
server-id = 1
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
log-slave-updates = 1
auto-increment-increment = 2
auto-increment-offset = 1
master2 主機:
log-bin = mysql-bin
binlog_format = mixed
server-id = 2
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
log-slave-updates = 1auto-increment-increment = 2
auto-increment-offset = 2
slave1 主機:
server-id = 3
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
read_only = 1
slave2 主機:
server-id = 4
relay-log = relay-bin
relay-log-index = slave-relay-bin.index
read_only = 1
在完成了對 my.cnf 的修改后,通過 systemctl restart mysqld 重新啟動 mysql 服務
主從配置(master1 和 master2 配置成主主, slave1 和 slave2 配置成 master1 的從):
在 master1 上授權:
mysql> grant replication slave on . to rep@'192.168.31.%' identified by '123456';
在 master2 上授權:
mysql> grant replication slave on . to rep@'192.168.31.%' identified by '123456';
把 master2、 slave1 和 slave2 配置成 master1 的從庫:
在 master1 上執行 show master status; 獲取 binlog 文件和 Position 點
mysql中的MMM的介紹以及部署方法
在 master2、 slave1 和 slave2 執行
mysql> change master to master_host='192.168.41.10',master_port=3306,master_user='rep',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=452;
mysql>slave start;
驗證主從復制:
master2 主機:
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果 Slave_IO_Running 和 Slave_SQL_Running 都為 yes,那么主從就已經配置 OK 了
把 master1 配置成 master2 的從庫:
在 master2 上執行 show master status ;獲取 binlog 文件和 Position 點
mysql> show master status;
mysql中的MMM的介紹以及部署方法

在 master1 上執行:
mysql> change master to
master_host='192.168.41.11',master_port=3306,master_user='rep',master_password='123456',
master_log_file='mysql-bin.000001',master_log_pos=452;
mysql> start slave;
驗證主從復制:
master1 主機:
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果 Slave_IO_Running 和 Slave_SQL_Running 都為 yes,那么主從就已經配置 OK 了
4、 mysql-mmm 配置:
在 4 臺 mysql 節點上創建用戶
創建代理賬號:
mysql> grant super,replication client,process on . to 'mmm_agent'@'192.168.41.%' identified
by '123456';
創建監控賬號:
mysql> grant replication client on . to 'mmm_monitor'@'192.168.41.%' identified by '123456';
注 1: 因為之前的主從復制,以及主從已經是 ok 的,所以我在 master1 服務器執行就 ok 了。
檢查 master2 和 slave1、 slave2 三臺 db 上是否都存在監控和代理賬號
mysql> select user,host from mysql.user where user in ('mmm_monitor','mmm_agent');
mysql中的MMM的介紹以及部署方法
注 2:
mmm_monitor 用戶: mmm 監控用于對 mysql 服務器進程健康檢查
mmm_agent 用戶: mmm 代理用來更改只讀模式,復制的主服務器等
5、 mysql-mmm 安裝
在 monitor 主機(192.168.41.14) 上安裝監控程序
cd /usr/local/src
wget
http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251
d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
在數據庫服務器(master1、 master2、 slave1、 slave2)上安裝代理
cd /tmp
wget
http://pkgs.fedoraproject.org/repo/pkgs/mysql-mmm/mysql-mmm-2.2.1.tar.gz/f5f8b48bdf89251
d3183328f0249461e/mysql-mmm-2.2.1.tar.gz
tar -zxf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
6、配置 mmm
編寫配置文件,五臺主機必須一致:
完成安裝后,所有的配置文件都放到了/etc/mysql-mmm/下面。管理服務器和數據庫服務器
上都要包含一個共同的文件 mmm_common.conf,內容如下:
active_master_rolewriter#積極的 master 角色的標示,所有的 db 服務器要開啟 read_only 參
數,對于 writer 服務器監控代理會自動將 read_only 屬性關閉。

<host default>
cluster_interface eno16777736#群集的網絡接口
pid_path /var/run/mmm_agentd.pid#pid 路徑
bin_path /usr/lib/mysql-mmm/#可執行文件路徑
replication_user rep#復制用戶
replication_password 123456#復制用戶密碼
agent_usermmm_agent#代理用戶
agent_password 123456#代理用戶密碼
</host>
<host master1>#master1 的 host 名
ip 192.168.41.10#master1 的 ipmode master#角色屬性, master 代表是主
peer master2#與 master1對等的服務器的 host名,也就是 master2的服務器 host
名
</host>
<host master2>#和 master 的概念一樣
ip 192.168.41.11
mode master
peer master1
</host>
<host slave1>#從庫的 host 名,如果存在多個從庫可以重復一樣的配置
ip 192.168.41.12#從的 ip
mode slave#slave 的角色屬性代表當前 host 是從
</host>
<host slave2>#和 slave 的概念一樣
ip 192.168.41.13
mode slave
</host>
<role writer>#writer 角色配置
hosts master1,master2#能進行寫操作的服務器的 host 名,如果不想切換寫操
作這里可以只配置 master,這樣也可以避免因為網絡延時而進行 write 的切換,但是一旦
master 出現故障那么當前的 MMM 就沒有 writer 了只有對外的 read 操作。
ips 192.168.41.100#對外提供的寫操作的虛擬 IP
mode exclusive#exclusive 代表只允許存在一個主,也就是只能提供一個寫的 IP
</role>
<role reader>#read 角色配置
hosts master2,slave1,slave2#對外提供讀操作的服務器的 host 名,當然這里也可以
把 master 加進來
ips 192.168.41.101, 192.168.41.102, 192.168.41.103#對外提供讀操作的虛擬 ip,這三個 ip 和
host 不是一一對應的,并且 ips 也 hosts 的數目也可以不相同,如果這樣配置的話其中一個
hosts 會分配兩個 ip
mode balanced#balanced 代表負載均衡
</role>

mysql中的MMM的介紹以及部署方法
同時將這個文件拷貝到其它的服務器,配置不變
#for host in master1 master2 slave1 slave2 ; do scp /etc/mysql-mmm/mmm_common.conf
$host:/etc/mysql-mmm/ ; done
代理文件配置
編輯 4 臺 mysql 節點機上的/etc/mysql-mmm/mmm_agent.conf
在數據庫服務器上,還有一個 mmm_agent.conf 需要修改,其內容是:
includemmm_common.conf
this master1
注意:這個配置只配置 db 服務器,監控服務器不需要配置, this 后面的 host 名改成當前服務器的主機名。
啟動代理進程
在 /etc/init.d/mysql-mmm-agent 的腳本文件的#!/bin/sh 下面,加入如下內容
source /root/.bash_profile添加成系統服務并設置為自啟動
#chkconfig --add mysql-mmm-agent
#chkconfigmysql-mmm-agent on
#/etc/init.d/mysql-mmm-agent start
注:添加 source /root/.bash_profile 目的是為了 mysql-mmm-agent 服務能啟機自啟。
自動啟動和手動啟動的唯一區別,就是激活一個 console 。那么說明在作為服務啟動的時候,
可能是由于缺少環境變量
服務啟動失敗,報錯信息如下:
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Can't locate Proc/Daemon.pm in @INC (@INC contains:
/usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/mmm_agentd line
7.
BEGIN failed--compilation aborted at /usr/sbin/mmm_agentd line 7.
failed
解決方法:
#cpan Proc::Daemon
#cpan Log::Log4perl
#/etc/init.d/mysql-mmm-agent start
Daemon bin: '/usr/sbin/mmm_agentd'
Daemon pid: '/var/run/mmm_agentd.pid'
Starting MMM Agent daemon... Ok
#netstat -antp | grep mmm_agentd
tcp 0 0 192.168.31.83:9989 0.0.0.0:* LISTEN 9693/mmm_agentd

編輯 monitor 主機上的/etc/mysql-mmm/mmm_mon.conf
includemmm_common.conf

<monitor>
ip 127.0.0.1##為了安全性,設置只在本機監聽, mmm_mond 默認監聽 9988
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path/var/lib/misc/mmm_mond.status
ping_ips192.168.41.10,192.168.41.11,192.168.41.12,192.168.41.13#用于測試網絡
可用性 IP 地址列表,只要其中有一個地址 ping 通,就代表網絡正常,這里不要寫入本機
地址
auto_set_online 0#設置自動 online 的時間,默認是超過 60s 就將它設置為 online,默認是
60s,這里將其設為 0 就是立即 online
</monitor>
<check default>check_period 5
trap_period 10
timeout 2
#restart_after 10000
max_backlog 86400
</check>
check_period
描述:檢查周期默認為 5s
默認值: 5s
trap_period
描述:一個節點被檢測不成功的時間持續 trap_period 秒,就慎重的認為這個節點失敗了。
默認值: 10s
timeout
描述:檢查超時的時間
默認值: 2s
restart_after
描述:在完成 restart_after 次檢查后,重啟 checker 進程
默認值: 10000
max_backlog
描述:記錄檢查 rep_backlog 日志的最大次數
默認值: 60
<host default>
monitor_usermmm_monitor#監控 db 服務器的用戶
monitor_password 123456#監控 db 服務器的密碼
</host>

啟動監控進程:
在 /etc/init.d/mysql-mmm-agent 的腳本文件的#!/bin/sh 下面,加入如下內容
source /root/.bash_profile
添加成系統服務并設置為自啟動
#chkconfig --add mysql-mmm-monitor
#chkconfigmysql-mmm-monitor on
#/etc/init.d/mysql-mmm-monitor start
啟動報錯:
Starting MMM Monitor daemon: Can not locate Proc/Daemon.pm in @INC (@INC contains:
/usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/sbin/mmm_mond line
11.
BEGIN failed--compilation aborted at /usr/sbin/mmm_mond line 11.
failed
解決方法: 安裝下列 perl 的庫
#cpanProc::Daemon
#cpan Log::Log4perl[root@monitor1 ~]# /etc/init.d/mysql-mmm-monitor start
Daemon bin: '/usr/sbin/mmm_mond'
Daemon pid: '/var/run/mmm_mond.pid'
Starting MMM Monitor daemon: Ok
[root@monitor1 ~]# netstat -anpt | grep 9988  \沒有出來端口稍等一些時間
tcp 0 0 127.0.0.1:9988 0.0.0.0:* LISTEN 8546/mmm_mond
注 2: MMM 啟動順序:先啟動 monitor,再啟動 agent
查看群集狀態
[root@monitor1 mysql-mmm]# mmm_control show
master1(192.168.41.10) master/ONLINE. Roles: writer(192.168.41.100)
master2(192.168.41.11) master/ONLINE. Roles: reader(192.168.41.101)
slave1(192.168.41.12) slave/ONLINE. Roles: reader(192.168.41.102)
slave2(192.168.41.13) slave/ONLINE. Roles: reader(192.168.41.103)
如果服務器狀態不是 ONLINE,可以用如下命令將服務器上線,例如:
#mmm_controlset_online 主機名
例如: [root@monitor1 ~]#mmm_control set_online master1
從上面的顯示可以看到,寫請求的 VIP 在 master1 上,所有從節點也都把 master1 當做主節
點。
查看是否啟用 vip
[root@master1 ~]# ip addr show dev eno16777736

[root@master1 mysql-mmm]# ip addr show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:4b:7f:71 brd ff:ff:ff:ff:ff:ff
inet 192.168.41.10/24 brd 192.168.41.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.41.100/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe4b:7f71/64 scope link
valid_lft forever preferred_lft forever
[root@master2 mysql-mmm]# ip addr show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c6:2f:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.41.11/24 brd 192.168.41.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.41.101/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec6:2f5c/64 scope link
valid_lft forever preferred_lft forever
[root@slave1 mysql-mmm]# ip addr show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:f6:45:7b brd ff:ff:ff:ff:ff:ff
inet 192.168.41.12/24 brd 192.168.41.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.41.102/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fef6:457b/64 scope link
valid_lft forever preferred_lft forever
[root@slave2 mysql-mmm]# ip addr show dev eno16777736
2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:46:31:2a brd ff:ff:ff:ff:ff:ff
inet 192.168.41.13/24 brd 192.168.41.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.41.103/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe46:312a/64 scope link
valid_lft forever preferred_lft forever

MMM 高可用性測試:
服務器讀寫采有 VIP 地址進行讀寫,出現故障時 VIP 會漂移到其它節點,由其它節點提供服
務。
首先查看整個集群的狀態,可以看到整個集群狀態正常
[root@monitor1 ~]# mmm_control show
master1(192.168.41.10) master/ONLINE. Roles: writer(192.168.41.100)
master2(192.168.41.11) master/ONLINE. Roles: reader(192.168.41.101)
slave1(192.168.41.12) slave/ONLINE. Roles: reader(192.168.41.102)
slave2(192.168.41.13) slave/ONLINE. Roles: reader(192.168.41.103)
模擬 master1 宕機,手動停止 mysql 服務,觀察 monitor 日志,master1 的日志如下:
[root@monitor1 ~]# tail -f /var/log/mysql-mmm/mmm_mond.log
查看群集的最新狀態
[root@monitor1 mysql-mmm]# mmm_control show
#Warning: agent on host master1 is not reachable
master1(192.168.41.10) master/HARD_OFFLINE. Roles:
master2(192.168.41.11) master/ONLINE. Roles: reader(192.168.41.102), writer(192.168.41.100)
slave1(192.168.41.12) slave/ONLINE. Roles: reader(192.168.41.101)
slave2(192.168.41.13) slave/ONLINE. Roles: reader(192.168.41.103)
從顯示結果可以看出 master1 的狀態有 ONLINE 轉換為 HARD_OFFLINE,寫 VIP 轉移到了
master2 主機上。
檢查所有的 db 服務器群集狀態
[root@monitor1 ~]# mmm_control checks all
mysql中的MMM的介紹以及部署方法
從上面可以看到 master1 能 ping 通,說明只是服務死掉了。
查看 master2 主機的 ip 地址:
[root@master2 ~]# ip addr show dev eno16777736
eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:c6:2f:5c brd ff:ff:ff:ff:ff:ff
inet 192.168.41.11/24 brd 192.168.41.255 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.41.102/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet 192.168.41.100/32 scope global eno16777736
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fec6:2f5c/64 scope link
valid_lft forever preferred_lft forever

slave1 主機:
mysql> show slave status\G;
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.41.11
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
slave2 主機:
mysql> show slave status\G;
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.41.11
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 154
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
啟動 master1 主機的 mysql 服務, 觀察 monitor 日志,master1 的日志如下:
[root@monitor1 ~]# tail -f /var/log/mysql-mmm/mmm_mond.log
2018/07/30 14:57:07  INFO Check 'mysql' on 'master1' is ok!
2018/07/30 14:57:07  INFO Check 'rep_backlog' on 'master1' is ok!
2018/07/30 14:57:07  INFO Check 'rep_threads' on 'master1' is ok!
2018/07/30 14:57:10 FATAL State of host 'master1' changed from HARD_OFFLINE to AWAITING_RECOVERY
從上面可以看到 master1 的狀態由 hard_offline 改變為 awaiting_recovery 狀態
用如下命令將服務器上線:
[root@monitor1 ~]#mmm_control set_online master1
[root@monitor1 mysql-mmm]# mmm_control show
master1(192.168.41.10) master/ONLINE. Roles:
master2(192.168.41.11) master/ONLINE. Roles: reader(192.168.41.102), writer(192.168.41.100)
slave1(192.168.41.12) slave/ONLINE. Roles: reader(192.168.41.101)
slave2(192.168.41.13) slave/ONLINE. Roles: reader(192.168.41.103)
可以看到主庫啟動不會接管主,只到現有的主再次宕機。
總結
(1)master2 備選主節點宕機不影響集群的狀態,就是移除了 master2 備選節點的讀狀態。
(2)master1 主節點宕機,由 master2 備選主節點接管寫角色, slave1,slave2 指向新 master2
主庫進行復制, slave1,slave2 會自動 change master 到 master2.
(3)如果 master1 主庫宕機,master2 復制應用又落后于 master1 時就變成了主可寫狀態,
這時的數據主無法保證一致性。
如果 master2,slave1,slave2 延遲于 master1 主,這個時 master1 宕機, slave1,slave2 將會
等待數據追上 db1 后,再重新指向新的主 node2 進行復制操作,這時的數據也無法保證
同步的一致性。(4)如果采用 MMM 高可用架構,主,主備選節點機器配置一樣,而且開啟半同步進一步
提高安全性或采用 MariaDB/mysql5.7 進行多線程從復制,提高復制的性能。
附:
1、 日志文件:
日志文件往往是分析錯誤的關鍵,所以要善于利用日志文件進行問題分析。
db 端: /var/log/mysql-mmm/mmm_agentd.log
監控端: /var/log/mysql-mmm/mmm_mond.log
2、 命令文件:
mmm_agentd: db 代理進程的啟動文件
mmm_mond:監控進程的啟動文件
mmm_backup:備份文件
mmm_restore:還原文件
mmm_control:監控操作命令文件
db 服務器端只有 mmm_agentd 程序,其它的都是在 monitor 服務器端。
3、 mmm_control 用法
mmm_control 程序可以用于監控群集狀態、切換 writer、設置 online\offline 操作等。
Valid commands are:
help - show this message #幫助信息
ping - ping monitor #ping 當前的群集是否正常
show - show status #群集在線狀態檢查
checks [<host>|all [<check>|all]] - show checks status#執行監控檢查操作
set_online<host> - set host <host> online #將 host 設置為 online
set_offline<host> - set host <host> offline #將 host 設置為 offline
mode - print current mode. #打印輸出當前的 mode
set_active - switch into active mode.
set_manual - switch into manual mode.
set_passive - switch into passive mode.
move_role [--force] <role><host> - move exclusive role <role> to host <host> #移除 writer 服務器
為指定的 host 服務器(Only use --force if you know what you are doing!)
set_ip<ip><host> - set role with ip<ip> to host <host>
檢查所有的 db 服務器群集狀態:
[root@monitor1 ~]# mmm_control checks all
檢查項包括: ping、 mysql 是否正常運行、復制線程是否正常等
檢查群集環境在線狀況:
[root@monitor1 ~]# mmm_control show
對指定的 host 執行 offline 操作:
[root@monitor1 ~]# mmm_controlset_offline slave2
對指定的 host 執行 onine 操作:
[root@monitor1 ~]# mmm_controlset_online slave2
執行 write 切換(手動切換):
查看當前的 slave 對應的 master
[root@slave2 ~]# mysql -uroot -p123456 -e 'show slave status\G;'
mysql: [Warning] Using a password on the command line interface can be insecure. 1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.31.141
writer 切換,要確保 mmm_common.conf 文件中的 writer 屬性有配置對應的 host,否則無法切

[root@monitor1 ~]# mmm_controlmove_role writer master1
OK: Role 'writer' has been moved from 'master2' to 'master1'. Now you can wait some time and
check new roles info!
[root@monitor1 ~]# mmm_control show
master1(192.168.41.10) master/ONLINE. Roles: writer(192.168.41.100)
master2(192.168.41.11) master/ONLINE. Roles: reader(192.168.41.101)
slave1(192.168.41.12) slave/ONLINE. Roles: reader(192.168.41.102)
slave2(192.168.41.13) slave/ONLINE. Roles: reader(192.168.41.103)
save 從庫自動切換到了新的 master
[root@slave2 ~]# mysql -uroot -p123456 -e 'show slave status\G;'
mysql: [Warning] Using a password on the command line interface can be insecure.
1. row
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.41.10
4、 其它處理問題
如果不想讓 writer 從 master 切換到 backup(包括主從的延時也會導致寫 VIP 的切換),那么
可以在配置/etc/mysql-mmm/mmm_common.conf 時, 去掉<role write>中的 backup
<role writer>#writer 角色配置
hosts master1 #這里只配置一個 Hosts
ips 192.168.41.100#對外提供的寫操作的虛擬 IP
mode exclusive #exclusive 代表只允許存在一個主,也就是只能提供一個寫的 IP
</role>
這樣的話當 master1 出現故障了 writer 寫操作不會切換到 master2 服務器,并且 slave 也不
會指向新的 master,此時當前的 MMM 之前對外提供寫服務。
5、 總結
1.對外提供讀寫的虛擬 IP 是由 monitor 程序控制。如果 monitor 沒有啟動那么 db 服務器
不會被分配虛擬 ip,但是如果已經分配好了虛擬 ip,當 monitor 程序關閉了原先分配的虛擬 ip
不會立即關閉外部程序還可以連接訪問(只要不重啟網絡),這樣的好處就是對于 monitor
的可靠性要求就會低一些,但是如果這個時候其中的某一個 db 服務器故障了就無法處理切
換,也就是原先的虛擬 ip 還是維持不變,掛掉的那臺 DB 的虛擬 ip 會變的不可訪問。
2.agent 程序受 monitor 程序的控制處理 write 切換,從庫切換等操作。如果 monitor 進
程關閉了那么 agent 進程就起不到什么作用,它本身不能處理故障。
3.monitor 程序負責監控 db 服務器的狀態,包括 Mysql 數據庫、服務器是否運行、復制
線程是否正常、主從延時等;它還用于控制 agent 程序處理故障。
4.monitor 會每隔幾秒鐘監控 db 服務器的狀態,如果 db 服務器已經從故障變成了正常,
那么 monitor 會自動在 60s 之后將其設置為 online 狀態(默認是 60s 可以設為其它的值),有
監控端的配置文件參數 “auto_set_online”決定 ,群集服務器的狀態有三種分別是 :
HARD_OFFLINE→AWAITING_RECOVERY→online
5.默認 monitor 會控制 mmm_agent 會將 writer db 服務器 read_only 修改為 OFF,其它的db 服務器 read_only 修改為 ON,所以為了嚴謹可以在所有的服務器的 my.cnf 文件中加入
read_only=1 由 monitor 控制來控制 writer 和 read,root 用戶和復制用戶不受 read_only 參數的
影響。

上述就是小編為大家分享的mysql中的MMM的介紹以及部署方法了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

若尔盖县| 都匀市| 安康市| 湛江市| 平和县| 武威市| 柘城县| 泾川县| 久治县| 云林县| 永清县| 海宁市| 昌乐县| 石河子市| 城固县| 兴义市| 旬邑县| 军事| 惠来县| 顺昌县| 霍林郭勒市| 清原| 句容市| 正宁县| 永丰县| 大理市| 金华市| 临夏市| 寻乌县| 秭归县| 抚松县| 凤凰县| 洛隆县| 石泉县| 宕昌县| 阆中市| 万山特区| 琼结县| 连平县| 赤壁市| 绥芬河市|