修改MySQL高可用模組接收自定義VIP引數

2021-09-20 22:18:15 字數 2796 閱讀 6734

但凡是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_stateeq"dead")

elsif ( $master_stateeq"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資料同步方案,具有高可用性,方便擴充套件,並且可以...