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,启动服务,添加用户/组,加入主节点集群即可。
注:后一种恢复方案未经过亲自验证。