最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過KeepAlived搭建MySQL雙主模式的Mysql集群圖文教程

 更新時間:2026年04月23日 08:54:46   作者:maomao大哥闖天下  
在構(gòu)建高可用的MySQL集群時,Keepalived是一個常用的工具,它可以實現(xiàn)雙主模式,確保在主節(jié)點發(fā)生故障時,備節(jié)點可以接替其功能,保證系統(tǒng)的連續(xù)性和可用性,這篇文章主要介紹了通過KeepAlived搭建MySQL雙主模式的Mysql集群的相關(guān)資料,需要的朋友可以參考下

MySQL主主互備模式架構(gòu)圖

主要設(shè)計思路是通過MySQL Replication技術(shù)將兩臺MySQL Server互相將對方作為自己的Master,自己又同時作為對方的Slave來進(jìn)行復(fù)制。這樣就實現(xiàn)了高可用構(gòu)架中的數(shù)據(jù)同步功能,同時,將采用KeepAlived來實現(xiàn)Mysql的自動failovero在這個構(gòu)架中,雖然兩臺MySQL Server互為主從,但同一時刻只有一個MySQL Server可讀寫,另一個MysQL Server只能進(jìn)行讀操作,這樣可保證數(shù)據(jù)的一致性。

MySQL主主互備環(huán)境說明

操作系統(tǒng):redhat
MySQL : mysql8.0.42
Keepalived : Keepalived2.2.8
兩臺主機(jī):172.16.213.181(DB1)、172.16.213.189 ( DB2 )

無損半同步復(fù)制—搶占模式過程

配置過程

  1. 配置之前關(guān)閉防火墻和selinux。也可放行
  2. 在進(jìn)行互相備份的時候,需要將數(shù)據(jù)庫保持一致

        如果DB1上已經(jīng)有mysql數(shù)據(jù),那么在執(zhí)行主主互備之前,需要將DB1和DB2上兩個mysql的數(shù)據(jù)保持同步。首先在DB1上備份mysql數(shù)據(jù),執(zhí)行如下SQL語句:

mysql>FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

        不要退出這個終端,否則這個鎖就失效了。在不退出終端的情況下,再開啟一個終端直接打包壓縮數(shù)據(jù)文件。這里通過打包mysql文件來完成數(shù)據(jù)的備份,操作過程如下:

[root@DB1 ~]# cd /usr/local/mysql
[root@DB1 mysql]# tar zcvf data.tar.gz data
[root@DB1 mysql]# scp data.tar.gz DB2:/usr/local/mysql

        將數(shù)據(jù)傳輸?shù)紻B2后,依次重啟DB1和DB2上面的mysql。

        注意,兩個庫如果是直接拷貝而來,需要修改任意一個庫的UUID, UUID在mysql的data目錄下對應(yīng)的auto.cnf文件中。兩個庫的UUID不能相同。

  • 修改mysql的配置文件為無損半同步復(fù)制(yum安裝的方式,配置文件在/etc/my.cnf)
  • 主節(jié)點服務(wù)器DB1配置如下:
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
gtid_mode=ON  #方便維護(hù)
enforce_gtid_consistency=ON  #確保復(fù)制正確性
server-id = 1   #節(jié)點的標(biāo)識
log-bin=mysql-bin   #啟用mysql-bin日志文件
relay-log = mysql-relay-bin    #啟用中繼日志文件
replicate-wild-ignore-table=mysql.%  #忽略備份系統(tǒng)庫
replicate-wild-ignore-table=test.%		#忽略備份表
replicate-wild-ignore-table=information_schema.%  #忽略備份表
plugin_load = "rpl_semi_sync_source=semisync_source.so;rpl_semi_sync_replica=semisync_replica.so"  #加載指定的插件
rpl_semi_sync_source_enabled=1  #開啟插件
rpl_semi_sync_replica_enabled=1  #開啟插件
log_replica_updates=ON
  • 備節(jié)點服務(wù)器DB2配置如下:
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
gtid_mode=ON  #方便維護(hù)
enforce_gtid_consistency=ON  #確保復(fù)制正確性
server-id = 2   #節(jié)點的標(biāo)識
log-bin=mysql-bin   #啟用mysql-bin日志文件
relay-log = mysql-relay-bin    #啟用中繼日志文件
replicate-wild-ignore-table=mysql.%  #忽略備份系統(tǒng)庫
replicate-wild-ignore-table=test.%		#忽略備份表
replicate-wild-ignore-table=information_schema.%  #忽略備份表
plugin_load = "rpl_semi_sync_source=semisync_source.so;rpl_semi_sync_replica=semisync_replica.so"  #加載指定的插件
rpl_semi_sync_source_enabled=1  #開啟插件
rpl_semi_sync_replica_enabled=1  #開啟插件
log_replica_updates=ON
  • 主節(jié)點創(chuàng)建數(shù)據(jù)庫備份用戶(修改為自己的網(wǎng)段)
CREATE USER 'repl_user'@'192.168.123.%' IDENTIFIED WITH mysql_native_password BY 'Fe216474@';
  • 主節(jié)點執(zhí)行授權(quán)(修改為自己的網(wǎng)段)
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'192.168.123.%';
  • 備用服務(wù)器運行實現(xiàn)主從復(fù)制的腳本(在備用節(jié)點的mysql中執(zhí)行,記得修改為自己配置的信息)
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.168.123.129',  #主節(jié)點配置ip
SOURCE_USER = 'repl_user',        #主節(jié)點創(chuàng)建的用戶
SOURCE_PASSWORD = 'Fe216474@',    #主節(jié)點創(chuàng)建的密碼
SOURCE_AUTO_POSITION = 1;
  • 啟動備用服務(wù)器DB2從庫并查看是否啟動成功
START SLAVE;
mysql> SHOW SLAVE STATUS\G;

當(dāng)如下顯示則表示開啟從主復(fù)制了。現(xiàn)在是DB2->DB1的復(fù)制

  • 主到從的復(fù)制。從庫執(zhí)行下面命令,創(chuàng)建復(fù)制用戶,和進(jìn)行授權(quán)(修改為自己的信息)
CREATE USER 'repl_user'@'192.168.123.%' IDENTIFIED WITH mysql_native_password BY 'Fe216474@';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl_user'@'192.168.123.%';
  • 執(zhí)行腳本實現(xiàn)主復(fù)制從
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = '192.168.123.100',#從節(jié)點的ip
SOURCE_USER = 'repl_user',    #從節(jié)點創(chuàng)建的用戶
SOURCE_PASSWORD = 'Fe216474@',
SOURCE_AUTO_POSITION = 1;

  • 通過yum的方式安裝keepalived
yum install keepalived

進(jìn)入配置文件目錄下

cd /etc/keepalived/
  • 需要檢測mysql的狀態(tài)所以需要先導(dǎo)入腳本check_slave.pl(記得修改密碼信息,配置)
#!/usr/bin/perl -w
use DBI;
use DBD::mysql;
# CONFIG VARIABLES
$SBM = 120;
$db = "mysql";
$host = $ARGV[0];
$port = 3306;
$user = "root";
$pw = "123456";
# SQL query
$query = "show slave status";
$dbh = DBI->connect("DBI:mysql:$db:$host:$port", $user, $pw, { RaiseError => 0,PrintError => 0 });
if (!defined($dbh)) {
    exit 1;
}
$sqlQuery = $dbh->prepare($query);
$sqlQuery->execute;
$Slave_IO_Running =  "";
$Slave_SQL_Running = "";
$Seconds_Behind_Master = "";
while (my $ref = $sqlQuery->fetchrow_hashref()) {
    $Slave_IO_Running = $ref->{'Slave_IO_Running'};
    $Slave_SQL_Running = $ref->{'Slave_SQL_Running'};
    $Seconds_Behind_Master = $ref->{'Seconds_Behind_Master'};
}
$sqlQuery->finish;
$dbh->disconnect();
if ( $Slave_IO_Running eq "No" || $Slave_SQL_Running eq "No" ) {
    exit 1;
} else {
    if ( $Seconds_Behind_Master > $SBM ) {
        exit 1;
    } else {
        exit 0;
    }
}

緊接著修改keepalived.conf配置文件,記得更換為自己的網(wǎng)卡(通過ifconfig查看)

  • 從節(jié)點的keepalive.conf配置:
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script check_httpd {
    script "killall -0 httpd"
    interval 2
    }
vrrp_instance HA_1 {
    state BACKUP  #主節(jié)點是MASTER
    interface ens33  #記得更換為自己的網(wǎng)卡ifconfig查看
    virtual_router_id 80
    priority 80		#主節(jié)點的權(quán)重需要設(shè)置高一些
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass qwaszx
    }
    notify_master "/etc/keepalived/master.sh "
    notify_backup "/etc/keepalived/backup.sh"
    notify_fault "/etc/keepalived/fault.sh"
    track_script {
    check_httpd
    }
    virtual_ipaddress {
        192.168.123.80/24 dev ens33 #記得更換為自己的網(wǎng)卡ifconfig查看
    }
}
  • 主節(jié)點的keepalive.conf配置:
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script check_httpd {
    script "killall -0 httpd"
    interval 2
    }
vrrp_instance HA_1 {
    state MASTER  #
    interface ens33 #記得更換為自己的網(wǎng)卡ifconfig查看
    virtual_router_id 80
    priority 100		#主節(jié)點的權(quán)重需要設(shè)置高一些
    advert_int 2
    authentication {
        auth_type PASS
        auth_pass qwaszx
    }
    notify_master "/etc/keepalived/master.sh "
    notify_backup "/etc/keepalived/backup.sh"
    notify_fault "/etc/keepalived/fault.sh"
    track_script {
    check_httpd
    }
    virtual_ipaddress {
        192.168.123.80/24 dev ens33 #記得更換為自己的網(wǎng)卡ifconfig查看
    }
}

驗證數(shù)據(jù)備份

  • 在從庫創(chuàng)建數(shù)據(jù)庫

  • 主庫查看是否存在

ok了,完美實現(xiàn)主從同步

  • 驗證數(shù)據(jù)庫的備份轉(zhuǎn)移

主庫執(zhí)行代碼systemctl stop mysqld.service ,停止數(shù)據(jù)庫的服務(wù)

從庫查看日志信息

  • 遠(yuǎn)程登錄mysql,驗證故障切換

如果你要創(chuàng)建用戶,記得關(guān)閉/etc/my.cnf中的下圖所示,備份創(chuàng)建用戶:

當(dāng)吧DB1斷開后:

[root@localhost keepalived]# systemctl stop mysqld.service 

遠(yuǎn)端查詢數(shù)據(jù)庫顯示:

自動切換完畢

無損半同步復(fù)制—不搶占模式過程

和上述搶占模式配置相同,只是根據(jù)優(yōu)先級進(jìn)行選舉主庫從庫,只需要改兩個地方如下所示:

  • keepalive.conf配置文件都改為BACKUP,然后加上nopreempt

  • 重啟keepalived服務(wù)
systemctl restart keepalived

總結(jié)

到此這篇關(guān)于通過KeepAlived搭建MySQL雙主模式的Mysql集群的文章就介紹到這了,更多相關(guān)KeepAlived搭建Mysql集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

河北省| 浮山县| 察雅县| 勃利县| 新田县| 扶风县| 渭源县| 新营市| 章丘市| 天台县| 香港 | 昭觉县| 葵青区| 米泉市| 五华县| 绥芬河市| 新余市| 汽车| 遵化市| 高平市| 宜都市| 神农架林区| 南澳县| 同仁县| 固始县| 姜堰市| 偃师市| 柯坪县| 新巴尔虎右旗| 泾川县| 大埔区| 健康| 阿拉善盟| 米泉市| 英吉沙县| 云浮市| 黑水县| 博罗县| 桂阳县| 娄烦县| 阳泉市|