Rabbitmq集群升级方案

时间:2023-03-09 01:45:52
Rabbitmq集群升级方案

升级Rabbitmq 3.6.3版本至3.6.6版本,升级过程中的一些关键步骤记录


Step 1:

  顺序关闭集群所有节点,这里注意最后一个关闭的节点必须保证为硬盘节点,而非RAM节点;

  centOS 7.x+可使用systemctl工具关闭;

Step 2:

  备份mnesia数据库,数据库路径如下: 

/var/lib/rabbitmq/mnesia 

  其中包含该节点集群信息及持久化内容;

  并将该数据库目录名变更为mnesia_xxxx(如mnesia_backup_20161213),因为新的rabbitmq服务启动后会重新建立mnesia数据库;

Step 3:

  顺序升级所有节点rabbitmq-server版本;

Step 4:

  先启动集群主节点,之后重新创建用户及用户组:

$sudo rabbitmqctl add_user jiak jiak //新增用户
$sudo rabbitmqctl set_user_tags jiak administrator //设置用户组(标签)
$sudo rabbitmqctl set_permissions -p / jiak "." "." ".*" //为用户分配权限

Step 5:

  随后开始启动从节点,启动后仍然先创建用户组,与Step4相同;

  然后将从节点加入主节点集群:

$sudo rabbitmqctl stop_app
$sudo rabbitmqctl join_cluster rabbit@gs-server-xxxx
$sudo rabbitmqctl start_app

Step 6:

  对集群所有从节点重复Step5,直到整个集群所有节点正常启动并加入主节点集群。


上述步骤对非在线升级没有问题,但是升级前队列中的消息,包括host,exchange等信息均会丢失,如果需要保留原有的队列相关信息,需要回复原有mnesia数据库;

以下步骤为恢复方法(该部分未测试):

Step1:顺序停止集群中所有节点服务,确保最后一个中止服务的节点为Disc节点而非RAM节点;

Step2:每个节点原有mnesia数据库改名,最后一个节点的mnesia数据库备份改名;

Step3:升级每个节点的rabbitmq-server版本;

Step4:中止epmd服务(Erlang port mapper daemon),如果/var/lib/rabbitmq/mnesia目录存在,删除掉,然后拷贝备份的mnesia数据库目录过来;

Step5:启动主节点的rabbitmq-server服务,并添加用户及用户组权限;

然后对集群中所有从节点,依次按上一部分的Step5,启动服务,添加用户/组,加入主节点集群即可。

注:后一种恢复方案未经过亲自验证。