基於Codis的Redis集群部署
Codis是基於代理的高性能Redis集群方案,使用Go語言進行開發,現在在在豌豆莢及其它公司內已經廣泛使用,當然也包括我們公司。
Codis與常見的Redis集群方案對比。
在搭建的時候,個人覺得Redis Cluster搭建起來非常容易,但是redis-cluster沒有GUI管理面板,另外查詢資料發現redis-cluster的客戶端實現redis-cluster的協議比較麻煩。
而codis在使用的時候,就像正常連接redis客戶端一樣,不過codis有些命令不支持。動手吧
多看幾眼這個官方架構圖,有助於我們理解codis的架構,方便後面操作
過程
如果編譯安裝codis,安裝codis依賴的庫,使用yum安裝的golang庫默認在/usr/lib/golang目錄下,編譯起來也沒有很麻煩了
yum install golang -y
yum install autoconf -y
下載源文件,並且編譯
cd /usr/lib/golang
mkdir -p src/github.com/CodisLabs
cd src/github.com/CodisLabs/
git clone https://github.com/CodisLabs/codis.git -b release3.2
cd codis
make
然後會得到編譯的文件,不出意外都可以編譯成功,記得安裝linux的開發工具包
在運行命令之前,先看一下運行命令包含的內容
在config目錄下,會有運行幾個組件的配置文件,這些文件都可以使用命令自動生成
codis-dashboard --default-config #生成codis-dashboard的默認配置文件
codis-proxy --default-config #生成codis-proxy的默認配置文件
如果你對zookeeper,etcd等分散式協調組件比較熟悉,這兩個命令生成的配置文件中都可以指定使用zookeeper,或者etcd, jodis是基於codis的redis客戶端。
相關的shell腳本,看一下admin目錄中的內容,都可以理解的,修改下配置文件什麼的
運行集群
./admin/codis-proxy-admin.sh start #dashboard提供REST API管理codis的集群
./admin/codis-proxy-admin.sh start #codis代理,使用的時候連接的是codis-proxy
./admin/codis-fe-admin.sh start #fe,用來提供GUI管理codis的
到這一步的時候,我們已經可以訪問codis的管理界面了,訪問http://127.0.0.1:9090,這個時候codis的管理面板基本上是空的。
運行redis伺服器,就像常規的運行redis伺服器,可以設置slave等相關
./redis-server /etc/redis/redis_6379.conf # 記得設置redis綁定地址或者認證相關
./redis-server /etc/redis/redis_6380.conf #這個設置為6379的slave
設置為redis的slave,指定slaveof 127.0.0.1:6379。
在codis-fe的管理面板中操作
首先添加codis-proxy
然後添加redis-group,可以添加不同的group,然後往group裡面添加伺服器,留意Data Center和Group,正常情況下在每一個組中添加的第一台伺服器都是master,往後都是slave,就算你添加的是另外的master節點,點擊綠色的修復按鈕,新加入的master也會變成slave的。
測試,留意上面的圖片,我添加了兩台codis-proxy,然後4台redis-server,我們可以做測試了。
連接到不同的codis-proxy上面取得的數據都是一樣的,這樣當我們配置多個proxy的時候,其中的proxy掛掉了,也是可以正常使用的,另外通過管理界面,我們可以動態的添加redis-server。
注意點
集群搭建起來,參考官方的文檔也不會很麻煩,完成一整套流程之後,提醒一些搭建的時候要注意的點。
管理面板上的,在管理codis-proxy那一部分,可以看到我們的命令執行情況,命令分配到那一台主機。
加入新的redis-server之後,不要忘記了遷移slot,如果再生產環境遷移slot要注意時機。
redis-proxy可以配置不同的data-center,我想這個在客戶端使用工具的時候可以指定。
配置多個proxy,連接不同的proxy獲取的數據都是一致的,proxy代理的是多個redis-master,數據在後端的redis-server上也是分片存儲的。
如果配置了多個redis-master,也可以說redis-group,每一個master存儲的是部分的數據。
最後
紙上得來終覺淺,在公司內部一般有專門的運維來負責這部分的維護,保證高可用相關內容。另外真正搭建過cods之後,覺得codis比redis-cluster好用一些,除了搭建複雜一點,概念多了一點點,後續使用很簡單了。
※Docker簡單部署Ceph測試集群
※技術分析:資料庫範式那些事
TAG:千鋒JAVA開發學院 |