-
普通集群模式(无高可用性): 默认模式,以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。
-
镜像集群模式(高可用性): 最常用的集群模式,把需要的队列做成镜像队列,存在于多个节点,属于RabbitMQ的HA方案。该模式解决了普通模式中的问题,其实质和普通模式不同之处在于,消息实体会主动在镜像节点间同步,而不是在客户端取数据时临时拉取。
部署包含三个节点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.gz tar zxvf otp_src_24.0.tar.gz cd otp_src_24.0 ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-java make make install
可能提示错误:configure: error: No curses library functions found
原因:缺少ncurses依赖库
安装ncurses:
wget http://ftp.gnu.org/gnu/ncurses/ncurses-6.1.tar.gz tar -zxvf ncurses-6.1.tar.gz cd ncurses-6.1 ./configure --with-shared --without-debug --without-ada --enable-overwrite make make install2.下载Rabbitmq源码并安装
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.19/rabbitmq-server-generic-unix-3.8.19.tar.xz tar -xvf rabbitmq-server-generic-unix-3.8.19.tar.xz mv 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 -EOF source /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,node3 node1: scp ~/.erlang.cookie {node2_host_or_ip}:~/.erlang.cookie node1: scp ~/.erlang.cookie {node3_host_or_ip}:~/.erlang.cookie # 重新启动 node1: rabbitmq-server -detached node2: rabbitmq-server -detached node3: rabbitmq-server -detached2.创建并部署集群(在node2,node3上执行):
# node2 node2:rabbitmqctl stop_app node2:rabbitmqctl reset # 将node2加入node1节点所在集群 node2:rabbitmqctl join_cluster rabbit@{node1_host_or_ip} node2:rabbitmqctl start_app node2:rabbitmqctl cluster_status # node3 node3:rabbitmqctl stop_app node3:rabbitmqctl reset # 将node3加入node1节点所在集群 node3:rabbitmqctl join_cluster rabbit@{node1_host_or_ip} node3:rabbitmqctl start_app node3:rabbitmqctl cluster_status
在node1上执行:rabbitmqctl cluster_status 查看节点是否成功加入集群
新建 virtualhost,并创建administrator权限的用户名和密码# 创建名为 demo 的 VirtualHost rabbitmqctl 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 # 创建VirtualHost rabbitmqctl 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.25 rabbitmqctl set_vm_memory_high_watermark 0.4 # 剔除集群某个节点NodeX NodeX: rabbitmqctl stop_app NodeX: rabbitmqctl reset NodeX: rabbitmqctl start_app
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)