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

MySQL+keepalived主主復(fù)制完整部署流程

 更新時(shí)間:2025年12月18日 09:56:41   作者:離恨煙~  
MySQL主主復(fù)制結(jié)合Keepalived實(shí)現(xiàn)高可用性,是一種常見的數(shù)據(jù)庫(kù)架構(gòu)方案,這篇文章主要介紹了MySQL+keepalived主主復(fù)制的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

在現(xiàn)代信息化系統(tǒng)中,數(shù)據(jù)庫(kù)的高可用性與數(shù)據(jù)一致性是保障業(yè)務(wù)持續(xù)穩(wěn)定運(yùn)行的核心要素。MySQL 作為廣泛使用的關(guān)系型數(shù)據(jù)庫(kù),其單點(diǎn)故障可能導(dǎo)致業(yè)務(wù)中斷,而主主復(fù)制架構(gòu)結(jié)合 Keepalived 高可用方案,能夠有效提升系統(tǒng)的容錯(cuò)能力與負(fù)載均衡能力。

本文檔詳細(xì)闡述了基于 MySQL 主主復(fù)制與 Keepalived 實(shí)現(xiàn)高可用集群的完整部署流程,涵蓋 MySQL 的編譯安裝、主主復(fù)制配置以及 Keepalived 的安裝與監(jiān)控腳本設(shè)置。通過該方案,可實(shí)現(xiàn)兩臺(tái) MySQL 服務(wù)器互為主從,保證數(shù)據(jù)雙向同步,同時(shí)借助 Keepalived 提供的虛擬 IP(VIP)機(jī)制,實(shí)現(xiàn)故障自動(dòng)切換,確保數(shù)據(jù)庫(kù)服務(wù)的持續(xù)可用,適用于對(duì)數(shù)據(jù)一致性和服務(wù)連續(xù)性有較高要求的業(yè)務(wù)場(chǎng)景。        

1 MySQL編譯安裝

# 環(huán)境準(zhǔn)備
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
?
# 創(chuàng)建 MySQL 專用用戶
useradd -s /sbin/nologin mysql
?
# 源碼解壓與依賴
tar zxvf mysql-5.7.17.tar.gz -C /opt
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
mv /usr/local/boost_1_59_0 /usr/local/boost
?
# CMake 編譯配置
cd /opt/mysql-5.7.17/
------------------------------------------------------------------------------------------------------------
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8  \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=/usr/local/boost \
-DWITH_SYSTEMD=1
------------------------------------------------------------------------------------------------------------
# 編譯安裝
make -j 4 && make install
?? 注意:如果 CMake 出錯(cuò),解決后需刪除 `CMakeCache.txt` 再重新執(zhí)行
?
# 權(quán)限授權(quán)
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
?
# 環(huán)境變量設(shè)置
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
?
# 數(shù)據(jù)庫(kù)初始化
cd /usr/local/mysql/bin/
------------------------------------------------------------------------------------------------------------
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
------------------------------------------------------------------------------------------------------------
# 啟動(dòng)服務(wù)
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
netstat -anpt | grep 3306
?
# 賬號(hào)密碼設(shè)置
mysqladmin -u root -p password "123456"
?
# 登入
mysql -u root -p123456

2 配置主主復(fù)制

# 修改配置文件/etc/my.cnf
# 主1配置
vim /etc/my.cnf
------------------------------------------------------------------------------------------------------------
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
default-character-set=utf8
?
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 70
log_bin = /usr/local/mysql/data/master-bin
binlog_do_db = test                             # 僅同步test庫(kù)(可選)
binlog_ignore_db = mysql                        # 忽略mysql系統(tǒng)庫(kù)(可選)
relay_log = /usr/local/mysql/data/slave-bin
log_slave_updates = 1                           # 允許從庫(kù)日志被其他從庫(kù)同步(主主必需)
auto_increment_offset = 1
auto_increment_increment = 2
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
?
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash
------------------------------------------------------------------------------------------------------------
?
# 主2配置
vim /etc/my.cnf
------------------------------------------------------------------------------------------------------------
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
default-character-set=utf8
?
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 71
log_bin = /usr/local/mysql/data/master-bin
binlog_do_db = test                             # 僅同步test庫(kù)(可選)
binlog_ignore_db = mysql                        # 忽略mysql系統(tǒng)庫(kù)(可選)
relay_log = /usr/local/mysql/data/slave-bin
log_slave_updates = 1                           # 允許從庫(kù)日志被其他從庫(kù)同步(主主必需)
auto_increment_offset = 2
auto_increment_increment = 2
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
?
[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash
------------------------------------------------------------------------------------------------------------
# 重啟MySQL
systemctl restart mysqld
?
# 主1上創(chuàng)建賬號(hào)(允許主2訪問)
mysql -uroot -p123456
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.10.71' IDENTIFIED BY '123456';
flush privileges;
?
# 主2上創(chuàng)建賬號(hào)(允許主1訪問)
mysql -uroot -p123456
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.10.70' IDENTIFIED BY '123456';
flush privileges;
------------------------------------------------------------------------------------------------------------
?
# 配置主從同步
# 查看 主2 的二進(jìn)制日志狀態(tài)
show master status;
?
# 在主1上配置
CHANGE MASTER TO
MASTER_HOST='192.168.10.71',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=154;
?
# 啟動(dòng)從庫(kù)且查看同步狀態(tài)
start slave;
show slave status\G
------------------------------------------------------------------------------------------------------------
# 查看 主1 的二進(jìn)制日志狀態(tài)
show master status;
?
# 在主2上配置
CHANGE MASTER TO
MASTER_HOST='192.168.10.70',
MASTER_USER='slave',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=154;
?
# 啟動(dòng)從庫(kù)且查看同步狀態(tài)
start slave;
show slave status\G

3 安裝keepalived

# 安裝 Keepalived
yum install -y keepalived
============================================================================================================
# 配置主1的 Keepalived
vim /etc/keepalived/keepalived.conf
------------------------------------------------------------------------------------------------------------
global_defs {
    router_id MYSQL_HA          # 唯一標(biāo)識(shí)
}
?
# 監(jiān)控MySQL的腳本(關(guān)鍵:檢測(cè)MySQL是否存活)
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"  # 腳本路徑
    interval 2                  # 每2秒檢測(cè)一次
    weight -20                  # 檢測(cè)失敗時(shí)優(yōu)先級(jí)減20
}
?
vrrp_instance VI_1 {
    state MASTER                # 節(jié)點(diǎn)A為默認(rèn)主節(jié)點(diǎn)
    interface ens160            # 網(wǎng)卡名稱(根據(jù)實(shí)際情況修改)
    virtual_router_id 51        # 虛擬路由ID(兩節(jié)點(diǎn)需一致)
    priority 100                # 優(yōu)先級(jí)(節(jié)點(diǎn)A > 節(jié)點(diǎn)B)
    advert_int 1                # 心跳間隔1秒
?
    # 認(rèn)證配置
    authentication {
        auth_type PASS
        auth_pass 1111
    }
?
    # 虛擬IP(VIP)
    virtual_ipaddress {
        192.168.10.110/24
    }
?
    # 引用監(jiān)控腳本
    track_script {
        check_mysql
    }
}
------------------------------------------------------------------------------------------------------------
?
# 配置主2的 Keepalived
vim /etc/keepalived/keepalived.conf
------------------------------------------------------------------------------------------------------------
global_defs {
    router_id MYSQL_HA  # 唯一標(biāo)識(shí)
}
?
# 監(jiān)控MySQL的腳本(關(guān)鍵:檢測(cè)MySQL是否存活)
vrrp_script check_mysql {
    script "/etc/keepalived/check_mysql.sh"  # 腳本路徑
    interval 2                  # 每2秒檢測(cè)一次
    weight -20                  # 檢測(cè)失敗時(shí)優(yōu)先級(jí)減20
}
?
vrrp_instance VI_1 {
    state BACKUP                # 節(jié)點(diǎn)A為默認(rèn)主節(jié)點(diǎn)
    interface ens160            # 網(wǎng)卡名稱(根據(jù)實(shí)際情況修改)
    virtual_router_id 51        # 虛擬路由ID(兩節(jié)點(diǎn)需一致)
    priority 90                 # 優(yōu)先級(jí)(節(jié)點(diǎn)A > 節(jié)點(diǎn)B)
    advert_int 1                # 心跳間隔1秒
?
    # 認(rèn)證配置
    authentication {
        auth_type PASS
        auth_pass 1111
    }
?
    # 虛擬IP(VIP)
    virtual_ipaddress {
        192.168.10.110/24
    }
?
    # 引用監(jiān)控腳本
    track_script {
        check_mysql
    }
}
============================================================================================================
# 編寫檢測(cè)腳本(2個(gè)主都需要)
vim /etc/keepalived/check_mysql.sh
------------------------------------------------------------------------------------------------------------
# 在腳本開頭添加日志路徑
LOG_FILE="/var/log/check_mysql.log"
echo "[$(date +'%F %T')] 開始檢測(cè)MySQL" >> $LOG_FILE
?
# 在關(guān)鍵步驟添加日志
MYSQL_CMD="/usr/local/mysql/bin/mysql"
$MYSQL_CMD -uroot -p'123456' -e "exit" > /dev/null 2>&1
if [ $? -ne 0 ]; then
    echo "[$(date +'%F %T')] MySQL連接失敗,嘗試重啟" >> $LOG_FILE
    systemctl restart mysqld
    sleep 3
    $MYSQL_CMD -uroot -p'123456' -e "exit" > /dev/null 2>&1
    if [ $? -ne 0 ]; then
        echo "[$(date +'%F %T')] MySQL重啟失敗,停止Keepalived" >> $LOG_FILE
        systemctl stop keepalived
    fi
fi
---------------------------------------------------------------------------------------

4 測(cè)試

4.1 測(cè)試主主復(fù)制

主1插入數(shù)據(jù),主2同步成功

4.2 測(cè)試故障切換

1、MySQL和keepalived都是開啟的狀態(tài),將主1 MySQL停止后,看看VIP會(huì)不會(huì)漂移到 主2

5 總結(jié)

本文檔圍繞 MySQL 主主復(fù)制與 Keepalived 高可用集群搭建展開,完成了從環(huán)境準(zhǔn)備到最終高可用架構(gòu)部署的全流程說明:

  1. MySQL 編譯安裝:通過源碼編譯方式安裝 MySQL,完成環(huán)境依賴配置、用戶創(chuàng)建、編譯參數(shù)設(shè)置、權(quán)限分配及初始化操作,為后續(xù)主主復(fù)制奠定基礎(chǔ)。

  2. 主主復(fù)制配置:通過修改兩臺(tái)服務(wù)器的 MySQL 配置文件,設(shè)置不同的 server-id、自增偏移與步長(zhǎng),避免數(shù)據(jù)沖突;并通過創(chuàng)建復(fù)制賬號(hào)、配置主從關(guān)系,實(shí)現(xiàn)兩臺(tái) MySQL 服務(wù)器之間的雙向數(shù)據(jù)同步,確保數(shù)據(jù)一致性。

  3. Keepalived 部署:安裝 Keepalived 服務(wù),分別配置主從節(jié)點(diǎn)的 keepalived.conf 文件,定義虛擬路由 ID、虛擬 IP 及優(yōu)先級(jí);編寫 MySQL 監(jiān)控腳本,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)存活狀態(tài)的檢測(cè),當(dāng)主節(jié)點(diǎn)故障時(shí)自動(dòng)切換至從節(jié)點(diǎn),保障服務(wù)高可用。

通過上述步驟,構(gòu)建了一套兼具數(shù)據(jù)同步與故障自動(dòng)切換能力的 MySQL 高可用集群,可有效提升數(shù)據(jù)庫(kù)服務(wù)的穩(wěn)定性與可靠性。

到此這篇關(guān)于MySQL+keepalived主主復(fù)制完整的文章就介紹到這了,更多相關(guān)MySQL+keepalived主主復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

到此這篇關(guān)于MySQL+keepalived主主復(fù)制完整部署流程的文章就介紹到這了,更多相關(guān)MySQL+keepalived主主復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

乌兰浩特市| 黄大仙区| 铜梁县| 肥西县| 江油市| 宜宾市| 丰都县| 丰城市| 江源县| 平乡县| 德江县| 武夷山市| 蒙城县| 昭觉县| 徐州市| 中西区| 虞城县| 马公市| 葵青区| 靖西县| 温宿县| 丽水市| 玉龙| 古丈县| 五常市| 汕头市| 伊宁市| 江安县| 噶尔县| 朝阳区| 乐清市| 昌邑市| 革吉县| 留坝县| 门头沟区| 长丰县| 泗水县| 五大连池市| 炉霍县| 舟曲县| 阿拉善盟|