08-01 RabbitMQ集群

1.0 集群介绍与思路

  • 推荐RabbitMQ镜像集群模式,
  1. 集群中有两种节点类型:
    内存节点:只将数据保存到内存
    磁盘节点:保存数据到内存和磁盘。

  2. 内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘节点来保存数据就足够了如果集群中只有内存节点,那么不能全部停止它们,否则所有数据消息在服务器全部停机之后都会丢失。

  3. 推荐设计架构:
    在一个 rabbitmq 集群里,有 3 台或以上机器,其中 1 台使用磁盘模式,其它节点使用内存模式,内存节点无访问速度更快,由于磁盘 IO 相对较慢,因此可作为数据备份使用。

1.1 环境准备

节点名称节点名称ip地址
rabbitmq1rabbitmq110.0.0.110
rabbitmq2rabbitmq210.0.0.111
rabbitmq3rabbitmq310.0.0.112

1.2 安装

  • 三台机器要安装版本一致

参考官网编写安装脚本
rabbit官网安装方法 https://www.rabbitmq.com/install-debian.html

#!/usr/bin/sh

HOST=`hostname -I|awk '{print $1}'`

GREEN="echo -e \E[32;1m"
END="\E[0m"

color () {
    RES_COL=60
    MOVE_TO_COL="echo -en \\033[${RES_COL}G"
    SETCOLOR_SUCCESS="echo -en \\033[1;32m"
    SETCOLOR_FAILURE="echo -en \\033[1;31m"
    SETCOLOR_WARNING="echo -en \\033[1;33m"
    SETCOLOR_NORMAL="echo -en \E[0m"
    echo -n "$1" && $MOVE_TO_COL
    echo -n "["
    if [ $2 = "success" -o $2 = "0" ] ;then
        ${SETCOLOR_SUCCESS}
        echo -n $"  OK  "    
    elif [ $2 = "failure" -o $2 = "1"  ] ;then 
        ${SETCOLOR_FAILURE}
        echo -n $"FAILED"
    else
        ${SETCOLOR_WARNING}
        echo -n $"WARNING"
    fi
    ${SETCOLOR_NORMAL}
    echo -n "]"
    echo 
}

## rabbit官网安装方法  https://www.rabbitmq.com/install-debian.html

install_base() {
    apt update -y
    ##安装基本依赖项和apt HTTPS 传输
    apt -y install curl gnupg apt-transport-https 

}

add_key() {
    ## -------------------
    ## 添加存储库签名密钥

    curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null


    curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null


    curl -1sLf "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.packagecloud.rabbitmq.gpg > /dev/null
    ## -------------------

}



add_list() {
    
    ## 添加源列表文件
    tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
## "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main

## Provides RabbitMQ
##
## "bionic" as distribution name should work for any reasonably recent Ubuntu or Debian release.
## See the release to distribution mapping table in RabbitMQ doc guides to learn more.
deb [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
deb-src [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
EOF
    ## 更新软件源
    apt update -y
}

install_erlang() {

    ## 安装erlang
    apt install -y erlang-base \
                        erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \
                        erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \
                        erlang-runtime-tools erlang-snmp erlang-ssl \
                        erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl


}


install_rabbitmq() {
    ## 安装rabbitmq-server
    apt install rabbitmq-server -y --fix-missing

    ## 启用可视化web操作界面
    rabbitmq-plugins enable rabbitmq_management

    ## 启动rabbitmq服务

    systemctl start rabbitmq-server
    systemctl enable rabbitmq-server

	if [ $? -eq 0 ] ;then 
        color "rabbitmq 安装成功!" 0  
        echo "-------------------------------------------------------------------"
        echo -e "访问rabbitmq链接: \c"
        ${GREEN}"http://$HOST:15672/"${END}
    else 
        color "rabbitmq 安装失败!" 1
        exit 1
    fi

}


install_base
add_key
add_list
install_erlang
install_rabbitmq

1.3 主机名解析

  • 三台机器都要做解析

root@rabbitmq1:~# vi /etc/hosts

10.0.0.110 rabbitmq1
10.0.0.111 rabbitmq2
10.0.0.112 rabbitmq3

1.4 复制erlang.cookie

Rabbitmq 的集群是依赖于 erlang 的集群来工作的,所以必须先构建起 erlang 的集群环境,而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的,这个cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中,文件是 400 的权限,所以必须保证各节点 cookie 保持一致,否则节点之间就无法通信。

#三台机器停止服务
root@rabbitmq1:~# systemctl stop rabbitmq-server
root@rabbitmq2:~# systemctl stop rabbitmq-server
root@rabbitmq3:~# systemctl stop rabbitmq-server

#任意一台erlang.cookie拷贝到其他两台机器

```bash
root@rabbitmq1:~# ll /var/lib/rabbitmq/.erlang.cookie
-r-------- 1 rabbitmq rabbitmq 57 Dec 31 12:39 /var/lib/rabbitmq/.erlang.cookie

#拷贝到其他两台机器
root@rabbitmq1:~# scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.111:/var/lib/rabbitmq/.erlang.cookie
root@rabbitmq1:~# scp /var/lib/rabbitmq/.erlang.cookie 10.0.0.112:/var/lib/rabbitmq/.erlang.cookie

#三台机器启动服务
root@rabbitmq1:~# systemctl start rabbitmq-server
root@rabbitmq2:~# systemctl start rabbitmq-server
root@rabbitmq3:~# systemctl start rabbitmq-server

1.5 查看单节点状态

rabbitmqctl cluster_status

在这里插入图片描述

1.6 创建 RabbitMQ 集群

磁盘节点: rabbitmq3
内存节点: rabbitmq1、rabbitmq2
各节点名称:rabbit@rabbitmq1、 rabbit@rabbitmq2、 rabbit@rabbitmq3


10.0.0.110 rabbitmq1 机器上操作


# 停止app写入服务
root@rabbitmq1:~# rabbitmqctl stop_app 

#清空元数据
root@rabbitmq1:~# rabbitmqctl reset

#将 rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点
root@rabbitmq1:~# rabbitmqctl join_cluster rabbit@rabbitmq3 --ram
Clustering node rabbit@rabbitmq1 with rabbit@rabbitmq3

10.0.0.111 rabbitmq2 机器上操作


# 停止app写入服务
root@rabbitmq2:~# rabbitmqctl stop_app 

#清空元数据
root@rabbitmq2:~# rabbitmqctl reset

#将 rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点
root@rabbitmq2:~# rabbitmqctl join_cluster rabbit@rabbitmq3 --ram
Clustering node rabbit@rabbitmq2 with rabbit@rabbitmq3

1.7 将集群设置为镜像模式

  • 只要在其中一台节点执行以下命令即可:
root@rabbitmq1:~# rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'
Setting policy "ha-all" for pattern "#" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

1.8 验证集群状态


任意一台都行
如10.0.0.112 rabbitmq3 机器上操作

查看集群状态
rabbitmqctl cluster_status

在这里插入图片描述

1.9 web 界面验证集群状态


10.0.0.112 rabbitmq3 机器上操作

创建登录用户
root@rabbitmq3:~# rabbitmqctl add_user tom 123456
Adding user "tom" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.

用户赋予管理员权限
root@rabbitmq3:~# rabbitmqctl set_user_tags tom administrator
Setting tags for user "tom" to [administrator] ...
各服务器启动 web 插件
root@rabbitmq1:~# rabbitmq-plugins enable rabbitmq_management
root@rabbitmq2:~# rabbitmq-plugins enable rabbitmq_management
root@rabbitmq3:~# rabbitmq-plugins enable rabbitmq_management
  • 浏览器输入10.0.0.112:15672,用户名tom,密码123456

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值