但凡是mysql dba肯定都聽說過mha個高可用方案,而且很多公司都是通過對mha做二次開發來實現mysql高可用的。如果mha不結合vip的話,每次主庫切換都需要程式修改連資料庫的配置,這樣比較麻煩。而採用mha+vip的方式時可以在主庫切換的過程中讓vip漂移到新主庫,省去了改資料庫配置這一過程。
公司以前是每一組主從複製集群都配置乙個manager結點,然後將vip和網路介面等資訊都寫死在master_ip_failover和master_ip_online_change指令碼中。當主從集群數量太多的情況下要維護的manager結點很多,管理起來很麻煩。
如何實現用乙個manager結點管理多個支援vip的mysql主從集群呢?有兩種實現方式:
很明顯,第1種方式太low了,需要維護大量的切換指令碼。那我們需要修改哪些模組呢?
看一下masterha_check_repl這段指令碼,可以看到檢測主從複製狀態的時候會呼叫mastermonitor模組。
1
2
3
4
5
6
7
8
$exit_code = mha::mastermonitor::main(
"--interactive=0"
,
"--check_only"
,
"--check_repl_health"
, @ar** );
if
( $exit_code == 0 )
else
1
2
3
4
5
6
7
8
9
if
( $master_state
eq
"dead"
)
elsif ( $master_state
eq
"alive"
)
else
mastermonitor.pm,masterrotate.pm,maste***ilover.pm這三個模組都是呼叫config.pm模組來讀取引數配置,所以我們只需要修改這幾個模組即可。
為了不平的網路環境,我在配置檔案加了這三個配置項:
netmask : vip的網路位
inte***ce :vip要繫結的網上
對應調整的**如下:
config.pm:
申明變數:
1
2
my @param_array =
qw/
hostname
給變數賦值:
1
2
3
4
5
6
7
8
9
10
11
12
if
}
$value = $param_arg->;
if
( !defined( $value ) ) = $default->;
}
$value = $param_arg->;
if
( !defined( $value ) ) = $default->;
}
mastermonitor.pm :
修改複製檢測時的命令:
1
;
mastermonitor.pm :
修改停原主庫寫入的命令:
1
;
修改允許在新主庫寫入的命令:
1
;
maste***ilover.pm:
修改禁用原從庫的vip命令:
1
;
修改啟用原從庫vip的命令:
1
;
nginx實現mysql高可用 MySQL高可用
3,nfs高可用,keepalive使用指令碼 自己編寫 vrrp script 通過指令碼返回的狀態 根據keepalive自定 判斷drbd的主從,然後飄動vip,同時再觸發指令碼,切換drbd的主從關係。drbd不能自動切換 4 redis一主兩從,使用哨兵來實現主從切換。配置哨兵的檔案,切換...
canal與mysql高可用 CANAL 高可用
canal 是阿里巴巴mysql資料庫binlog的增量訂閱 消費元件,你可以從這兒了解它.canal 的常見使用場景之一就是資料同步,例如我們使用 canal 就是為了把 mysql 的資料同步到 elasticsearch 中.使用 canal 做資料同步的時候無疑會涉及到三個部分 資料來源 m...
MySQL高可用 PXC簡介
pxc簡介 galera產品是以galera cluster方式為mysql提高高可用集群解決方案的。galera cluster就是整合了galera外掛程式的mysql集群。galera replication是codership提供的mysql資料同步方案,具有高可用性,方便擴充套件,並且可以...