国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用Docker Swarm部署RabbitMQ+HAProxy高可用集群(三節(jié)點(diǎn)-鏡像模式)

這篇具有很好參考價(jià)值的文章主要介紹了使用Docker Swarm部署RabbitMQ+HAProxy高可用集群(三節(jié)點(diǎn)-鏡像模式)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1. 部署規(guī)劃

當(dāng)前規(guī)劃中,只啟動一個HAProxy服務(wù),主要用來做RabbitMQ節(jié)點(diǎn)的負(fù)載均衡和代理,但是HAProxy可能會出現(xiàn)單點(diǎn)故障,后續(xù)需要啟動多個HAProxy節(jié)點(diǎn),然后結(jié)合Keepalived來進(jìn)行 設(shè)置虛擬IP 做故障轉(zhuǎn)移

節(jié)點(diǎn)名稱 節(jié)點(diǎn)主機(jī)名 IP地址 角色 運(yùn)行服務(wù)
cluster01 cluster01 192.168.12.48 Docker Swarm Manager & Node HAProxy & RabbitMQ-Node01
cluster01 cluster02 192.168.12.49 Docker Swarm Manager & Node RabbitMQ-Node02
cluster01 cluster03 192.168.12.50 Docker Swarm Manager & Node RabbitMQ-Node02

下面部署文檔中,需要執(zhí)行的指令所在節(jié)點(diǎn),將會說明在以上規(guī)劃的某個節(jié)點(diǎn)執(zhí)行,均已節(jié)點(diǎn)名稱代替。

2. 安裝Docker和Docker Swarm

安裝Docker和Docker Swarm。Docker是用于構(gòu)建、發(fā)布和運(yùn)行容器化應(yīng)用程序的開源工具,而Docker Swarm是Docker的一種編排和集群管理方式,用于實(shí)現(xiàn)容器化應(yīng)用程序的高可用性和負(fù)載均衡。

需要多節(jié)點(diǎn),那么在多個節(jié)點(diǎn)上安裝Docker和Docker Swarm

可以通過以下命令來安裝Docker和Docker Swarm

  • cluster01、cluster02、cluster03節(jié)點(diǎn)執(zhí)行
# 安裝Docker
$ curl -sSL https://get.docker.com/ | sh

# 啟動Docker
$ systemctl start docker

# 安裝Docker Swarm
$ docker pull swarm:latest

3. 創(chuàng)建Docker Swarm集群

創(chuàng)建Docker Swarm集群。Docker Swarm集群由一組Docker主機(jī)組成,其中有一臺主機(jī)作為管理節(jié)點(diǎn),其它主機(jī)作為工作節(jié)點(diǎn)

3.1. 創(chuàng)建Docker Swarm集群

如果配置多節(jié)點(diǎn),需要在多個節(jié)點(diǎn)創(chuàng)建Docker Swarm集群

cluster01 節(jié)點(diǎn)執(zhí)行

# 創(chuàng)建Docker Swarm管理節(jié)點(diǎn) 
$ docker swarm init \
      --advertise-addr=192.168.12.48
  • 執(zhí)行輸出如下:
    docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器
    注意:三個節(jié)點(diǎn)我們都規(guī)劃成了manager管理節(jié)點(diǎn)并且充當(dāng)node節(jié)點(diǎn),也會為了訪問單點(diǎn)故障,所以下面執(zhí)行的指令,我們將不通過已經(jīng)指令執(zhí)行,我們通過獲取manager的加入指令來操作

cluster01節(jié)點(diǎn)執(zhí)行

$ docker swarm join-token manager

# 將指令的輸出結(jié)果復(fù)制,將作為后續(xù)其他cluster02、cluster03的加入操作指令

docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器

3.2. 將工作節(jié)點(diǎn)加入Docker Swarm集群

復(fù)制上面通過docker swarm join-token manager管理節(jié)點(diǎn)的初始化輸出指令

cluster02、cluster03 節(jié)點(diǎn)執(zhí)行

# 創(chuàng)建Docker Swarm其他管理節(jié)點(diǎn)
$ docker swarm join \
      --token=TOKEN MANAGER_IP:2377

3.3. 查看集群運(yùn)行狀態(tài)

# 查詢Docker Swarm集群的狀態(tài)
$ docker node ls
  • 以下輸出則表示Docker Swarm 3個節(jié)點(diǎn)均已成功加入集群,三個管理節(jié)點(diǎn),其中cluster01為主節(jié)點(diǎn)

docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器

4. 創(chuàng)建共享數(shù)據(jù)持久化卷

共享存儲卷,可以使用外部NFS做為共享卷來存儲服務(wù)的持久化數(shù)據(jù),也是可以Docker Swarm的本地volume卷來存儲數(shù)據(jù),這里兩種方式都有具體操作,但是建議使用本地volume來存儲。

下面所有步驟關(guān)于共享卷的使用,本文檔選擇本地Volume的方式,其他方式可以自行配置即可。

4.1. 創(chuàng)建共享存儲卷 - local

Docker Swarm 的共享存儲卷功能會自動在集群中的多個節(jié)點(diǎn)之間分布共享存儲卷的數(shù)據(jù),并保證數(shù)據(jù)的一致性和可用性。它內(nèi)部使用了分布式文件系統(tǒng)來存儲數(shù)據(jù),并提供一個統(tǒng)一的接口,讓容器可以訪問存儲卷中的數(shù)據(jù)。

?? 具體來說,Docker Swarm 會在集群中的每個節(jié)點(diǎn)上創(chuàng)建一個存儲卷的副本,并使用復(fù)制策略來保證每個副本中的數(shù)據(jù)都是一致的。這樣,當(dāng)容器在某個節(jié)點(diǎn)上進(jìn)行寫操作時(shí),Docker Swarm 會自動將寫操作同步到其它節(jié)點(diǎn)的副本中,保證數(shù)據(jù)的一致性。同時(shí),Docker Swarm 還會監(jiān)控每個存儲卷的狀態(tài),如果某個存儲卷的副本出現(xiàn)故障,Docker Swarm 會自動在其它節(jié)點(diǎn)上創(chuàng)建新的副本,以保證存儲卷的可用性。

總之,Docker Swarm 的共享存儲卷功能可以方便地解決容器之間共享數(shù)據(jù)的問題,并保證數(shù)據(jù)的安全性和可用性。

4.1.1. 使用 Docker 命令行工具創(chuàng)建共享存儲卷 - RabbitMQ

cluster01、cluster02、cluster03節(jié)點(diǎn)執(zhí)行

# 初始化一個本地目錄做數(shù)據(jù)共享
$ mkdir -p /data/rabbitmq-data

# 執(zhí)行掛載掛載映射指令
$ docker volume create --driver local \
      --opt type=none \
      --opt device=/data/rabbitmq-data \
      --opt o=bind \
      cluster<01、02、03>-rabbitmq-data

上面的命令將創(chuàng)建一個名為 cluster<01、02、03>-rabbitmq-data 的共享存儲卷,并將它掛載到本地主機(jī)的 /data/rabbitmq-data 目錄

?? 這里要注意,cluster<01、02、03>-rabbitmq-data 中的<01、02、03> 為節(jié)點(diǎn)的名稱,為了方便管理查看,可以自行替換

5. 創(chuàng)建節(jié)點(diǎn)間通信共享overlay網(wǎng)絡(luò)

5.1. 創(chuàng)建服務(wù)共享網(wǎng)絡(luò)

這里的 rabbitmq_network 為三個節(jié)點(diǎn)直接共享所使用的網(wǎng)絡(luò)名稱,分別為三個服務(wù)創(chuàng)建單獨(dú)通信的網(wǎng)絡(luò),后續(xù)將會使用這個網(wǎng)絡(luò)節(jié)點(diǎn)之間的網(wǎng)絡(luò)通信,名稱可以自定義,但后續(xù)在創(chuàng)建服務(wù)時(shí)需要查詢使用

cluster01節(jié)點(diǎn)執(zhí)行

  • 創(chuàng)建rabbitmq服務(wù)使用網(wǎng)絡(luò)
$ docker network create -d overlay --attachable rabbitmq_network
?? 創(chuàng)建時(shí)需要注意,在創(chuàng)建網(wǎng)絡(luò)時(shí)需要添加 `--attachable` 參數(shù),否則后續(xù)無法使用`docker run`指令來使用此網(wǎng)絡(luò)

6. 創(chuàng)建RabbitMQ服務(wù)

6.1. 拉取RabbitMQ鏡像

cluster01、cluster02、cluster03節(jié)點(diǎn)執(zhí)行

$ docker pull rabbitmq:3.11-management

6.2. 創(chuàng)建RabbitMQ服務(wù)

6.2.1. 在cluster01節(jié)點(diǎn)創(chuàng)建RabbitMQ服務(wù)

使用 docker run 命令來創(chuàng)建一個運(yùn)行 RabbitMQ 的服務(wù),是否配置參數(shù)如下:

配置參數(shù) 配置值 解析
–name rabbitmq-node01 指定容器服務(wù)啟動的名稱
–hostname rabbitmq-node01 指定服務(wù)的主機(jī)名稱
-v cluster01-rabbitmq-data:/var/lib/rabbitmq 指定本地映射目錄,將cluster01-rabbitmq-data的本地volume卷映射到容器內(nèi)部/var/lib/rabbitmq目錄作為數(shù)據(jù)存儲目錄使用【cluster01-rabbitmq-data就是上面給rabbitmq所創(chuàng)建的卷名稱】
-p 5672:5672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)5672映射到容器的5672端口,此端口為RabbitMQ的對外服務(wù)連接端口
-p 15672:15672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)15672映射到容器的15672端口,此端口為RabbitMQ管理控制臺訪問端口
-e RABBITMQ_DEFAULT_USER admin 指定RabbitMQ服務(wù)啟動后所創(chuàng)建的默認(rèn)用戶
-e RABBITMQ_DEFAULT_PASS admin 指定RabbitMQ服務(wù)啟動后所創(chuàng)建的默認(rèn)用戶的默認(rèn)密碼
-e RABBITMQ_ERLANG_COOKIE rabbitmqcookie 指定集群節(jié)點(diǎn)間通信認(rèn)證密鑰,同屬于一個集群,需要所有服務(wù)器啟動時(shí)配置值都保持一致才可以正常加入到一個集群
–network rabbitmq_network 指定容器服務(wù)所使用的網(wǎng)絡(luò)【rabbitmq_network就是上面給rabbitmq通信所創(chuàng)建的網(wǎng)絡(luò)】

cluster01節(jié)點(diǎn)執(zhí)行

$ docker run -d \
      --hostname rabbitmq-node01 \
      --name rabbitmq-node01 \
      -e RABBITMQ_ERLANG_COOKIE="rabbitcookie" \
      -e RABBITMQ_DEFAULT_USER="admin" \
      -e RABBITMQ_DEFAULT_PASS="admin" \
      -v cluster01-rabbitmq-data:/var/lib/rabbitmq \
      -p 5672:5672 \
      -p 15672:15672 \
      --net=rabbitmq_network \
      rabbitmq:3.11-management
  • 查看服務(wù)信息

通過指令查看rabbitmq-node01的容器服務(wù)是否正常啟動

# 查看rabbitmq-node01服務(wù)的所有配置信息
$ docker inspect rabbitmq-node01

?? 可以通過以上指令來查詢r(jià)abbitmq-node01的所分配的rabbitmq_network內(nèi)網(wǎng)地址及其他相關(guān)信息

  • 確認(rèn)rabbitmq服務(wù)正常啟動

通過瀏覽器訪問cluster01節(jié)點(diǎn)15672端口查看服務(wù)狀態(tài)
docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器
docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器
通過RabbitMQ管理頁面查看,可以確認(rèn)rabbitmq-node01節(jié)點(diǎn)一服務(wù)啟動正常

6.2.2. 在cluster02節(jié)點(diǎn)創(chuàng)建RabbitMQ服務(wù)

使用 docker run 命令來創(chuàng)建一個運(yùn)行 RabbitMQ 的服務(wù),是否配置參數(shù)如下:

配置參數(shù) 配置值 解析
–name rabbitmq-node02 指定容器服務(wù)啟動的名稱
–hostname rabbitmq-node02 指定服務(wù)的主機(jī)名稱
-v cluster02-rabbitmq-data:/var/lib/rabbitmq 指定本地映射目錄,將cluster02-rabbitmq-data的本地volume卷映射到容器內(nèi)部/var/lib/rabbitmq目錄作為數(shù)據(jù)存儲目錄使用【cluster01-rabbitmq-data就是上面給rabbitmq所創(chuàng)建的卷名稱】
-p 5672:5672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)5672映射到容器的5672端口,此端口為RabbitMQ的對外服務(wù)連接端口
-p 15672:15672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)15672映射到容器的15672端口,此端口為RabbitMQ管理控制臺訪問端口
-e RABBITMQ_ERLANG_COOKIE rabbitmqcookie 指定集群節(jié)點(diǎn)間通信認(rèn)證密鑰,同屬于一個集群,需要所有服務(wù)器啟動時(shí)配置值都保持一致才可以正常加入到一個集群
–network rabbitmq_network 指定容器服務(wù)所使用的網(wǎng)絡(luò)【rabbitmq_network就是上面給rabbitmq通信所創(chuàng)建的網(wǎng)絡(luò)】

cluster02節(jié)點(diǎn)執(zhí)行

$ docker run -d \
      --hostname rabbitmq-node02 \
      --name rabbitmq-node02 \
      -e RABBITMQ_ERLANG_COOKIE="rabbitcookie" \
      -v cluster02-rabbitmq-data:/var/lib/rabbitmq \
      -p 5672:5672 \
      -p 15672:15672 \
      --net=rabbitmq_network \
      rabbitmq:3.11-management
  • 查看服務(wù)信息

通過指令查看rabbitmq-node02的容器服務(wù)是否正常啟動

# 查看rabbitmq-node02服務(wù)的所有配置信息
$ docker inspect rabbitmq-node02

?? 可以通過以上指令來查詢r(jià)abbitmq-node02的所分配的rabbitmq_network內(nèi)網(wǎng)地址及其他相關(guān)信息

確認(rèn)RabbitMQ服務(wù)正常啟動

6.2.3. 在cluster03節(jié)點(diǎn)創(chuàng)建RabbitMQ服務(wù)

使用 docker run 命令來創(chuàng)建一個運(yùn)行 RabbitMQ 的服務(wù),是否配置參數(shù)如下:

配置參數(shù) 配置值 解析
–name rabbitmq-node03 指定容器服務(wù)啟動的名稱
–hostname rabbitmq-node03 指定服務(wù)的主機(jī)名稱
-v cluster03-rabbitmq-data:/var/lib/rabbitmq 指定本地映射目錄,將cluster03-rabbitmq-data的本地volume卷映射到容器內(nèi)部/var/lib/rabbitmq目錄作為數(shù)據(jù)存儲目錄使用【cluster01-rabbitmq-data就是上面給rabbitmq所創(chuàng)建的卷名稱】
-p 5672:5672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)5672映射到容器的5672端口,此端口為RabbitMQ的對外服務(wù)連接端口
-p 15672:15672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)15672映射到容器的15672端口,此端口為RabbitMQ管理控制臺訪問端口
-e RABBITMQ_ERLANG_COOKIE rabbitmqcookie 指定集群節(jié)點(diǎn)間通信認(rèn)證密鑰,同屬于一個集群,需要所有服務(wù)器啟動時(shí)配置值都保持一致才可以正常加入到一個集群
–network rabbitmq_network 指定容器服務(wù)所使用的網(wǎng)絡(luò)【rabbitmq_network就是上面給rabbitmq通信所創(chuàng)建的網(wǎng)絡(luò)】

cluster02節(jié)點(diǎn)執(zhí)行

$ docker run -d \
      --hostname rabbitmq-node03 \
      --name rabbitmq-node03 \
      -e RABBITMQ_ERLANG_COOKIE="rabbitcookie" \
      -v cluster03-rabbitmq-data:/var/lib/rabbitmq \
      -p 5672:5672 \
      -p 15672:15672 \
      --net=rabbitmq_network \
      rabbitmq:3.11-management
  • 查看服務(wù)信息

通過指令查看rabbitmq-node03的容器服務(wù)是否正常啟動

# 查看rabbitmq-node03服務(wù)的所有配置信息
$ docker inspect rabbitmq-node03

?? 可以通過以上指令來查詢r(jià)abbitmq-node03的所分配的rabbitmq_network內(nèi)網(wǎng)地址及其他相關(guān)信息

確認(rèn)RabbitMQ服務(wù)正常啟動

7. 加入RabbitMQ集群

?? 內(nèi)存節(jié)點(diǎn)和磁盤節(jié)點(diǎn)的選擇:
每個RabbitMQ節(jié)點(diǎn),要么是內(nèi)存節(jié)點(diǎn),要么是磁盤節(jié)點(diǎn)。
內(nèi)存節(jié)點(diǎn):將所有的隊(duì)列、交換器、綁定、用戶等元數(shù)據(jù)定義都存儲在內(nèi)存中;
磁盤節(jié)點(diǎn):將元數(shù)據(jù)存儲在磁盤中。
單節(jié)點(diǎn)系統(tǒng)只允許磁盤類型的節(jié)點(diǎn),否則當(dāng)節(jié)點(diǎn)重啟以后,所有的配置信息都會丟失。
如果采用集群的方式,可以選擇至少配置一個節(jié)點(diǎn)為磁盤節(jié)點(diǎn),其余部分配置為內(nèi)存節(jié)點(diǎn),這樣可以獲得更快的響應(yīng)。所以本集群中配置節(jié)點(diǎn)1為磁盤節(jié)點(diǎn),cluster02和cluster03為內(nèi)存節(jié)點(diǎn)。
集群中的第一個節(jié)點(diǎn)將初始元數(shù)據(jù)代入集群中,并且無須被告知加入。而第2個和之后加入的節(jié)點(diǎn)將加入它并獲取它的元數(shù)據(jù)。要加入節(jié)點(diǎn),需要進(jìn)入Docker容器,重啟RabbitMQ。

7.1. 在cluster01節(jié)點(diǎn)執(zhí)行初始化

cluster01節(jié)點(diǎn)執(zhí)行

$ docker exec -ti rabbitmq-node01 bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl start_app

7.2. 在cluster02節(jié)點(diǎn)執(zhí)行加入操作

cluster02節(jié)點(diǎn)執(zhí)行

$ docker exec -ti rabbitmq-node02 bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl join_cluster --ram rabbit@rabbitmq-node01
$ rabbitmqctl start_app

7.3. 在cluster03節(jié)點(diǎn)執(zhí)行加入操作

cluster03節(jié)點(diǎn)執(zhí)行

$ docker exec -ti rabbitmq-node03 bash
$ rabbitmqctl stop_app
$ rabbitmqctl reset
$ rabbitmqctl join_cluster --ram rabbit@rabbitmq-node01
$ rabbitmqctl start_app

8. 配置RabbitMQ鏡像隊(duì)列

  • 配置鏡像隊(duì)列

鏡像隊(duì)列工作原理:在非鏡像隊(duì)列的集群中,消息會路由到指定的隊(duì)列。當(dāng)配置為鏡像隊(duì)列之后,消息除了按照路由規(guī)則投遞到相應(yīng)的隊(duì)列外,還會投遞到鏡像隊(duì)列的拷貝。也可以想象在鏡像隊(duì)列中隱藏著一個fanout交換器,將消息發(fā)送到鏡像的隊(duì)列的拷貝。

進(jìn)入任意一個RabbitMQ節(jié)點(diǎn),執(zhí)行如下命令:

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

可以設(shè)置鏡像隊(duì)列,"^"表示匹配所有隊(duì)列,即所有隊(duì)列在各個節(jié)點(diǎn)上都會有備份。在集群中,只需要在一個節(jié)點(diǎn)上設(shè)置鏡像隊(duì)列,設(shè)置操作會同步到其他節(jié)點(diǎn)。

查看集群的狀態(tài):

rabbitmqctl cluster_status

9. 檢查RabbitMQ集群狀態(tài)

完成以上cluster01、cluster02、cluster03三個節(jié)點(diǎn)的RabbitMQ服務(wù)的啟動和集群的配置。

所有節(jié)點(diǎn)設(shè)置完成之后,在瀏覽器訪問cluster01、cluster02和cluster03中任意一個節(jié)點(diǎn)的15672端口,都會看到RabbitMQ集群已經(jīng)創(chuàng)建成功。
docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器

  • 新建立一個隊(duì)列服務(wù),查看是否已經(jīng)為鏡像隊(duì)列模式
    docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器
    docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器

如圖所示則表示集群已經(jīng)開啟了鏡像隊(duì)列模式,所有的對接消息將在其他節(jié)點(diǎn)都存在一份,訪問任何一個節(jié)點(diǎn)都可以,而且他們直接數(shù)據(jù)都是同步的。

10. 配置HAProxy服務(wù)

三個節(jié)點(diǎn)的RabbitMQ服務(wù)集群正常之后,已經(jīng)完成高可用配置,但是在使用過程中,不能讓使用RabbitMQ的程序連接三個地址,所以我們還需要一個代理服務(wù)器,來配置代理轉(zhuǎn)發(fā)做到負(fù)載均衡,在使用中客戶端只需要連接代理服務(wù)器的地址,由代理服務(wù)器根據(jù)策略來負(fù)責(zé)分發(fā)到后臺的三個節(jié)點(diǎn)進(jìn)行數(shù)據(jù)庫的訪問,而且可以持續(xù)監(jiān)測后臺三個RabbitMQ服務(wù)的狀態(tài),如果某一個節(jié)點(diǎn)掛掉之后,自動負(fù)載到其他可用節(jié)點(diǎn)。上線之后重新加入到集群,并持續(xù)監(jiān)聽,來實(shí)現(xiàn)負(fù)載均衡高可用。

做代理服務(wù)可以有多種選,例如:HAProxy、Nginx都可以實(shí)現(xiàn),這里我們選擇HAProxy來實(shí)現(xiàn)代理服務(wù),其他配置實(shí)現(xiàn)可以自定查閱相關(guān)資料來配置。

10.1. 拉取HAProxy鏡像

這里我們選擇最新的HAProxy的鏡像,版本為2.7.0 ,其他版本可以通過訪問 https://haproxy.org 來獲取

具體版本:HAProxy version 2.7.0-437fd28 2022/12/01

cluster01 節(jié)點(diǎn)執(zhí)行

目前只在一個節(jié)點(diǎn)HAProxy服務(wù),會存在一個單點(diǎn)故障的問題,由于所有客戶端都會通過HAProxy來轉(zhuǎn)發(fā)到后端服務(wù),所以后續(xù)將結(jié)合Keepalived來實(shí)現(xiàn)高可用。

$ docker pull haproxy:latest

10.2. 配置HAProxy配置文件

HAProxy鏡像服務(wù)內(nèi)部沒有配置文件,需要在容器啟動之前將haproxy.cfg配置文件按照需要配置完成,再啟動服務(wù)時(shí)映射到容器內(nèi)部使用

cluster01節(jié)點(diǎn)執(zhí)行

10.2.1. 創(chuàng)建一個宿主機(jī)映射配置文件目錄

$ mkdir -p /data/haproxy

10.2.2. 編寫HAProxy配置文件

配置文件中,需要修改的內(nèi)容主要是 listen proxy-rabbitmq 段,這里需要將RabbitMQ的三個節(jié)點(diǎn)的RabbitMQ地址進(jìn)行配置,具體IP地址為容器的內(nèi)部地址,可以在每個節(jié)點(diǎn)通過**docker inspect rabbitmq-node<01/02/03>**來獲取,IP地址獲取后配置到文件中即可,其他haproxy的配置參數(shù),也可以根據(jù)具體環(huán)境來進(jìn)行配置。

這里配置的負(fù)載模式為:roundrobin,輪訓(xùn)算法,可以根據(jù)實(shí)際環(huán)境自行配置其他模式即可

cluster01 節(jié)點(diǎn)執(zhí)行

$ vim /data/haproxy/haproxy.cfg
# ---- 配置文件內(nèi)容如下 ----
global
    #日志文件,使用rsyslog服務(wù)中l(wèi)ocal5日志設(shè)備(/var/log/local5),等級info
    log 127.0.0.1 local5 info
    #守護(hù)進(jìn)程運(yùn)行
    daemon

defaults
    log    global
    mode    http
    #日志格式
    option    httplog
    #日志中不記錄負(fù)載均衡的心跳檢測記錄
    option    dontlognull
    #連接超時(shí)(毫秒)
    timeout connect 5000
    #客戶端超時(shí)(毫秒)
    timeout client  50000
    #服務(wù)器超時(shí)(毫秒)
    timeout server  50000

#監(jiān)控界面
listen  admin_stats
    #監(jiān)控界面的訪問的IP和端口
    bind  0.0.0.0:8888
    #訪問協(xié)議
    mode        http
    #URI相對地址
    stats uri   /dbs
    #統(tǒng)計(jì)報(bào)告格式
    stats realm     Global\ statistics
    #登陸帳戶信息, 用于web瀏覽器的訪問用戶名密碼
    stats auth  admin:root123.
#數(shù)據(jù)庫負(fù)載均衡
listen  proxy-rabbitmq
    #訪問的IP和端口
    bind  0.0.0.0:5672
    #網(wǎng)絡(luò)協(xié)議
    mode  tcp
    #負(fù)載均衡算法(輪詢算法)
    #輪詢算法:roundrobin
    #權(quán)重算法:static-rr
    #最少連接算法:leastconn
    #請求源IP算法:source
    balance  roundrobin
    #日志格式
    option  tcplog
    #inter 每隔五秒對mq集群做健康檢查,2次正確證明服務(wù)器可用,2次失敗證明服務(wù)器不可用,并且配置主備機(jī)制
    #weight 表示權(quán)重都為1,三個節(jié)點(diǎn)平均分配資源
    #maxconn 2000,每個節(jié)點(diǎn)最大連接2000
    server  RabbitMQ-Node01 10.0.13.23:5672 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2
    server  RabbitMQ-Node02 10.0.13.26:5672 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2
    server  RabbitMQ-Node03 10.0.13.6:5672 check weight 1 maxconn 2000 inter 5000 rise 2 fall 2
    #使用keepalive檢測死鏈
    option  tcpka

10.3. 創(chuàng)建HAProxy服務(wù)

使用 docker run 命令來創(chuàng)建一個運(yùn)行 HAProxy 的服務(wù),是否配置參數(shù)如下:

配置參數(shù) 配置值 解析
-p 4001:8888 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)4001映射到容器的8888端口,這個端口后續(xù)用來訪問haproxy服務(wù)的瀏覽器可視化監(jiān)控頁面
-p 4002:5672 指定服務(wù)映射端口,表示宿主機(jī)端口:內(nèi)部容器服務(wù)端口,這里是宿主機(jī)4002映射到容器的5672端口,這個端口主要對外客戶端訪問外部端口,通過這個端口轉(zhuǎn)發(fā)至容器內(nèi)部來訪問后端的3個RabbitMQ集群。
-v /data/haproxy:/usr/local/etc/haproxy 指定本地映射目錄,將/data/haproxy的本地目錄映射到容器內(nèi)部/usr/local/etc/haproxy目錄作為haproxy的配置文件目錄使用
–name haproxy 指定容器服務(wù)啟動的名稱
–network rabbitmq_network 指定容器服務(wù)所使用的網(wǎng)絡(luò)【rabbitmq_network就是上面給rabbitmq通信所創(chuàng)建的網(wǎng)絡(luò)】

cluster01 節(jié)點(diǎn)執(zhí)行

$ docker run -d \
     -p 4001:8888 \
     -p 4002:5672 \
     -v /data/haproxy:/usr/local/etc/haproxy \
     --name=haproxy \
     --net=rabbitmq_network \
     --privileged \
     haproxy:latest

?? 這里如何HAProxy服務(wù)分別轉(zhuǎn)發(fā)兩個不同網(wǎng)絡(luò)的服務(wù),那么啟動HAProxy容器時(shí),需要給HAProxy服務(wù)附加多個網(wǎng)絡(luò),由于在直接使用docker run指令是只能指定一個網(wǎng)絡(luò),所以可以再綁定一個網(wǎng)絡(luò)之后啟動后,再通過docker network connect <網(wǎng)絡(luò)> <哪個服務(wù)>來進(jìn)行附加。如果使用了docker-compose.yaml方式,則可以直接為容器服務(wù)指定多個網(wǎng)絡(luò)。

11. 測試HAProxy服務(wù)功能

HAProxy服務(wù)啟動后,可以通過訪問cluster01節(jié)點(diǎn)宿主機(jī)的http://:4001/dbs來訪問HAProxy服務(wù)的瀏覽器可視化監(jiān)控頁面來查看后端RabbitMQ服務(wù)的監(jiān)測及數(shù)據(jù)轉(zhuǎn)發(fā)負(fù)責(zé)情況,通過頁面可以看到目前后端的節(jié)點(diǎn)數(shù)量以及狀態(tài)是否正常等相關(guān)信息。
docker 部署haproxy,容器微服務(wù),虛擬化,高可用集群,docker,rabbitmq,容器

12. 配置其他應(yīng)用程序訪問RabbitMQ服務(wù)

截止到當(dāng)前,RabbitMQ+HAProxy實(shí)現(xiàn)的高可用負(fù)載集群就配置完成,那么內(nèi)部及外部其他應(yīng)用客戶端可以訪問HAProxy服務(wù)的對外地址及端口來訪問后端的RabbitMQ服務(wù)。

外部服務(wù)訪問地址:192.168.12.48 4002 端口,即可訪問到數(shù)據(jù)庫,后面就由HAProxy來根據(jù)配置的輪訓(xùn)算法來轉(zhuǎn)發(fā)到后端的三臺RabbitMQ服務(wù) (192.168.12.48 為cluster01節(jié)點(diǎn)宿主機(jī)的IP地址)文章來源地址http://www.zghlxwxcb.cn/news/detail-620722.html

到了這里,關(guān)于使用Docker Swarm部署RabbitMQ+HAProxy高可用集群(三節(jié)點(diǎn)-鏡像模式)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • redis 三主三從高可用集群docker swarm

    redis 三主三從高可用集群docker swarm

    redis集群(cluster)筆記 redis 三主三從高可用集群docker swarm redis 三主六從高可用docker(不固定ip) redis 三主六從高可用dockerswarm高級版(不固定ip) 由于數(shù)據(jù)量過大 ,單個Master復(fù)制集難以承擔(dān),因此需要對多個復(fù)制集進(jìn)行集群,形成水平擴(kuò)展每個復(fù)制集只負(fù)責(zé)存儲整個數(shù)據(jù)集的一部分

    2024年02月03日
    瀏覽(21)
  • 動力節(jié)點(diǎn)Rabbitmq-18-21章RabbitMQ集群與高可用

    動力節(jié)點(diǎn)Rabbitmq-18-21章RabbitMQ集群與高可用

    RabbitMQ 的集群分兩種模式,一種是默認(rèn)集群模式,一種是鏡像集群模式; 在RabbitMQ集群中所有的節(jié)點(diǎn)(一個節(jié)點(diǎn)就是一個RabbitMQ的broker服務(wù)器) 被歸為兩類:一類是磁盤節(jié)點(diǎn),一類是內(nèi)存節(jié)點(diǎn); 磁盤節(jié)點(diǎn)會把集群的所有信息(比如交換機(jī)、綁定、隊(duì)列等信息)持久化到磁盤中

    2024年02月01日
    瀏覽(20)
  • 使用 Docker 部署高可用 MongoDB 分片集群

    使用 Docker 部署高可用 MongoDB 分片集群

    mongodb 集群搭建的方式有三種: 主從備份(Master - Slave)模式,或者叫主從復(fù)制模式。 副本集(Replica Set)模式。 分片(Sharding)模式。 其中,第一種方式基本沒什么意義,官方也不推薦這種方式搭建。另外兩種分別就是副本集和分片的方式。今天介紹副本集的方式搭建 mo

    2024年02月06日
    瀏覽(19)
  • 【大白學(xué)Docker】Docker Swarm 集群部署 Wordpress【實(shí)驗(yàn)】

    【大白學(xué)Docker】Docker Swarm 集群部署 Wordpress【實(shí)驗(yàn)】

    1.1 Docker 集群概念和優(yōu)勢 Docker 集群是由多個 Docker 主機(jī) 組成的分布式系統(tǒng),用于協(xié)同管理和運(yùn)行容器化應(yīng)用程序。 這個集群可以通過 Docker Swarm 或 Kubernetes 等容器編排工具來實(shí)現(xiàn)。 Docker 集群的幾個概念 節(jié)點(diǎn)(Node): 集群中的物理或虛擬主機(jī),可以運(yùn)行 Docker 守護(hù)進(jìn)程。 集

    2024年02月04日
    瀏覽(42)
  • RabbitMQ高可用集群部署

    2023年06月29日
    瀏覽(15)
  • k8s集群部署 | 三節(jié)點(diǎn)(復(fù)用)高可用集群過程參考

    k8s集群部署 | 三節(jié)點(diǎn)(復(fù)用)高可用集群過程參考

    1.1.1 實(shí)驗(yàn)架構(gòu)圖 1.1.2 系統(tǒng)版本說明 OS 版本:CentOS Linux release 7.9.2009 (Core) 初始內(nèi)核版本:3.10.0-1160.71.1.el7.x86_64 配置信息:2C2G 150G硬盤 文件系統(tǒng):xfs 網(wǎng)絡(luò):外網(wǎng)權(quán)限 k8s 版本:1.25.9 1.1.3 環(huán)境基本信息 K8s集群角色 IP地址 主機(jī)名 組件信息 控制節(jié)點(diǎn)1(工作節(jié)點(diǎn)1) 192.168.204.10 k8

    2024年02月04日
    瀏覽(30)
  • Kubernetes高可用集群二進(jìn)制部署(六)Kubernetes集群節(jié)點(diǎn)添加

    Kubernetes高可用集群二進(jìn)制部署(六)Kubernetes集群節(jié)點(diǎn)添加

    Kubernetes概述 使用kubeadm快速部署一個k8s集群 Kubernetes高可用集群二進(jìn)制部署(一)主機(jī)準(zhǔn)備和負(fù)載均衡器安裝 Kubernetes高可用集群二進(jìn)制部署(二)ETCD集群部署 Kubernetes高可用集群二進(jìn)制部署(三)部署api-server Kubernetes高可用集群二進(jìn)制部署(四)部署kubectl和kube-controller-man

    2024年02月14日
    瀏覽(18)
  • 【微服務(wù)部署】十、使用Docker Compose搭建高可用Redis集群

    ??現(xiàn)如今,業(yè)務(wù)系統(tǒng)對于緩存Redis的依賴似乎是必不可少的,我們可以在各種各樣的系統(tǒng)中看到Redis的身影??紤]到系統(tǒng)運(yùn)行的穩(wěn)定性,Redis的應(yīng)用和MySQL數(shù)據(jù)庫一樣需要做到高可用部署。 一、Redis 的多種高可用方案 常見的Redis的高可用方案有以下幾種: Redis Replication(主從

    2024年02月07日
    瀏覽(24)
  • Linux部署Redis Cluster高可用集群(附帶集群節(jié)點(diǎn)添加刪除以及槽位分配操作詳解)

    Linux部署Redis Cluster高可用集群(附帶集群節(jié)點(diǎn)添加刪除以及槽位分配操作詳解)

    Redis Cluster 集群是一個由多個主從節(jié)點(diǎn)群組成的分布式服務(wù)器群,它具有復(fù)制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成節(jié)點(diǎn)移除和故障轉(zhuǎn)移的功能。需要將每個節(jié)點(diǎn)設(shè)置成集群模式,這種集群模式?jīng)]有中心節(jié)點(diǎn),可水平擴(kuò)展,需要將每個節(jié)點(diǎn)設(shè)置成集群模式,

    2024年02月07日
    瀏覽(52)
  • 【云原生】二進(jìn)制k8s集群(下)部署高可用master節(jié)點(diǎn)

    【云原生】二進(jìn)制k8s集群(下)部署高可用master節(jié)點(diǎn)

    ?在上一篇文章中,就已經(jīng)完成了二進(jìn)制k8s集群部署的搭建,但是單機(jī)master并不適用于企業(yè)的實(shí)際運(yùn)用(因?yàn)閱螜C(jī)master中,僅僅只有一臺master作為節(jié)點(diǎn)服務(wù)器的調(diào)度指揮,一旦宕機(jī)。就意味著整個集群的癱瘓,所以成熟的k8s的集群一定要考慮到master的高可用。)企業(yè)的運(yùn)用一

    2024年02月12日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包