1. 程式人生 > >Codis 3.2 集群搭建與測試

Codis 3.2 集群搭建與測試

rgb zookeepe -a 連接 負載 apple hub oca sent





這裏首選分為四個步驟進行

一、軟件下載

  • codis 3.2.2 https://github.com/CodisLabs/codis/releases

  • codis-src https://codeload.github.com/CodisLabs/codis/zip/release3.2

  • zeepkeeper 3.5.4 http://ftp.twaren.net/Unix/Web/apache/zookeeper/zookeeper-3.5.4-beta/zookeeper-3.5.4-beta.tar.gz

  • jdk 8


codis 是Linux二進制包,下載這個就不用編譯,也不用安裝go環境

codis-src主要是需要裏面的admin目錄的腳本,方便運維。以及config目錄的腳本,用來z配置文件實例。

zeepkeeper 用來充當Storage信息存儲組件,codis支持zookeeper,etcd,filesystem三種方式,建議使用zookeeper

jdk 環境, zookeeper是java寫的,所以需要java環境


我這裏提供一套整合好了本實例整合好的一套codis集群配置,可以到這裏下載




二、搭建的步驟


一)、物理硬件需求

二)、初始化服務環境

三)、部署zookeeper集群

四)、部署codis-dashboard

五)、部署codis-fe管理後臺

六)、部署codis-server加入集群

七)、部署codis-proxy代理服務

八)、部署redis-sentinel實現集群HA

九)、利用redis-benchmark進行集群壓測

十)、codis的一些常見問題以及理解




一)、物理硬件需求

對於測試的環境來說,其實一臺就可以2c4g的機器就可以,沒什麽需求。但我想用於生產環境,所以需求又四臺4c8g的機器來搭建,具體需求的算法根據業務的數據存儲來算,當然也跟業務的繁忙度有關系。我的機器配置如下:

10.21.1.2064C8G
10.21.1.2074C8G
10.21.1.2084C8G
10.21.1.2094C8G





二)、初始化服務環境

需要的環境就一個java環境,這個是zookeeper的依賴,也不是必須的,如果搭建使用的是默認的filesystem,那java環境也不需要了。codis的建議用我提供的實例,省得自己去整合腳本,配置文件,各個實例下載後安裝的目錄如下:

zookeeper/usr/local/zookeeper/
codis/usr/local/codis/
java/usr/local/java/






三)、部署zookeeper集群


  • 10.21.1.206

  • 10.21.1.207

  • 10.21.1.209


1、設置配置文件 /usr/local/zookeeper/conf/zoo.cfg

[root@localhost zookeeper]# cat conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/log
clientPort=2181
maxClientCnxns=300
server.1=10.21.1.206:2888:3888
server.2=10.21.1.207:2888:3888
server.3=10.21.1.208:2888:3888


2、設置zookeeper存儲目錄

mkdir -p /data/zookeeper/log
mkdir -p /data/zookeeper/data


3、設置集群ID


IPmyid位置內容
10.21.1.206/data/zookeeper/data/myid1
10.21.1.207/data/zookeeper/data/myid2
10.21.1.208/data/zookeeper/data/myid3


4、啟動zookeeper集群

#在三個機器分別啟動zookeeper
 /usr/local/zookeeper/bin/zkServer.sh start


5、測試啟動的zookeeper是否成功

## 查看zookeeper狀態
[root@localhost bin]# ./zkServer.sh status
/usr/local/java/bin/java
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

## 進入zookeeper
[root@localhost bin]# ./zkCli.sh 
........
[zk: localhost:2181(CONNECTED) 0]  ls /





四)、部署codis-dashboard


  • 10.21.1.206

1、修改配置文件

# vi /usr/local/codis/conf/dashboard.toml
coordinator_name = "zookeeper"
coordinator_addr = "10.21.1.206:2181,10.21.1.207:2181,10.21.1.208:2181"


默認為filesystem的Storage,修改成使用zookeeper。


2、啟動dashboard

# cd /usr/local/codis
#  ./admin/codis-dashboard-admin.sh start
# ss -tpnl |grep  18080
LISTEN     0      128         :::18080                   :::*                   users:(("codis-dashboard",pid=1017,fd=6))


3、查看日誌排查錯誤

# tail -n 200 /usr/local/codis/log/codis-dashboard.out
# tail -n 200  /usr/local/codis/log/codis-dashboard.log.2018-08-09





五)、10.21.206上部署codis-fe管理後臺


0、部署機器

  • 10.21.1.206


1、修改啟動文件

# 修改存儲文件成zookeeper方式
# vi /usr/local/codis/codis-fe-admin.sh
COORDINATOR_NAME="zookeeper"
COORDINATOR_ADDR="10.21.1.206:2181,10.21.1.207:2181,10.21.1.208:2181"


2、啟動fe

# /usr/local/codis/admin/codis-fe-admin.sh start
# ss -tpnl |grep 9090
LISTEN     0      128         :::9090                    :::*                   users:(("codis-fe",pid=1072,fd=6))


3、打開後臺查看


技術分享圖片






六)、部署codis-server加入集群


0、部署機器

  • 10.21.1.206

  • 10.21.1.207

  • 10.21.1.208

  • 10.21.1.209


1、在四臺機器都啟動codis-server

/usr/local/codis/admin/codis-server-admin.sh start


2、在fe後臺添加兩個Group,每個group分配兩個機器


技術分享圖片


技術分享圖片


技術分享圖片


3、利用fe自動分配插槽slot

技術分享圖片







七)、部署codis-proxy代理服務


0、部署機器

  • 10.21.1.206

  • 10.21.1.207

  • 10.21.1.208


1、修改配置文件proxy.toml,這種zookeeper的jodis地址

jodis_name = "zookeeper"
jodis_addr = "10.21.1.206:2181,10.21.1.207:2181,10.21.1.208:2181"


2、修改啟動文件並啟動

# vi /usr/local/codis/admin/codis-proxy-admin.sh
CODIS_DASHBOARD_ADDR="10.21.1.206:18080"

#  /usr/local/codis/admin/codis-proxy-admin.sh  start

# ss -tpnl |grep 19000
LISTEN     0      128          *:19000                    *:*                   users:(("codis-proxy",pid=1097,fd=5))



3、在fe界面查看proxy

proxy啟動默認會自動註冊到dashboard中,也可以在fe中手動添加技術分享圖片





八)、部署redis-sentinel實現集群HA


0、部署機器


  • 10.21.1.206

  • 10.21.1.207

  • 10.21.1.208


1、修改配置文件

port 26379
dir "/tmp"
protected-mode no


2、啟動sentinel

#sentinel部署官方腳本,是根據codis-server啟動腳本進行修改
/usr/local/codis/admin/codis-sentinel-admin.sh start

# ss -tpnl |grep 26379


3、fe界面添加Sentinels


技術分享圖片

4、點下SYNC,這樣配置文件會自動添加如下內容

# Generated by CONFIG REWRITE
sentinel myid ea5a5c3613f12dbddf469851ecacef8dba60dc23
sentinel monitor codis-demo-2 10.21.1.208 6379 2
sentinel failover-timeout codis-demo-2 300000
sentinel config-epoch codis-demo-2 0
sentinel leader-epoch codis-demo-2 0
sentinel known-slave codis-demo-2 10.21.1.209 6379
sentinel known-sentinel codis-demo-2 10.21.1.207 26379 0757848854fba1295387b9d5b5ca49178e73ebd6
sentinel known-sentinel codis-demo-2 10.21.1.208 26379 7c8ee4b48e5dbbe49f3f999b8746caf0c18e4565
sentinel monitor codis-demo-1 10.21.1.206 6379 2
sentinel failover-timeout codis-demo-1 300000
sentinel config-epoch codis-demo-1 2
sentinel leader-epoch codis-demo-1 2
sentinel known-slave codis-demo-1 10.21.1.207 6379
sentinel known-sentinel codis-demo-1 10.21.1.207 26379 0757848854fba1295387b9d5b5ca49178e73ebd6
sentinel known-sentinel codis-demo-1 10.21.1.208 26379 7c8ee4b48e5dbbe49f3f999b8746caf0c18e4565
sentinel current-epoch 2






九)、利用redis-benchmark進行集群壓測


1、一個proxy壓測,10w次請求,20個並發

./bin/redis-benchmark  -p 19000 -n 100000 -c 20

技術分享圖片

可以看到單proxy幾乎可以達到4w的ops,這是當前集群單proxy的極限,如果進行業務實際應用要參考改值是否符合業務需求。


2、3個proxy同時壓測

技術分享圖片 可以看到多個proxy可以增加ops,所以建議開發的接入使用jodis,通過zookeeper獲取proxy來實現負載均衡,同時也可以明顯的增加集群性能。





十)、codis的一些常見問題以及理解


1、官方幾個組件的說明

  • Codis Server:基於 redis-3.2.8 分支開發。增加了額外的數據結構,以支持 slot 有關的操作以及數據遷移指令。

  • Codis Proxy:客戶端連接的 Redis 代理服務, 實現了 Redis 協議。 除部分命令不支持以外(不支持的命令列表),表現的和原生的 Redis 沒有區別(就像 Twemproxy)。

    • 對於同一個業務集群而言,可以同時部署多個 codis-proxy 實例;

    • 不同 codis-proxy 之間由 codis-dashboard 保證狀態同步。

  • Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、刪除,以及據遷移等操作。在集群狀態發生改變時,codis-dashboard 維護集群下所有 codis-proxy 的狀態的一致性。

    • 對於同一個業務集群而言,同一個時刻 codis-dashboard 只能有 0個或者1個;

    • 所有對集群的修改都必須通過 codis-dashboard 完成。

  • Codis Admin:集群管理的命令行工具。

    • 可用於控制 codis-proxy、codis-dashboard 狀態以及訪問外部存儲。

  • Codis FE:集群管理界面。

    • 多個集群實例共享可以共享同一個前端展示頁面;

    • 通過配置文件管理後端 codis-dashboard 列表,配置文件可自動更新。

  • Storage:為集群狀態提供外部存儲。

    • 提供 Namespace 概念,不同集群的會按照不同 product name 進行組織;

    • 目前僅提供了 Zookeeper、Etcd、Fs 三種實現,但是提供了抽象的 interface 可自行擴展。


2、關於插槽

技術分享圖片


slot總共有1024個,可以根據分組進行調整,如果使用自動平衡,則會均衡分配,比如這裏有兩組,所以一組分配512個插槽。插槽是一種codis虛擬的分配,只是為了方便快速索引,數據最終存儲到後方的redis服務。


3、codis集群的架構圖如下

技術分享圖片






























Codis 3.2 集群搭建與測試