最近在負責公司Couchbase版本升級工作,之前只有一台Cache服務器,使用Couchbase Enterprise Edition 1.8,為避免單點故障現在需要新增加一台Cache服務器做負載,並對老版本couchbase進行升級。(以下均在windows系統下操作)

在進行主題之前先提一下Couchbase一些基本概念:在Couchbase的集群架構中,沒有中心節點和Router的概念,這些工作是由Smartclient完成的,在客戶端與couchbase server交互時,Couchbase集群是作為一個黑匣子存在的。客戶端負責客戶程序與群集里獨立節點的通信,首次連接的那個節點並不會充當代理或者風發的角色。Smartclient或Moxi(couchbase server端的proxy組件)會加載vBucket映射表,並決定連接到集群里的哪個節點去獲取和存儲數據。如果集群的拓撲圖改變了(比如執行rebalance或者failover操作),客戶端庫會自動處理任何會話錯誤。可以這樣理解,集群的配置和結構,對應用程序是透明的,你無需去關注。
什么是Buckets,Buckets是獨立的虛擬的數據容器,一個bucket就是couchbase服務器集群中的一個邏輯組,可以被集群中的多個客戶端應用使用。它提供安全的機制來組織、管理、分析數據存儲資源。
什么是vBuckets,一個vBucket定義為couchbase集群里key空間的一個子集的擁有者。通過使用vBuckets,信息在集群里分發更有效。vBucket系統被用於分布式數據,以及支持多節點間的數據復制。
在Couchbase中bucket有兩種類型,一種是couchbase類型,另一種是memcache類型,Couchbase類型bucket支持數據的持久化,因為它的數據是存儲在磁盤上,把活躍的數據讀取到內存中供客戶端使用(后續的備份和Failover也僅是針對着用類型的bucket),而memcache類型的bucket是內存級別的,所有的數據均保存在內存中。現在我們開始切入主題,我們老的couchbase服務器,使用了這兩種類型的bucket,我們使用couchbase類型的bucket存儲的是持久化的數據,供我們的客戶端調用,這部分數據相當重要且不能丟失。
基本思路:
- 備份老的couchbase服務數據
- 將新couchbase服務器加入到老服務器集群中,並通過rebalance同步兩台服務器cache數據
- 修改客戶端Couchbase配置節點
- Failover老服務器進行升級
第一步備份:
根據Couchbase官方說明(http://docs.couchbase.com/couchbase-manual-2.5/cb-install/#getting-started)couchbase由1.8升級到2.0+必須要經過1.8.1版本,這個過程是要對數據類型的升級。
而且couchbase1.8和2.5版本的備份方式不一致,這里提供兩個版本的備份腳本(注意只能備份Couchbase類型的bucket)
| #1.8版本: @echo off echo 開始執行Couchbase buckets備份 cd "C:\Program Files\Couchbase\Server\bin" echo 當前路徑:%cd% cbbackup "C:\Program Files\Couchbase\Server\var\lib\couchbase\data\default-data\default" c:/cbbackup/ pause... |
| #2.5版本 @echo off echo 開始執行Couchbase buckets備份 cd "C:\Program Files\Couchbase\Server\bin" echo 當前路徑:%cd% cbbackup http://localhost:8091 c:/cbbackup/ -u Administrator -p 123456 --single-node pause... |
第二步 將新couchbase服務器加入集群,操作如下:(10.4.18.26老Server,10.4.18.101新Server)
-
打開10.4.18.26 Couchbase 控制台"MANAGE->ServerNodes"節點,單擊"Add Server",如圖:


-
點擊當前頁面的"Pending Rebalance",單擊"Rebalcnce"進行兩台server的數據同步,如圖:

-
系統自動實現數據同步,該過程 可能會持續很長時間,如圖:

說明:Couchbase有兩種類型的Bucket:Couchbase和Memcache,Couchbase類型可實現每台server node擁有完整的副本,支持故障轉移Failover;Memcache不支持Failover,多server node共同實現完整數據。
-
開啟Auto-Failover,保證一台機器down掉,另一台機器能正常工作,操作如圖:

說明:Couchbase默認是關閉Auto-Failover,需要手動開啟,Timeout默認最低為30秒。
第三步 修改客戶端配置節點:
| <servers bucket="default" bucketPassword=""> <add uri="http://10.4.18.101:8091/pools" /> <add uri="http://10.4.18.26:8091/pools" /> </servers> |
說明:在原有uri后添加一個uri
第四步 升級Couchbase版本
升級老版本couchbase直線需要將老的服務從集群中掛起,操作如下:
-
登錄 10.4.18.26 Couchbase 控制台,使用Failover 掛起10.4.18.26服務,如圖:

1.8版本Couchbase升級到2.5版本,要經過1.8.1版本,先停掉Couchbase服務(windows服務),直接運行1.8.1版本couchbase客戶端文件,這個版本會重復安裝兩次,第一次是upgrade 注冊表數據,第二次才是完整的安裝升級,升級完1.8.1,再次進入windows服務關閉couchbase服務,進行2.5版本的升級,該過程只執行一次。
升級完成后,我們需要將服務器重新加入集群,操作如下:
-
Add Back讓10.4.18.26重新加入集群,使用Rebalace同步數據。

整個操作過程看起來簡單,其中做了很多次的實驗和測試,生產環境的更新只能確保萬無一失。測試代碼已分享至github。點擊這里!
