亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何搭建高可用RabbitMQ集群和HAProxy軟負載

發布時間:2021-11-16 16:26:23 來源:億速云 閱讀:150 作者:小新 欄目:系統運維

小編給大家分享一下如何搭建高可用RabbitMQ集群和HAProxy軟負載,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

RabbitMQ 高可用集群架構

如何搭建高可用RabbitMQ集群和HAProxy軟負載

將兩個 RabbitMQ 磁盤節點和一個 RabbitMQ 內存節點組成一個內建集群,之所以要用兩個磁盤節點是防止,唯一的磁盤節點掛掉后,不能重建隊列,交換器。用 HAProxy 作為 RabbitMQ 集群的負載均衡。為了防止 HAProxy 單點故障,用 Keepalived 將兩個 HAProxy 節點做成一主一備。應用使用 VIP(虛擬IP) 訪問 HAProxy 服務時,默認連接主機(Master)的 HAProxy,當主機(Master)上的 HAProxy 故障時,VIP 會漂移到備機(Backup)上,就會連接備機(Backup)上的 HAProxy 服務。

準備工作

服務器安裝 docker,docker-compose,準備離線鏡像 rabbitmq.tar,haproxy.tar。

服務器節點間可以相互 ping 通。

RabbitMQ 集群

使用 RabbitMQ 內建集群,持久化隊列無法在隊列節點崩潰時,自動連接別的節點創建隊列,非持久化隊列可以自動連接可用節點創建隊列。我們的項目使用的非持久化隊列。

至少保證有兩個磁盤節點,否則在唯一磁盤節點崩潰時,無法在集群中創建隊列,交換器等元數據。

服務分布情況

192.168.1.213 服務器部署 RabbitMQ Disc Node1。  192.168.1.203 服務器部署 RabbitMQ Disc Node2。  192.168.1.212 服務器部署 RabbitMQ RAM Node3。

創建第一個 RabbitMQ 節點

登錄服務器,創建目錄 /app/mcst/rabbitmq。

將鏡像 tar 包 rabbitmq.tar,服務編排文件 mcst-rabbitmq-node1.yaml 通過 sftp 上傳到剛創建的目錄下。

導入鏡像

$ docker load -i rabbitmq.tar  $ docker images # 查看是否導入成功

查看服務編排文件 mcst-rabbitmq-node1.yaml

version: '3'  services:    rabbitmq:      container_name: mcst-rabbitmq      image: rabbitmq:3-management      restart: always      ports:        - 4369:4369        - 5671:5671        - 5672:5672        - 15672:15672        - 25672:25672      environment:        - TZ=Asia/Shanghai        - RABBITMQ_ERLANG_COOKIE=iweru238roseire        - RABBITMQ_DEFAULT_USER=mcst_admin        - RABBITMQ_DEFAULT_PASS=mcst_admin_123        - RABBITMQ_DEFAULT_VHOST=mcst_vhost      hostname: rabbitmq1      extra_hosts:        - rabbitmq1:192.168.1.213        - rabbitmq2:192.168.1.203        - rabbitmq3:192.168.1.212      volumes:        - ./data:/var/lib/rabbitmq

部署命令

$ docker-compose -f mcst-rabbitmq-node1.yaml up -d

注意:三個節點 RABBITMQ_ERLANG_COOKIE 保持一致。一定要有 extra_hosts 配置,否則在搭建集群的過程中會連接不到其他 rabbitmq 節點服務。此節點作為集群根節點。

部署第二個 RabbitMQ 節點

方法同上,上傳 rabbitmq.sh 腳本到 volumes 配置的 ./rabbitmq.sh 路徑。查看 mcst-rabbitmq-node2.yaml

version: '3'  services:    rabbitmq:      container_name: mcst-rabbitmq      image: rabbitmq:3-management      restart: always      ports:        - 4369:4369        - 5671:5671        - 5672:5672        - 15672:15672        - 25672:25672      environment:        - TZ=Asia/Shanghai        - RABBITMQ_ERLANG_COOKIE=iweru238roseire        - RABBITMQ_DEFAULT_USER=mcst_admin        - RABBITMQ_DEFAULT_PASS=mcst_admin_123        - RABBITMQ_DEFAULT_VHOST=mcst_vhost      hostname: rabbitmq2      extra_hosts:        - rabbitmq1:192.168.1.213        - rabbitmq2:192.168.1.203        - rabbitmq3:192.168.1.212      volumes:        - ./rabbitmq.sh:/home/rabbitmq.sh        - ./data:/var/lib/rabbitmq

部署命令

$ docker-compose -f mcst-rabbitmq-node2.yaml up -d

節點啟動完成后,通過命令進入 rabbitmq2 節點的容器中,執行 /home/rabbitmq.sh 腳本。如果報權限錯誤,則在容器內執行 chmod +x /home/rabbitmq.sh 賦權,然后 bash /home/rabbitmq.sh 執行腳本添加到集群中。

進入容器的命令:

$ docker exec -it mcst-rabbitmq /bin/bash

腳本內容如下(磁盤節點):

rabbitmqctl stop_app  rabbitmqctl reset  rabbitmqctl join_cluster rabbit@rabbitmq1 rabbitmqctl start_app

部署第三個 RabbitMQ 節點

方法同上,查看 mcst-rabbitmq-node3.yaml

version: '3'  services:    rabbitmq:      container_name: mcst-rabbitmq      image: rabbitmq:3-management      restart: always      ports:        - 4369:4369        - 5671:5671        - 5672:5672        - 15672:15672        - 25672:25672      environment:        - TZ=Asia/Shanghai        - RABBITMQ_ERLANG_COOKIE=iweru238roseire        - RABBITMQ_DEFAULT_USER=mcst_admin        - RABBITMQ_DEFAULT_PASS=mcst_admin_123        - RABBITMQ_DEFAULT_VHOST=mcst_vhost      hostname: rabbitmq3      extra_hosts:        - rabbitmq1:192.168.1.213        - rabbitmq2:192.168.1.203        - rabbitmq3:192.168.1.212      volumes:        - ./rabbitmq-ram.sh:/home/rabbitmq-ram.sh        - ./data:/var/lib/rabbitmq

部署命令

$ docker-compose -f mcst-rabbitmq-node3.yaml up -d

在啟動 rabbitmq3 節點,啟動后,進入容器內部,執行 bash /home/rabbitmq-ram.sh 腳本添加內存節點到集群中。

腳本內容:

rabbitmqctl stop_app  rabbitmqctl reset  rabbitmqctl join_cluster --ram rabbit@rabbitmq1  rabbitmqctl start_app

在容器內部使用命令查看集群狀態:rabbitmqctl cluster_status。

Cluster status of node rabbit@rabbitmq1 ...  [{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]},{ram,[rabbit@rabbitmq3]}]},   {running_nodes,[rabbit@rabbitmq2,rabbit@rabbitmq3,rabbit@rabbitmq1]},   {cluster_name,<<"rabbit@rabbitmq2">>},   {partitions,[]},   {alarms,[{rabbit@rabbitmq2,[]},{rabbit@rabbitmq3,[]},{rabbit@rabbitmq1,[]}]}]

也可以通過 http://192.168.1.213:15672 進入管理端查看集群狀態。

如何搭建高可用RabbitMQ集群和HAProxy軟負載

HAProxy 負載均衡

創建目錄 /app/mcst/haproxy,將鏡像 tar 包,haproxy 配置文件,docker 服務編排文件上傳到該目錄。

導入鏡像方法同上。

查看服務編排文件內容:

version: '3'  services:    haproxy:      container_name: mcst-haproxy      image: haproxy:2.1      restart: always      ports:        - 8100:8100        - 15670:5670      environment:        - TZ=Asia/Shanghai      extra_hosts:        - rabbitmq1:192.168.1.213        - rabbitmq2:192.168.1.203        - rabbitmq3:192.168.1.212      volumes:        - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro

重點是設置 extra_hosts(rabbitmq 集群節點 ip) 和 volumes(使用自定義的配置文件)。

haproxy 配置文件內容:

global      log 127.0.0.1 local0 info      maxconn 4096  defaults      log     global      mode    tcp      option  tcplog      retries 3      option  redispatch      maxconn 2000      timeout connect 5s      timeout client 120s      timeout server 120s  # ssl for rabbitmq  # frontend ssl_rabbitmq      # bind *:5673 ssl crt /root/rmqha_proxy/rmqha.pem      # mode tcp      # default_backend rabbitmq  # web 管理界面  listen stats      bind *:8100      mode http      stats enable      stats realm Haproxy\ Statistics      stats uri /      stats auth admin:admin123  # 配置負載均衡  listen rabbitmq      bind *:5670      mode tcp      balance roundrobin      server  rabbitmq1 rabbitmq1:5672  check inter 5s rise 2 fall 3      server  rabbitmq2 rabbitmq2:5672  check inter 5s rise 2 fall 3      server  rabbitmq3 rabbitmq3:5672  check inter 5s rise 2 fall 3

部署命令

$ docker-compose -f mcst-haproxy.yaml up -d

服務分布情況

192.168.1.212 服務器部署 HAProxy Master。  192.168.1.203 服務器部署 HAProxy Backup。

分別在以上兩個節點起好 HAProxy 服務。

登錄 HAProxy 的管理端查看集群狀態:http://192.168.1.212:8100/。

如何搭建高可用RabbitMQ集群和HAProxy軟負載

使用 Keepalived 給 HAProxy 做主備

準備工作

申請一個和服務節點同一局域網的 ip 地址,該 ip 不能被占用,作為 VIP(虛擬ip)。

安裝 Keepalived

到 Keepalived 官網下載最新版本包,本次安裝使用的是 2.0.20 版本。

下載好后的文件是:keepalived-2.0.20.tar.gz。

上傳到服務器,對 tar 包解壓縮。

$ tar -xf keepalived-2.0.20.tar.gz

檢查依賴

$ cd keepalived-2.0.20  $ ./configure

Keepalived 的安裝需要以下依賴 gcc,openssl-devel。

安裝命令

$ yum install -y gcc  $ yum install -y openssl-devel

因為是內網服務器不能使用外網的 yum 源,所以需要更改用本地 yum 源。

將 linux 的安裝光盤鏡像上傳到 /mnt/iso 目錄下,并 mount 到 /mnt/cdrom 目錄下,作為 yum 的一個安裝源。

$ mkdir /mnt/iso  $ mkdir /mnt/cdrom   $ mv /ftp/rhel-server-7.3-x86_64-dvd.iso /mnt/iso

掛載光盤鏡像

$ mount -ro loop /mnt/iso/rhel-server-7.3-x86_64-dvd.iso /mnt/cdrom   $ mv /ftp/myself.repo /etc/yum.repos.d  $ yum clean all   $ yum makecache   $ yum update

附:myself.repo文件內容:

[base]  name= Red Hat  Enterprise Linux $releasever  -  $basearch  -  Source  baseurl=file:///mnt/cdrom  enabled=1  gpgcheck=1  gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release

更改完成后,以后每次需要 linux 安裝盤安裝軟件包時,只需要執行 mount 命令,將光盤 ISO 文件加載即可。

$ mount -ro loop /mnt/iso/rhel-server-7.3-x86_64-dvd.iso /mnt/cdrom

這時使用 yum 安裝 gcc,openssl-devel就沒問題了。

如果使用本地 yum 源的條件也不具備,那么可以使用 yum 的 downloadonly 插件。

要在能連接外網和系統版本一致的機器上將需要的依賴下載下來,到目標內網機器上本地安裝。

還是推薦使用本地 yum 源的方式

安裝完 gcc,openssl-devel 后,再次執行 ./configure 會報一個警告。

“this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.”

安裝如下依賴解決

$ yum install -y libnl libnl-devel

安裝完成后再次 ./configure 就沒問題了。

然后執行 make 編譯

最后執行 make install 安裝

安裝完成后執行 keepalived --version,輸出版本號即為安裝成功。

創建 Keepalived 配置文件

創建配置文件 /etc/keepalived/keepalived.conf

Master 節點配置:

vrrp_script chk_haproxy {      script "killall -0 haproxy"  # verify haproxy's pid existance      interval 5                   # check every 2 seconds      weight -2                    # if check failed, priority will minus 2  }  vrrp_instance VI_1 {      # 主機: MASTER      # 備機: BACKUP      state MASTER      # 實例綁定的網卡, 用ip a命令查看網卡編號      interface ens192      # 虛擬路由標識,這個標識是一個數字(1-255),在一個VRRP實例中主備服務器ID必須一樣      virtual_router_id 51      # 優先級,數字越大優先級越高,在一個實例中主服務器優先級要高于備服務器      priority 101      # 虛擬IP地址,可以有多個,每行一個      virtual_ipaddress {          192.168.1.110      }      track_script {               # Scripts state we monitor          chk_haproxy                    }  }

ens192 是網卡名,ifconfig 命令查看服務器網卡,找到和本機服務 ip 對應的網卡,virtual_router_id 的值要和 backup 節點上的配置保持一致。killall \-0 haproxy 命令的意思是,如果 haproxy 服務存在執行該命令,什么都不會發生,如果服務不存在,執行該命令會報找不到進程 haproxy: no process found。

# 網卡信息  ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500          inet 192.168.1.203  netmask 255.255.255.0  broadcast 192.168.1.255          inet6 fe80::250:56ff:fe94:bceb  prefixlen 64  scopeid 0x20<link>          ether 00:50:56:94:bc:eb  txqueuelen 1000  (Ethernet)          RX packets 88711011  bytes 12324982140 (11.4 GiB)          RX errors 0  dropped 272  overruns 0  frame 0          TX packets 88438149  bytes 10760989492 (10.0 GiB)          TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  # haproxy 服務不存在  [root@localhost ~]# killall -0 haproxy  haproxy: no process found

master 節點的 priority 在減去 weight 后要比 backup 節點的 priority 低才行,否則主備切換不成功。

Backup節點配置:

vrrp_script chk_haproxy {      script "killall -0 haproxy"  # verify haproxy's pid existance      interval 5                   # check every 2 seconds      weight -2                    # if check failed, priority will minus 2 }  vrrp_instance VI_1 {      # 主機: MASTER      # 備機: BACKUP      state BACKUP      # 實例綁定的網卡, 用ip a命令查看網卡編號      interface ens192      # 虛擬路由標識,這個標識是一個數字(1-255),在一個VRRP實例中主備服務器ID必須一樣      virtual_router_id 51      # 優先級,數字越大優先級越高,在一個實例中主服務器優先級要高于備服務器      priority 100      # 虛擬IP地址,可以有多個,每行一個      virtual_ipaddress {          192.168.1.110      }      track_script {               # Scripts state we monitor          chk_haproxy                    }  }

創建完配置,啟動 keepalived。

$ systemctl restart keepalived

測試 Keepalived

在 Master,Backup 節點上,使用 ip addr 命令看下 vip 在哪臺機器的 ens192 網卡上。

2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000      link/ether 00:50:56:94:c1:79 brd ff:ff:ff:ff:ff:ff      inet 192.168.1.212/24 brd 192.168.1.255 scope global ens192         valid_lft forever preferred_lft forever      inet 192.168.1.110/32 scope global ens192         valid_lft forever preferred_lft forever      inet6 fe80::250:56ff:fe94:c179/64 scope link          valid_lft forever preferred_lft forever

默認在 master 主機上,停掉 master 主機的 haproxy 服務,然后在用 ip addr 查看虛擬 ip 在哪個機器上,如果漂移到備份主機上則代表熱備生效。

在開啟 master 主機的 haproxy 服務,ip addr 查看虛擬ip應該重新漂移回 master 主機上。

測試服務,使用虛擬 ip 加服務端口號訪問 HAProxy 服務。

以上是“如何搭建高可用RabbitMQ集群和HAProxy軟負載”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

比如县| 江华| 孙吴县| 平利县| 宜良县| 定边县| 石屏县| 大渡口区| 涡阳县| 富平县| 北碚区| 健康| 富锦市| 同德县| 嘉兴市| 永仁县| 论坛| 汤原县| 新乡市| 修文县| 历史| 满城县| 昆山市| 阜城县| 天镇县| 新乐市| 新巴尔虎右旗| 临清市| 五大连池市| 东辽县| 鲜城| 社旗县| 繁峙县| 成都市| 海宁市| 白沙| 宜丰县| 香港| 奉化市| 贺兰县| 石台县|