ITPub博客

首页 > 应用开发 > IT综合 > rabbitmq 3.11.20集群搭建

rabbitmq 3.11.20集群搭建

原创 IT综合 作者:czxin788 时间:2024-02-23 14:08:15 0 删除 编辑

环境

rabbitmq1
192.168.1.1
rabbitmq2
192.168.1.2
rabbitmq3
192.168.1.3
操作系统内核参数
[ root @rabbitmq06 sbin ] # cat /etc/sysctl.conf 
net . ipv6 . conf . all . disable_ipv6 = 1
net . ipv6 . conf . default . disable_ipv6 = 1
net . ipv4 . ip_local_port_range = 10000 65000
net . ipv4 . tcp_keepalive_time = 300
net . ipv4 . tcp_keepalive_intvl = 30
net . ipv4 . tcp_keepalive_probes = 9
net . ipv4 . tcp_fin_timeout = 3
net . ipv4 . tcp_syn_retries = 1
net . ipv4 . tcp_synack_retries = 1
net . ipv4 . tcp_retries2 = 5
net . ipv4 . tcp_orphan_retries = 3
net . ipv4 . tcp_tw_reuse = 1
net . ipv4 . tcp_max_tw_buckets = 36000
 cat / etc / security / limits . d / 20 - nproc . conf 
*           soft    nproc      100000
*         -        nofile           102400
root       soft    nproc     unlimited

修改三个主机的hostname

hostnamectl set - hostname rabbitmq1
hostnamectl set - hostname rabbitmq2
hostnamectl set - hostname rabbitmq3

修改hosts文件

三个机器都修改
vi /etc/hosts
rabbitmq1 192.168 .1 .1
rabbitmq2 192.168 .1 .2
rabbitmq3 192.168 .1 .3

RabbitMQ版本 和 Erlang 版本兼容性关系

官方安装包下载地址

wget https: //github.com/rabbitmq/rabbitmq-server/releases/download/v3.11.20/rabbitmq-server-generic-unix-3.11.20.tar.xz
wget https: //github.com/rabbitmq/erlang-rpm/releases/download/v25.3.2.3/erlang-25.3.2.3-1.el7.x86_64.rpm
wget http: //www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/socat-1.7.3.2-2.el7.x86_64.rpm

安装C++依赖环境

yum install build - essential openssl openssl - devel unixODBC unixODBC - devel make gcc gcc - c + + kernel - devel m4 ncurses - devel tk tc xz

安装erl相关包

rpm - ivh  erlang - 25.3 .2 .3 - 1. el7 . x86_64 . rpm
rpm - ivh socat - 1.7 .3 .2 - 2. el7 . x86_64 . rpm
root @nxinlcpmws03 ~ ] # erl -v
Erlang / OTP 25 [ erts - 13.2 .2 .2 ] [ source ] [ 64 - bit ] [ smp: 16 : 16 ] [ ds: 16 : 16 : 10 ] [ async - threads: 1 ]

安装rabbitmq

三个节点都安装
tar - xvf rabbitmq - server - generic - unix - 3.11 .20 . tar . xz   - C / opt / rabbitmq
vi / etc / profie
export PATH = / opt / rabbitmq / sbin:$PATH
:wq
source / etc / profie

开启管理界面

三个节点都执行
rabbitmq - plugins enable rabbitmq_management

启动主节点的rabbitmq服务

只启动rabbitmq01的就行
rabbitmq - server - detached

拷贝.erlang.cookie

将rabbitmq01的/root/.erlang.cookie拷贝到rabbitmq02和rabbitmq03的/root目录下。
cookie文件权限必须是400,不然启动时会报错

将其他两个节点加入rabbitmq集群

rabbitmq02和rabbitmq03执行如下:
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit @rabbitmq1 --ram
rabbitmqctl start_app
  • RabbitMQ只要求在集群中至少有一个磁盘节点,所有其他节点可以是内存节点。
  • 若是保证集群信息的高可靠性,建议全部使用磁盘节点。
  • 若是需要提高集群的高可用性,可以保证至少两个磁盘节点和至少一个内存节点。
查看集群状态:
rabbitmqctl cluster_status
可以看到一个disk node和两个ram node

创建用户(集群主节点执行)

// 创建管理用户
# rabbitmqctl add_user admin admin
// 将admin 用户赋予管理员角色,设置用户角色,Tag可以为 administrator,monitoring, management
# rabbitmqctl set_user_tags admin administrator
// 配置用户权限
rabbitmqctl set_permissions [ - p < vhostpath > ] < user > < conf > < write > < read >
# rabbitmqctl set_permissions -p / admin  ".*" ".*" ".*"
上面命令意思是用户名admin具有 / vhost1这个virtual host中所有的配置,写读权限
## 删除默认用户
rabbitmqctl delete_user guest
#修改密码
rabbitmqctl change_password {username} {newpassword}
查看权限
rabbitmqctl list_user_permissions aa
rabbitmqctl list_permissions - p vhost( / sleuth)
// 清除权限
 rabbitmqctl clear_permissions [ - p VHostPath ] User
  // 查看用户列表
 rabbitmqctl list_users

登录管理界面

用户名:admin
密码:q0rJcllv_dtk

镜像队列模式集群

通过前面的步骤搭建的集群属于普通模式集群,是通过共享元数据实现集群。
开启镜像队列模式需要在管理页面添加策略,添加方式有两种:
1、通过命令的方式:
     设置ha模式(集群主节点执行)
    rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
测试一下上面策略是否生效
控制台queue tab页面添加一个测试用的queue  ,  install-test-queue
2、通过管理页面方式:
进入管理页面 -> Admin -> Policies(在页面右侧)-> Add / update a policy 在表单中填入:
参数说明:
name: 策略名称,如果使用已有的名称,保存后将会修改原来的信息
Apply to:策略应用到什么对象上
Pattern:策略应用到对象时,对象名称的匹配规则(正则表达式)
Priority:优先级,数值越大,优先级越高,相同优先级取最后一个
Definition:策略定义的内容,对于镜像队列的配置来说,只需要包含3个部分: ha-mode 、ha-params 和 ha-sync-mode。其中,ha-sync-mode是同步的方式,自动还是手动,默认是自动。ha-mode 和 ha-params 组合使用。组合方式如下:
镜像队列模式相比较普通模式,镜像模式会占用更多的带宽来进行同步,所以镜像队列的吞吐量会低于普通模式。但普通模式不能实现高可用,某个节点挂了后,这个节点上的消息将无法被消费,需要等待节点启动后才能被消费。

将rabbitmq设置为开机启动

cat / usr / lib / systemd / system / rabbitmq - server . service 
[ Unit ]
Description = RabbitMQ broker
After = syslog . target network . target
[ Service ]
#Type=notify
User = root
Group = root
WorkingDirectory = / opt / rabbitmq_server - 3.11 .20 /
ExecStart = / opt / rabbitmq_server - 3.11 .20 / sbin / rabbitmq - server
ExecStop = / opt / rabbitmq_server - 3.11 .20 / sbin / rabbitmqctl stop
[ Install ]
WantedBy = multi - user . target
systemctl start rabbitmq - server
systemctl enablerabbitmq - server

启停mq

rabbitmqctl stop

虚拟主机的操作

## 增加一个虚拟主机
rabbitmqctl add_vhost / cloudmall
## 查看所有的虚拟主机
rabbitmqctl list_vhosts
## 查看虚拟主机的权限
rabbitmqctl list_permissions - p / cloudmall
## 删除虚拟主机
rabbitmqctl delete_vhost / cloudmall

操作队列命令

## 查询所有队列
rabbitmqctl list_queues
# 清除队列消息
rabbitmqctl - p vhostpath purge_queue blue

rabbitmq常用管理命令

剔除节点、版本升级 : https://mp.weixin.qq.com/s/TgF47zAkkZsLLFD4kByWEg
异常断电,节点启动先后顺序 : https://mp.weixin.qq.com/s/vAIOHXWXtpOxbJ2DGHQSsQ
设置内存比例
rabbitmqctl set_vm_memory_high_watermark 0.8
内存回收
rabbitmqctl eval 'supervisor2:terminate_child(rabbit_mgmt_sup_sup, rabbit_mgmt_sup),rabbit_mgmt_sup_sup:start_child().'
rabbitmq日志路经 :/opt/rabbitmq_server-3.11.15/var/log/rabbitmq
rabbitmqctl status 查看节点状态
rabbitmqctl stop [pid_file] 停止运行的RabbitMQ的Erlang虚拟机和RabbitMQ服务应用 如果指定了pid_file,还需要等待指定进程的结束。pid_file是通过调用rabbitmq-server命令启动RabbitMQ服务时创建的,默认情况下存放于Mnesia目录中。 如果使用rabbitmq-server -detach这个带有-detach后缀的命令来启动RabbitMQ服务则不会生成pid_file文件。
rabbitmqctl stop_app 停止RabbitMQ服务应用,但是Erlang虚拟机还是处于运行状态 此命令的执行优先于其他管理操作(这些操作需要先停止RabbitMQ应用,如rabbitmqctl reset)
rabbitmqctl start_app 启动RabbitMQ应用,此命令典型的用途就是执行了其他管理操作之后,重新启动之前停止的RabbitMQ应用。
rabbitmqctl reset 将RabbitMQ节点重置还原到最初状态 包括从原来的集群中删除此节点,从管理 数据库 中删除所有的配置数据,如已配置的用户,vhost等,以及删除所有的持久化数据 执行rabbitmqctl reset 命令前必须停止RabbitMQ应用
rabbitmqctl force_reset 强制将RabbitMQ节点重置还原到最初状态。此命令不论当前管理数据库的状态和集群配置是什么,都会无条件的重置节点,只能在数据库或集群配置已损坏的情况下使用
rabbitmqctl [-n nodename] join_cluster {cluster_node} [—ram] 将节点加入指定的集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点。 -n nodename:指定需要操作的目标节点,如rabbit@node1 cluster_node:需要加入的集群节点名,如rabbit@node2 —ram:集群节点类型,有ram,disc两种,默认为disc
  • ram 内存节点,所有元数据都存储在内存中
  • disc 磁盘节点,所有元数据都存储在磁盘中
rabbitmqctl cluster_status 查看集群状态
rabbitmqctl change_cluster_node_type {disc|ram} 修改集群节点的类型,使用此命令前要停止RabbitMQ应用
rabbitmqctl forget_cluster_node [—offline] 将节点从集群中删除,允许离线执行
rabbitmqctl update_cluster_nodes {clusternode} 在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群
rabbitmqctl force_boot 确保节点可以启动,即使它不是最后一个关闭的节点
rabbitmqctl set_cluster_name {name} 设置集群名称。集群名称在客户端连接时会通报给客户端 集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28916011/viewspace-3007179/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: apollo部署文档
请登录后发表评论 登录
全部评论

注册时间:2014-06-03

  • 博文量
    233
  • 访问量
    858421