mysql-mmm架構深度詳解
Mysql-mmm架構深度解讀:
主機名: ip: vip
mysql_monitor 172.18.3.183
mysql_master01 172.18.3.185 172.18.3.189(write)
mysql_master02 172.18.3.186 172.18.3.190 (read)
mysql_slave01 172.18.3.187 172.18.3.191 (read)
(1)在所有主機上配置/etc/hosts中新增:
172.18.3.185 mysql_master01
172.18.3.186 mysql_master02
172.18.3.187 mysql_slave01
172.18.3.183 mysql_monitor
(2)首先在3臺主機上安裝mysql和搭建複製(185和186互為主從,187為185的從)
vi/etc/my.cnf 修改兩處地方
log-bin=mysql-bin 去掉註釋
server-id = 2 每個主機的id不能重複
將186設定為185的從:
登入資料庫,在172.18.3.185上新建授權使用者:
MySQL> grant replication slave on *.* to 'epel'@'%' identified by '123456';
MySQL>flush privileges;
MySQL> show master status;(得出一下結果)
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| MySQL-bin.000003 | 374| | |
+------------------+----------+--------------+------------------+
mysql-bin.00003就是我們要開始同步的檔案,374就是初始位置。
登入到172.18.3.186,把172.18.3.185設定成自己的主伺服器
MySQL>Change master to master_host='172.18.3.185',master_user='replication',master_password='replication',master_log_file='MySQL-bin.000003',master_log_pos=374;(注意Mysql-bin.000003的大小寫)
MySQL> start slave;
MySQL> show slave status/G; 檢視同步狀態(Slave_IO_Running:Yes和Slave_SQL_Running: Yes一定要為YES)
如果做簡單的一主一從的話,到這裡就可以了,已經完成了;如果要兩個伺服器互為主從的話,要在172.18.3.185上做相同的設定
如果主資料庫有資料的話
資料庫鎖表操作,不讓資料再進行寫入動作。mysql> FLUSH TABLES WITH READ LOCK ;
至此,mysql雙機互為主從設定完畢。
(3)配置my.cnf
172.18.3.185上:
server-id = 1
log_slave_updates = 1
auto-increment-increment = 2
auto-increment-offset = 1
172.18.3.186上:
server-id = 2
log_slave_updates = 1
auto-increment-increment = 2
auto-increment-offset = 2
172.18.3.187上:
server-id = 3
log_slave_updates = 1
(4)安裝mysql-mmm 及相關依賴
執行如下指令碼install.sh
#!/bin/bash
yum install gcc -y #安裝gcc
yum install perl* -y #安裝perl依賴包
wget http://xrl.us/cpanm --no-check-certificate
mv cpanm/usr/bin
chmod 755 /usr/bin/cpanm
cat >/root/list << EOF
install Algorithm::Diff
install Class::Singleton
install DBI
install DBD::mysql
install File::Basename
install File::stat
install File::Temp
install Log::Dispatch
install Log::Log4perl
install Mail::Send
install Net::ARP
install Net::Ping
install Proc::Daemon
install Thread::Queue
install Time::HiRes
EOF
for package in `cat /root/list`
do
cpanm $package
done
#安裝mysql-mmm
wget http://mysql-mmm.org/_media/:mmm2:mysql-mmm-2.2.1.tar.gz
mv :mmm2:mysql-mmm-2.2.1.tar.gz mysql-mmm-2.2.1.tar.gz
tar xf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1
make install
到這裡已經完成了MMM的基本需求,接下來需要配置具體的配置檔案,其中mmm_common.conf,mmm_agent.conf為agent端的配置檔案,mmm_mon.conf為monitor端的配置檔案。
(5)配置mmm檔案
[[email protected]_master01 ~]# cat /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface br0
pid_path /var/run/mmm_agentd.pid
bin_path /usr/lib/mysql-mmm/
replication_user epel
replication_password 123456
agent_user mmm_agent
agent_password mmm_agent
</host>
<host mysql_master01>
ip 172.18.3.185
mode master
peer mysql_master02
</host>
<host mysql_master02>
ip 172.18.3.186
mode master
peer mysql_master01
</host>
<host mysql_slave01>
ip 172.18.3.187
mode slave
</host>
<role writer>
hosts mysql_master01,mysql_master02
ips 172.18.3.189
mode exclusive
</role>
<role reader>
hosts mysql_master02,mysql_slave01
ips 172.18.3.190,172.18.3.191
mode balanced
</role>
[[email protected]_master01 ~]#
其中replication_user用於檢查複製的使用者,agent_user為agent的使用者,mode標明是否為主或者備選主,或者從庫。mode exclusive主為獨佔模式,同一時刻只能有一個主,<role write>中hosts表示目前的主庫和備選主的真實主機ip或者主機名,ips為對外提供的虛擬機器ip地址,<role readr>中hosts代表從庫真實的ip和主機名,ips代表從庫的虛擬ip地址。
由於其他主機也要配置agent配置檔案,我們直接把mmm_common.conf從185拷貝到186和187兩臺主機的/etc/mysql-mmm下。
配置172.18.3.185:
[[email protected]_master01 ~]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this mysql_master01
配置172.18.3.186:
[[email protected]_master02 tmp]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this mysql_master02
配置172.18.3.187:
[[email protected]_slave01 tmp]# cat /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this mysql_slave01
配置172.18.3.183:
[[email protected]_monitor mysql-mmm]# cat /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 127.0.0.1
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 172.18.3.185,172.18.3.186,172.18.3.187
auto_set_online 10
</monitor>
<host default>
monitor_user mmm_monitor
monitor_password mmm_monitor
</host>
debug 0
[[email protected]_monitor mysql-mmm]#
(6)建立監控使用者,這裡需要建立3個監控使用者,具體描述如下:
使用者名稱 描述 許可權
monitor user MMM的monitor端監控所有的mysql資料庫的狀態使用者 REPLICATION CLIENT
agent user 主要是MMM客戶端用於改變的master的read_only狀態使用者 SUPER,REPLICATION CLIENT,PROCESS
repl 用於複製的使用者 REPLICATION SLAVE
在3臺伺服器進行授權,因為我之前的主主複製,以及主從已經是ok的,所以我在其中一臺伺服器執行就ok了。用於複製的賬號之前已經有了,所以這裡就授權兩個賬號。
複製程式碼
mysql> GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO'mmm_agent'@'%' IDENTIFIED BY'mmm_agent';
Query OK, 0 rows affected (0.08 sec)
mysql> GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%'IDENTIFIED BY 'mmm_monitor';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.03 sec)
mysql>
到此安裝基本完畢
分別在185 ,186,187 上執行/etc/init.d/mysql-mmm-agent start
開啟agent,在183上執行/etc/init.d/mysql-mmm-monitor start
如果一切正常,即可在monitor上執行命令檢視監控資料
檢查整體狀態:
[[email protected]_monitor monitor]# mmm_control checks all
mysql_slave01 ping [last change: 2016/10/16 20:31:54] OK
mysql_slave01 mysql [last change: 2016/10/17 16:01:01] OK
mysql_slave01 rep_threads [last change: 2016/10/17 15:14:49] OK
mysql_slave01 rep_backlog [last change: 2016/10/16 20:31:54] OK: Backlog is null
mysql_master02 ping [last change: 2016/10/16 20:31:54] OK
mysql_master02 mysql [last change: 2016/10/17 16:34:33] OK
mysql_master02 rep_threads [last change: 2016/10/17 15:13:25] OK
mysql_master02 rep_backlog [last change: 2016/10/16 20:31:54] OK: Backlog is null
mysql_master01 ping [last change: 2016/10/17 16:26:56] OK
mysql_master01 mysql [last change: 2016/10/17 16:28:20] OK
mysql_master01 rep_threads [last change: 2016/10/17 15:16:34] OK
mysql_master01 rep_backlog [last change: 2016/10/16 20:31:54] OK: Backlog is null
顯示伺服器狀態:
[[email protected]_monitor monitor]# mmm_control show
mysql_master01(172.18.3.185) master/ONLINE. Roles: writer(172.18.3.189)
mysql_master02(172.18.3.186) master/ONLINE. Roles: reader(172.18.3.190)
mysql_slave01(172.18.3.187) slave/ONLINE. Roles: reader(172.18.3.191)
檢視詳細日誌:
[[email protected]_monitor monitor]# tail -f /var/log/mysql-mmm/mmm_mond.log
實現效果:
mysql_master01(172.18.3.185) master/ONLINE. Roles:writer(172.18.3.189)
mysql_master02(172.18.3.186) master/ONLINE. Roles:reader(172.18.3.190)
mysql_slave01(172.18.3.187) slave/ONLINE. Roles: reader(172.18.3.191)
按照配置完成後,預設狀態應該是這樣,如果出現如下狀態
db2(192.168.0.32) master/AWAITING_RECOVERY. Roles:
可以執行mmm_control set_online db2開啟。
當我們的master01(185)資料庫宕機之後,在monitor上檢視日誌,
[[email protected]_monitor monitor]# tail -7f /var/log/mysql-mmm/mmm_mond.log
2016/10/17 17:06:18 WARN Check 'rep_backlog' on 'mysql_master01' is in unknown state! Message: UNKNOWN: Connect error (host = 172.18.3.185:3306, user = mmm_monitor)! Can't connect to MySQL server on '172.18.3.185' (111)
2016/10/17 17:06:20 WARN Check 'rep_threads' on 'mysql_master01' is in unknown state! Message: UNKNOWN: Connect error (host = 172.18.3.185:3306, user = mmm_monitor)! Can't connect to MySQL server on '172.18.3.185' (111)
2016/10/17 17:06:30 ERROR Check 'mysql' on 'mysql_master01' has failed for 10 seconds! Message: ERROR: Connect error (host = 172.18.3.185:3306, user = mmm_monitor)! Can't connect to MySQL server on '172.18.3.185' (111)
2016/10/17 17:06:31 FATAL State of host 'mysql_master01' changed from ONLINE to HARD_OFFLINE (ping: OK, mysql: not OK)
2016/10/17 17:06:31 INFO Removing all roles from host 'mysql_master01':
2016/10/17 17:06:31 INFO Removed role 'writer(172.18.3.189)' from host 'mysql_master01'
2016/10/17 17:06:31 INFO Orphaned role 'writer(172.18.3.189)' has been assigned to 'mysql_master02'
[[email protected]_monitor monitor]# mmm_control show
mysql_master01(172.18.3.185) master/HARD_OFFLINE. Roles:
mysql_master02(172.18.3.186) master/ONLINE. Roles: reader(172.18.3.190), writer(172.18.3.189)
mysql_slave01(172.18.3.187) slave/ONLINE. Roles: reader(172.18.3.191)
此時,write vip漂移到master02上,同時slave01也修改為同步master02的資料,當master01故障修好後,開啟master01,但是write vip依然不會漂移到master01,而且slave01也是依然slave於master02,因為vip一直在master02上。master01只是可以同步master02的資料,只有當master02宕機後,write vip才會漂移到master01.
相關推薦
mysql-mmm架構深度詳解
Mysql-mmm架構深度解讀: 主機名: ip: vip mysql_monitor 172.18.3.183 mysql_master01 172.18.3.185 172.18.3.18
MySQL 高可用叢集架構 MHA 詳解
MHA(Master HighAvailability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就職於Facebook公司)開發,是一套優秀的作為MySQL高可用性環境下故障切換和主從提升的高可用軟體。在MySQL故障
高併發架構系列:Redis快取和MySQL資料一致性方案詳解
一、需求起因 在高併發的業務場景下,資料庫大多數情況都是使用者併發訪問最薄弱的環節。所以,就需要使用redis做一個緩衝操作,讓請求先訪問到redis,而不是直接訪問MySQL等資料庫。 這個業務場景,主要是解決讀資料從Redis快取,一般都是按照下圖的流程來進行業務操作。 讀取快取步驟
MySQL之SELECT 語句詳解
限制 right ont 定義 過程 lar load avg sel 本文參考實驗樓的SELECT 語句詳解結合自己操作部分而寫成。 註意:大多數系統中,SQL語句都是不區分大小寫的,但是出於嚴謹和便於區分保留字和變量名,在書寫的時,保留字應大寫,而變量名應小寫。所謂的保
MySql表結構修改詳解
參數 詳解 增加 not des reat fault sign charset 修改表的語法=========================增加列[add 列名]=========================①alter table 表名 add 列名 列類型 列參
mysql數據庫 詳解 之 自學成才1
簡化 註意 可能 方法 after 字符型 專題 mar 建議 一、學習目錄 1.認識數據庫和mysql 2.mysql連接 3.入門語句 4.詳解列類型 5.增刪改查 INSERT INTO 表名(列1,…… 列n) VALUES(值 1,…… 值 n); *(列
mysql慢查詢功能詳解
mysql 慢查詢 優化有人的地方就有江湖,數據庫也是,sql優化這個問題,任重道遠,我們總是禁不住有爛sql。怎麽辦呢,還好各大數據庫都有相關爛sql的收集功能,而mysql的慢查詢收集也是異曲同工,配合分析sql的執行計劃,這個優化就有了搞頭了。開啟mysql慢查詢日誌1.查看當前慢查詢設置情況#查看慢查
MySQL配置文件mysql.ini參數詳解、MySQL性能優化
說明 select 磁盤 addition sock 硬盤 並發連接 查詢緩存 show my.ini(Linux系統下是my.cnf),當mysql服務器啟動時它會讀取這個文件,設置相關的運行環境參數。 my.ini分為兩塊:Client Section和Serv
15年資深架構師詳解:一個大型互聯網公司的微服務轉型實踐
微服務 架構 單片服務 微服務是一個比較大的話題,基於我的過往經歷,本文將以 Netflix 為例,分享一個大型互聯網公司如何從一個 Monolithic 的 APP 成功轉型到微服務。文章主要涉及微服務的產生歷史,應用場景,與單片服務區別,微服務帶來的技術、企業組織結構等方面挑戰,以及如何合
Dubbo架構設計詳解
交換 所有 關心 設計 系統 約定 cep 靜態 directory Dubbo架構設計詳解 Dubbo是Alibaba開源的分布式服務框架,它最大的特點是按照分層的方式來架構,使用這種方式可以使各個層之間解耦合(或者最大限度地松耦合)。從服務模型的角度來看,Dubbo采用
mysql explain執行計劃詳解
xtend ble 根據 order 其他 重復記錄 計劃 現在 中間 1)、id列數字越大越先執行,如果說數字一樣大,那麽就從上往下依次執行,id列為null的就表是這是一個結果集,不需要使用它來進行查詢。 2)、select_type列常見的有: A
Mysql加鎖過程詳解
插入記錄 控制 uniq null 詳細 server 讀者 index 理論知識 1、背景 MySQL/InnoDB的加鎖分析,一直是一個比較困難的話題。我在工作過程中,經常會有同事咨詢這方面的問題。同時,微博上也經常會收到MySQL鎖相關的私信,讓我幫助解決一些死
Mysql加鎖過程詳解(4)-select for update/lock in share mode 對事務並發性影響
per inno targe 允許 evel transacti 修改 not null warn select for update/lock in share mode 對事務並發性影響 事務並發性理解 事務並發性,粗略的理解就是單位時間內能夠執行的事務數量,常見的單
MySQL事務隔離級別詳解
默認 多少 bcf 結構 有一個 個數 ref tle eat 轉載自: MySQL事務隔離級別詳解 SQL標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低級別的隔離級一般支持更高的並發處理,並擁有更低的系統開銷。Read
「mysql優化專題」詳解引擎(InnoDB,MyISAM)的內存優化攻略?(9)
區域 order by 順序 重做日誌 浪費 變量 效率 攻略 分區 註意:以下都是在MySQL目錄下的my.ini文件中改寫(技術文)。 一、InnoDB內存優化 InnoDB用一塊內存區域做I/O緩存池,該緩存池不僅用來緩存InnoDB的索引塊,而且也用來緩存InnoD
Mysql加鎖過程詳解(9)-innodb下的記錄鎖,間隙鎖,next-key鎖
ans 唯一索引 crazy cimage -h insert tran 存在 gin Mysql加鎖過程詳解(1)-基本知識 Mysql加鎖過程詳解(2)-關於mysql 幻讀理解 Mysql加鎖過程詳解(3)-關於mysql 幻讀理解 Mysql加鎖過程詳解(4)-
Java動態代理 深度詳解
實現 接下來 href 新建 結構 str 如果 cat 子類 代理模式是設計模式中非常重要的一種類型,而設計模式又是編程中非常重要的知識點,特別是在業務系統的重構中,更是有舉足輕重的地位。代理模式從類型上來說,可以分為靜態代理和動態代理兩種類型。 今天我將用非常簡單易懂的
MySQL集群搭建詳解
F12 存在 protect 失敗 處理 大小 error 裏的 組件 概述MySQL Cluster 是MySQL 適合於分布式計算環境的高實用、可拓展、高性能、高冗余版本,其研發設計的初衷就是要滿足許多行業裏的最嚴酷應用要求,這些應用中經常要求數據庫運行的可靠性要達到9
MySQL show processlist;命令詳解
order by 檢查 否則 操作 locked 等待 inf 可能 增加 SHOW PROCESSLIST顯示哪些線程正在運行,如果您有SUPER權限,您可以看到所有線程,否則,您只能看到您自己的線程(也就是,與您正在使用的MySQL賬戶相關的線程),如果您不使用FULL
Python-Web框架之 - 利用SQLALchemy創建與數據庫MySQL的連接, 詳解用Flask時會遇到的一些大坑 !
mysqld 找到 兩個 數據庫增刪改查 紅色 -c 固定 web connector 經過這個小項目算是對Django與Flask這兩個web框架有了新的認識 , Django本身的輪子非常齊全 , 套路也很固定 , 新手在接觸Django框架時 , 不會陷入到處找輪子的