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

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

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

前言

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

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

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

步驟

1. 安裝環(huán)境

安裝Docker和MGR 這里略過

2. 重新制作鏡像

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

docker pull osixia/keepalived:2.0.20

創(chuàng)建臨時容器

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

登錄進臨時容器

docker exec -it keepalivedtest /bin/bash

然后安裝mysql客戶端

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

從零時容器生成一個新的鏡像:mgr_keepalived

docker commit keepalivedtest  mgr_keepalived:2.0.20

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

 docker save -o mgr_keepalived2.tar mgr_keepalived:2.0.20

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

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

docker load -i mgr_keepalived2.tar

4. 創(chuàng)建容器

這里假設(shè)3臺服務(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é)點
192.168.1.247/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh從節(jié)點
192.168.1.248/apps/keepalived/keepalived.conf /apps/keepalived/mysql_master_check.sh從節(jié)點

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

#!/bin/bash

# 替換以下變量為你的實際MySQL用戶、密碼和端口
MYSQL_USER="rpl_user"
MYSQL_PASS="請?zhí)顚戀~號密碼"
MYSQL_PORT="請?zhí)顚懚丝谔?
MYSQL_HOST="請?zhí)顚懝?jié)點主機IP"

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

# 檢查當(dāng)前節(jié)點是否為主節(jié)點
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é)點為只讀狀態(tài),判定為從節(jié)點"
    exit 1
fi

# 獲取當(dāng)前主機名并存儲在變量中
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é)點是從節(jié)點"
    exit 1
else
    echo "當(dāng)前節(jié)點是主節(jié)點"
    exit 0
fi

各個節(jié)點上的文件注意
MYSQL_USER=“rpl_user”
MYSQL_PASS=“請?zhí)顚戀~號密碼”
MYSQL_PORT=“請?zhí)顚懚丝谔?rdquo;
MYSQL_HOST=“請?zhí)顚懝?jié)點主機IP”
這幾個變量的修改!

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

另外 MYSQL_USER 用戶必須具有訪問 performance_schema.replication_group_members 的權(quán)限,因為光靠
"SHOW GLOBAL VARIABLES LIKE 'read_only';" 無法判定當(dāng)前MySQL節(jié)點是否為主節(jié)點

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
    }
}

主要是如下幾個變量要注意:

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

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

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

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

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

  • priority 優(yōu)先級,每一個節(jié)點上不一樣

  • virtual_ipaddress 虛擬ip

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

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

3臺節(jié)點服務(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é)點服務(wù)器的網(wǎng)卡名稱,如果不想開啟debug模式去掉--loglevel debug

查看docker日志一般會有如下信息:

...
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ù)庫。

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

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

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

相關(guān)文章

  • docker安裝tomcat8的實現(xiàn)方法

    docker安裝tomcat8的實現(xiàn)方法

    這篇文章主要介紹了docker安裝tomcat8的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Docker?daemon?配置和故障排除過程

    Docker?daemon?配置和故障排除過程

    這篇文章主要介紹了Docker?daemon?配置和故障排除過程,具有很的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • docker容器的四種端口映射演示分析

    docker容器的四種端口映射演示分析

    這篇文章主要為大家介紹了docker容器的四種端口映射演示分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Docker報錯Operation?not?permitted問題的解決方法

    Docker報錯Operation?not?permitted問題的解決方法

    剛開始接觸Docker的朋友經(jīng)常會遇到問題,下面這篇文章主要給大家介紹了關(guān)于Docker報錯Operation?not?permitted問題的解決方法,需要的朋友可以參考下
    2023-02-02
  • docker靈活的構(gòu)建PHP環(huán)境的實現(xiàn)

    docker靈活的構(gòu)建PHP環(huán)境的實現(xiàn)

    這篇文章主要介紹了docker靈活的構(gòu)建PHP環(huán)境的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解docker容器分配靜態(tài)IP

    詳解docker容器分配靜態(tài)IP

    這篇文章主要介紹了詳解docker容器分配靜態(tài)IP,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • 關(guān)于為Windows?Service?2019?使用?Docker的問題

    關(guān)于為Windows?Service?2019?使用?Docker的問題

    最近收到領(lǐng)導(dǎo)通知,甲方需要將原來的服務(wù)器遷移到新的服務(wù)器,原來的服務(wù)器上安裝了很多的服務(wù),每次重啟之后總是有很多的問題需要人工大量的進行干預(yù),今天小編通過本文給大家介紹下Windows?Service?2019?使用?Docker的問題,需要的朋友參考下吧
    2022-05-05
  • 在Docker Compose中獲取最新鏡像的多種方法總結(jié)

    在Docker Compose中獲取最新鏡像的多種方法總結(jié)

    Docker 鏡像是 Docker 容器的基礎(chǔ),鏡像包含了應(yīng)用程序所需的所有文件和依賴,Docker-Compose 默認(rèn)不會自動拉取最新的鏡像版本,這可能會導(dǎo)致使用過時的鏡像,從而錯過重要的更新,為了確保 Docker-Compose 始終使用最新的鏡像,我們可以采用多種方法,以下將詳細(xì)介紹這些方法
    2024-08-08
  • 基于Docker的幾種常用CentOS7鏡像小結(jié)

    基于Docker的幾種常用CentOS7鏡像小結(jié)

    本文主要介紹了使用 Docker 來制作CentOS 環(huán)境的鏡像,并上傳到阿里云的 Docker 鏡像倉庫,具有一定的參考價值,感興趣的可以了解一下
    2021-11-11
  • 如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像

    如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像

    這篇文章主要介紹了如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

韶关市| 苗栗市| 安岳县| 凤冈县| 金沙县| 新密市| 崇左市| 锡林浩特市| 邓州市| 巴彦县| 温宿县| 汝阳县| 固镇县| 建瓯市| 兴化市| 衢州市| 浠水县| 平阴县| 南江县| 册亨县| 历史| 龙州县| 措美县| 娱乐| 黑龙江省| 南宫市| 长丰县| 江孜县| 桑植县| 星座| 阳曲县| 司法| 临湘市| 蓬莱市| 富川| 论坛| 田阳县| 遂宁市| 灵丘县| 永兴县| 左权县|