升級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,啟動服務,添加用戶/組,加入主節點集群即可。
注:后一種恢復方案未經過親自驗證。