亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Docker方式創(chuàng)建keepalived連接MGR集群

 更新時(shí)間:2024年10月10日 10:33:02   作者:小時(shí)候的陽(yáng)光  
本文介紹了通過(guò)Docker方式創(chuàng)建keepalived代理訪(fǎng)問(wèn)MGR集群的詳細(xì)步驟,包括重新制作鏡像、導(dǎo)入新鏡像、創(chuàng)建容器等操作,并說(shuō)明了配置文件的關(guān)鍵參數(shù),通過(guò)這種方式,可以避免手動(dòng)修改數(shù)據(jù)庫(kù)連接地址,實(shí)現(xiàn)主節(jié)點(diǎn)故障時(shí)的自動(dòng)故障轉(zhuǎn)移

前言

假設(shè)已經(jīng)搭建了MySQL8的MGR集群方式(一主兩從)。

MGR本身有故障轉(zhuǎn)移重新選舉新的主節(jié)點(diǎn)功能,但是上游的應(yīng)用程序需要自己手動(dòng)修改數(shù)據(jù)庫(kù)連接地址重新指向主節(jié)點(diǎn)。

為了了能不用手動(dòng)方式切換主節(jié)點(diǎn)需要中間代理訪(fǎng)問(wèn)程序,提供的方案有很多例如 nginx、keepalived、proxysql等,這里我們先選擇使用keepalived,后期使用proxysql代理。

步驟

1. 安裝環(huán)境

安裝Docker和MGR 這里略過(guò)

2. 重新制作鏡像

登錄任意一個(gè)節(jié)點(diǎn)服務(wù)器,下載原始鏡像

docker pull osixia/keepalived:2.0.20

創(chuàng)建臨時(shí)容器

docker run --name keepalivedtest --cap-add=NET_ADMIN --cap-add=NET_BROADCAST --cap-add=NET_RAW -e KEEPALIVED_INTERFACE=enp6s0 --net=host -d osixia/keepalived:2.0.20

登錄進(jìn)臨時(shí)容器

docker exec -it keepalivedtest /bin/bash

然后安裝mysql客戶(hù)端

apk add mysql mysql-client
...稍等片刻
...
安裝完成后
退出容器 exit

從零時(shí)容器生成一個(gè)新的鏡像:mgr_keepalived

docker commit keepalivedtest  mgr_keepalived:2.0.20

導(dǎo)出鏡像文件,上傳其他MGR節(jié)點(diǎn)服務(wù)器

 docker save -o mgr_keepalived2.tar mgr_keepalived:2.0.20

3. 導(dǎo)入新鏡像

在每一個(gè)MGR節(jié)點(diǎn)服務(wù)器上導(dǎo)入鏡像

docker load -i mgr_keepalived2.tar

4. 創(chuàng)建容器

這里假設(shè)3臺(tái)服務(wù)器環(huán)境如下:

服務(wù)器文件路徑備注
192.168.1.246/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh記得sh文件賦予可執(zhí)行權(quán)限,當(dāng)前MGR主節(jié)點(diǎn)
192.168.1.247/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh從節(jié)點(diǎn)
192.168.1.248/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh從節(jié)點(diǎn)

各服務(wù)器文件路徑都一致, mysql_master_check.sh 腳本文件內(nèi)容如下:

#!/bin/bash

# 替換以下變量為你的實(shí)際MySQL用戶(hù)、密碼和端口
MYSQL_USER="rpl_user"
MYSQL_PASS="請(qǐng)?zhí)顚?xiě)賬號(hào)密碼"
MYSQL_PORT="請(qǐng)?zhí)顚?xiě)端口號(hào)"
MYSQL_HOST="請(qǐng)?zhí)顚?xiě)節(jié)點(diǎn)主機(jī)IP"

# 檢查MySQL服務(wù)是否運(yùn)行
if nc -z "$MYSQL_HOST" "$MYSQL_PORT"; then
    echo "MySQL 服務(wù)在 $MYSQL_HOST:$MYSQL_PORT 上正在運(yùn)行"
else
    echo "MySQL 服務(wù)在 $MYSQL_HOST:$MYSQL_PORT 上未運(yùn)行"
    exit 1
fi

# 檢查當(dāng)前節(jié)點(diǎn)是否為主節(jié)點(diǎn)
IS_READONLY=$(mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" -P"$MYSQL_PORT" -h"$MYSQL_HOST" -e "SHOW GLOBAL VARIABLES LIKE 'read_only';" | grep -c "ON")

if [[ $IS_READONLY -ne 0 ]]; then
    echo "當(dāng)前節(jié)點(diǎn)為只讀狀態(tài),判定為從節(jié)點(diǎn)"
    exit 1
fi

# 獲取當(dāng)前主機(jī)名并存儲(chǔ)在變量中
CURRENT_HOST=$(hostname)

IS_MASTER=$(mysql -u"$MYSQL_USER" -p"$MYSQL_PASS" -P"$MYSQL_PORT" -h"$MYSQL_HOST" -e "
SELECT COUNT(1)
FROM performance_schema.replication_group_members
WHERE MEMBER_HOST ='$CURRENT_HOST'
AND MEMBER_STATE = 'ONLINE'
AND MEMBER_ROLE='PRIMARY';" | tail -n 1)

if [[ $IS_MASTER -eq 0 ]]; then
    echo "當(dāng)前節(jié)點(diǎn)是從節(jié)點(diǎn)"
    exit 1
else
    echo "當(dāng)前節(jié)點(diǎn)是主節(jié)點(diǎn)"
    exit 0
fi

各個(gè)節(jié)點(diǎn)上的文件注意
MYSQL_USER=“rpl_user”
MYSQL_PASS=“請(qǐng)?zhí)顚?xiě)賬號(hào)密碼”
MYSQL_PORT=“請(qǐng)?zhí)顚?xiě)端口號(hào)”
MYSQL_HOST=“請(qǐng)?zhí)顚?xiě)節(jié)點(diǎn)主機(jī)IP”
這幾個(gè)變量的修改!

另外用戶(hù) rpl_user是用于MGR復(fù)制用的,也可以填寫(xiě)其他的用戶(hù)名,但是用戶(hù)的密碼認(rèn)證方式必須是之前老式的 mysql_native_password ,因?yàn)殓R像里面的mysql客戶(hù)端暫不支持MySQL8默認(rèn)的密碼認(rèn)證方式。

另外 MYSQL_USER 用戶(hù)必須具有訪(fǎng)問(wèn) performance_schema.replication_group_members 的權(quán)限,因?yàn)楣饪?br />"SHOW GLOBAL VARIABLES LIKE 'read_only';" 無(wú)法判定當(dāng)前MySQL節(jié)點(diǎn)是否為主節(jié)點(diǎn)

keepalived.conf 文件內(nèi)容大致如下:

vrrp_script chk_mysql {
    script "/usr/local/bin/mysql_master_check.sh"
    interval 2
    weight -5
    fall 2
    rise 1
}

vrrp_instance VI_1 {
    state MASTER
    interface enp6s0
    virtual_router_id 51
    priority 101
    advert_int 1  
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.110
    }
    track_script {
        chk_mysql
    }
}

主要是如下幾個(gè)變量要注意:

  • interval 2 每隔2秒執(zhí)行一次

  • weight -5 腳本結(jié)果導(dǎo)致的優(yōu)先級(jí)變更,檢測(cè)失?。?code>腳本返回非0)則優(yōu)先級(jí)減5

  • fall 2 #檢測(cè)連續(xù)2次失敗才算確定是真失敗。會(huì)用weight減少優(yōu)先級(jí)(1-255之間) 默認(rèn)值為 3

  • rise 1 #檢測(cè)1次成功就算成功。但不修改優(yōu)先級(jí) 默認(rèn)值為 2

  • interface 當(dāng)前節(jié)點(diǎn)服務(wù)器的網(wǎng)卡名稱(chēng)

  • priority 優(yōu)先級(jí),每一個(gè)節(jié)點(diǎn)上不一樣

  • virtual_ipaddress 虛擬ip

  • virtual_router_id 共享相同虛擬IP的節(jié)點(diǎn)上該參數(shù)值必須一樣 ,
    keepalived可以代理多個(gè)虛擬IP,每一個(gè)虛擬IP對(duì)應(yīng)的virtual_router_id值不可一樣。

  • state 指定當(dāng)前keepalived的初始狀態(tài),這個(gè)可用是 MASTER 或者 BACKUP ,如果是BACKUP 則作為從節(jié)點(diǎn),但是這個(gè)值會(huì)根據(jù)監(jiān)控腳本運(yùn)行狀態(tài)改變優(yōu)先級(jí)從而導(dǎo)致?tīng)頜ASTER /BACKUP 態(tài)切換

3臺(tái)節(jié)點(diǎn)服務(wù)器上創(chuàng)建容器如下:

docker run -d --name mgr8keepalived \
	--cap-add=NET_ADMIN \
	--cap-add=NET_BROADCAST \
	--cap-add=NET_RAW \
	--net=host \
	-e KEEPALIVED_INTERFACE=enp6s0 \
	-v /apps/keepalived/keepalived.conf:/container/service/keepalived/assets/keepalived.conf \
	-v /apps/keepalived/mysql_master_check.sh:/usr/local/bin/mysql_master_check.sh \
	mgr_keepalived:2.0.20 --loglevel debug --copy-service

變量 KEEPALIVED_INTERFACE 是指當(dāng)前節(jié)點(diǎn)服務(wù)器的網(wǎng)卡名稱(chēng),如果不想開(kāi)啟debug模式去掉--loglevel debug

查看docker日志一般會(huì)有如下信息:

...
Wed Jan 31 09:32:53 2024:    Reset ARP config counter 0
Wed Jan 31 09:32:53 2024:    Original arp_ignore 0
Wed Jan 31 09:32:53 2024:    Original arp_filter 0
Wed Jan 31 09:32:53 2024:    Original promote_secondaries 1
Wed Jan 31 09:32:53 2024:    Reset promote_secondaries counter 0
Wed Jan 31 09:32:53 2024:    Tracking VRRP instances = 0
Wed Jan 31 09:32:53 2024: (VI_1) Entering BACKUP STATE (init)
Wed Jan 31 09:32:53 2024: VRRP sockpool: [ifindex(2), family(IPv4), proto(112), unicast(0), fd(11,12)]
Wed Jan 31 09:32:53 2024: VRRP_Script(chk_mysql) succeeded
Wed Jan 31 09:32:53 2024: (VI_1) Changing effective priority from 101 to 103
Wed Jan 31 09:32:57 2024: (VI_1) Receive advertisement timeout
Wed Jan 31 09:32:57 2024: (VI_1) Entering MASTER STATE
Wed Jan 31 09:32:57 2024: (VI_1) setting VIPs.
Wed Jan 31 09:32:57 2024: Sending gratuitous ARP on enp6s0 for 192.168.1.110
Wed Jan 31 09:32:57 2024: (VI_1) Sending/queueing gratuitous ARPs on enp6s0 for 192.168.1.110
Wed Jan 31 09:32:57 2024: Sending gratuitous ARP on enp6s0 for 192.168.1.110
Wed Jan 31 09:32:57 2024: Sending gratuitous ARP on enp6s0 for 192.168.1.110
...

可以使用虛擬IP 192.168.1.110 連上看下是否可以操作數(shù)據(jù)庫(kù)。

可以關(guān)閉一個(gè)MySQL實(shí)例看下keepalived的效果,是否還正常使用,虛擬IP此時(shí)是否浮動(dòng)到新的主節(jié)點(diǎn)服務(wù)器上了。

注意:關(guān)閉一個(gè)MySQL實(shí)例后重新啟動(dòng),可能它不會(huì)自動(dòng)加入集群,需要手動(dòng)執(zhí)行 START GROUP_REPLICATION 重新加入集群。

到此這篇關(guān)于Docker方式創(chuàng)建keepalived連接MGR集群的文章就介紹到這了,更多相關(guān)docker mgr集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何通過(guò)Dockerfile 創(chuàng)建 kali-novnc

    如何通過(guò)Dockerfile 創(chuàng)建 kali-novnc

    這篇文章主要介紹了如何通過(guò)Dockerfile 創(chuàng)建 kali-novnc,在Dockerfile所在目錄運(yùn)行相關(guān)命令操作即可完成,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Docker鏡像存儲(chǔ)overlayfs的使用

    Docker鏡像存儲(chǔ)overlayfs的使用

    這篇文章主要介紹了Docker鏡像存儲(chǔ)overlayfs的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Docker 教程之存出和載入鏡像,移除及鏡像實(shí)現(xiàn)原理

    Docker 教程之存出和載入鏡像,移除及鏡像實(shí)現(xiàn)原理

    這篇文章主要介紹了Docker 教程之存出和載入鏡像,移除及鏡像實(shí)現(xiàn)原理的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • centos搭建部署docker環(huán)境的詳細(xì)步驟

    centos搭建部署docker環(huán)境的詳細(xì)步驟

    Docker 將程序與程序的運(yùn)行環(huán)境打包在一起,從而避免了復(fù)雜的環(huán)境配置,下面這篇文章主要給大家介紹了關(guān)于centos搭建部署docker環(huán)境的詳細(xì)步驟,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • docker容器下配置jupyter notebook的操作

    docker容器下配置jupyter notebook的操作

    這篇文章主要介紹了docker容器下配置jupyter notebook的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03
  • docker的基本使用及使如何用Docker 運(yùn)行D435i

    docker的基本使用及使如何用Docker 運(yùn)行D435i

    這篇文章主要介紹了docker的基本使用及使如何用Docker 運(yùn)行D435i,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 如何使用docker部署前端應(yīng)用的方法步驟

    如何使用docker部署前端應(yīng)用的方法步驟

    這篇文章主要介紹了如何使用docker部署前端應(yīng)用的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • Docker部署Mysql8的實(shí)現(xiàn)步驟

    Docker部署Mysql8的實(shí)現(xiàn)步驟

    本文主要介紹了Docker部署Mysql8的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 使用ssh連接docker服務(wù)器的方法

    使用ssh連接docker服務(wù)器的方法

    這篇文章主要介紹了使用ssh連接docker服務(wù)器的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • docker安裝elasticsearch和kibana的方法步驟

    docker安裝elasticsearch和kibana的方法步驟

    這篇文章主要介紹了docker安裝elasticsearch和kibana的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論