发布网友 发布时间:2024-09-29 20:40
共1个回答
热心网友 时间:2024-11-10 23:45
RabbitMQ集群镜像模式部署RabbitMQ集群模式有2种普通集群模式(无高可用性): 默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
镜像集群模式(高可用性): 最常用的集群模式,把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。
RabbitMQ集群镜像模式部署过程部署包含三个节点node1,node2和node3的集群。
以 node1 节点为基准,将 node2,node3 节点 加入 node1 节点的集群中。这3个节点是平等的
一. 安装Rabbitmq软件(node1,node2,node3)1.下载Erlang源码并安装wget?https://github.com/erlang/otp/releases/download/OTP-24.0/otp_src_24.0.tar.gztar?zxvf?otp_src_24.0.tar.gzcd?otp_src_24.0./configure?--prefix=/usr/local/erlang?--with-ssl?--enable-threads?--enable-smp-support?--enable-kernel-poll?--enable-hipe?--without-javamakemake?install可能提示错误:configure: error: No curses library functions found 原因:缺少ncurses依赖库 安装ncurses:
wget?http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gztar?-zxvf?ncurses-6.1.tar.gzcd?ncurses-6.1./configure?--with-shared?--without-debug?--without-ada?--enable-overwrite??makemake?install2.下载Rabbitmq源码并安装wget?https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.19/rabbitmq-server-generic-unix-3.8.19.tar.xztar?-xvf?rabbitmq-server-generic-unix-3.8.19.tar.xzmv?rabbitmq_server-3.8.19?/usr/local/3.添加环境变量配置cat?>>?/etc/profile?<<?-'EOF'export?PATH=$PATH:/usr/local/erlang/bin:/usr/local/rabbitmq_server-3.8.19/sbin-EOFsource?/etc/profile4.验证各节点rabbitmq#?启动rabbitmq,-detached代表后台守护进程方式启动。rabbitmq-server?-detached#?查看状态,确定rabbitmq已经成功运行rabbitmqctl?status#?先暂停各节点rabbitmqctl?stop二. 部署Rabbitmq集群1.统一认证Erlang Cookie设置不同节点间同一认证的Erlang Cookie,采用从某个节点copy的方式保持Cookie的一致性。
启动rabbitmq之后会在~/.erlang.cookie或/var/lib/rabbitmq/下生成一个.erlang.cookie隐藏文件,即使你把这个文件给删除了运行rabbitmq-server也会再次生成新的.erlang.cookie。
将node1的.erlang.cookie文件覆盖node2,node3节点上的.erlang.cookie文件(先暂停各节点的rabbitmq服务)。
#?复制?node1节点的.erlang.cookie文件到node2,node3node1:?scp?~/.erlang.cookie?{node2_host_or_ip}:~/.erlang.cookienode1:?scp?~/.erlang.cookie?{node3_host_or_ip}:~/.erlang.cookie#?重新启动node1:?rabbitmq-server?-detachednode2:?rabbitmq-server?-detachednode3:?rabbitmq-server?-detached2.创建并部署集群(在node2,node3上执行):#?node2node2:rabbitmqctl?stop_appnode2:rabbitmqctl?reset#?将node2加入node1节点所在集群node2:rabbitmqctl?join_cluster?rabbit@{node1_host_or_ip}node2:rabbitmqctl?start_appnode2:rabbitmqctl?cluster_status#?node3node3:rabbitmqctl?stop_appnode3:rabbitmqctl?reset#?将node3加入node1节点所在集群node3:rabbitmqctl?join_cluster?rabbit@{node1_host_or_ip}node3:rabbitmqctl?start_appnode3:rabbitmqctl?cluster_status在node1上执行:rabbitmqctl cluster_status 查看节点是否成功加入集群
新建 virtualhost,并创建administrator权限的用户名和密码#?创建名为?demo?的?VirtualHostrabbitmqctl?add_vhost?demo#?添加用户,密码rabbitmqctl?add_user?your_username?your_password#?设置your_username为administrator权限rabbitmqctl?set_user_tags?your_username?administrator#?使用户your_username具有demo这个virtual?host中所有资源的配置、写、读权限以便管理其中的资源rabbitmqctl?set_permissions?-p?demo?your_username?'.*'?'.*'?'.*'将 队列 镜像到所有的rabbitmq集群中rabbitmqctl?set_policy?-p?demo?ha-all?"^"?'{"ha-mode":"all","ha-sync-mode":"automatic"}'其他常用操作命令:
#?查看状态rabbitmqctl?status??#?关闭服务:rabbitmqctl?stop#?关闭应用(关闭当前启动的节点)rabbitmqctl?stop_app#?启动应用,和stop_app关闭命令配合使用,达到清空队列的目的rabbitmqctl?start_app#?创建VirtualHostrabbitmqctl?add_vhost?demo#?启动web管理插件rabbitmq-plugins?enable?rabbitmq_management#?列出角色:rabbitmqctl?list_users#?添加用户,密码rabbitmqctl?add_user?patrick?pwd123#?设置patrick为administrator权限rabbitmqctl?set_user_tags?patrick?administrator#?使用以下命令集群状态,目前相互独立,没有形成集群rabbitmqctl?cluster_status#?rabbitmq设置内存限制系数,?内存限制大小=机器内存?*?系数,eg:?1G?=?4G?*?0.25rabbitmqctl?set_vm_memory_high_watermark?0.4#?剔除集群某个节点NodeXNodeX:?rabbitmqctl?stop_appNodeX:?rabbitmqctl?resetNodeX:?rabbitmqctl?start_app原文:https://juejin.cn/post/7095548498870796319