1. 程式人生 > >codis叢集搭建

codis叢集搭建

                                                                                             codis分散式叢集部署

1.codis簡介

         Codis是一個分散式 Redis 解決方案, 對於上層的應用來說, 連線到 Codis Proxy 和連線原生的 Redis Server 沒有明顯的區別 (不支援的命令列表), 上層應用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉發, 不停機的資料遷移等工作, 所有後邊的一切事情, 對於前面的客戶端來說是透明的, 可以簡單的認為後邊連線的是一個記憶體無限大的 Redis 服務.

2.codis元件

         Codis基本框架由以下元件組成:

                   1、Codis Proxy

                   客戶端連線的 Redis 代理服務, 實現了 Redis 協議。除部分命令不支援以外,表現的和原生的 Redis沒有區別。

                   2、CodisDashboard

                   叢集管理工具,支援codis-proxy、codis-server 的新增、刪除,以及據遷移等操作。在叢集狀態發生改變時,codis-dashboard 維護叢集下所有 codis-proxy 的狀態的一致性。

                   3、Codis Server

                   基於 Redis 開發,增加了額外的資料結構,提供下層的 Redis 服務。

2.系統環境介紹

         實驗用系統皆為centos7.1

         ip                                  role                                  hostname

         192.168.8.71   codis-proxy               atlan4

         192.168.8.72   codis-server                   atlan5

         192.168.8.73   codis-server             atlan6


3.安裝go語言環境(三臺都做)

         1.下載go語言二進位制包

  wgethttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz

         2.解壓go語言包

 tar zxfhttps://studygolang.com/dl/golang/go1.10.3.linux-amd64.tar.gz -C /usr/local/

         3.配置環境變數

       vi /etc/profile.d/go.sh

                            exportGOPATH=/usr/local/codis

                            exportGOROOT=/usr/local/go

                            exportPATH=$PATH:/usr/local/go/bin

                   source/etc/profile.d/go.sh

         4.設定編譯環境

mkdir -p$GOPATH/src/github.com/CodisLabs

4.下載codis原始碼包並編譯

wgethttps://codeload.github.com/CodisLabs/codis/zip/release3.2

         unzip codis-release3.2.zip

         mv codis-release3.2$GOPATH/src/github.com/CodisLabs/codis

         cd$GOPATH/src/github.com/CodisLabs/codis

         ls

                   admin    bin config  doc         dump.rdb  extern kubernetes  Makefile         pkg        scripts version

                   ansible  cmd deploy  Dockerfile  example  Godeps  log         MIT-LICENSE.txt  README.md vendor   wandoujia_license.txt

         yum install -ygcc git autoconf

         make MALLOC=libc

5.配置一個叢集

       Codis源 碼 編 譯 完 成 後 , 組 件 的 啟 動 腳 本 在GOPATH/src/github.com/CodisLabs/codis/admin目錄下。配置檔案在GOPATH/src/github.com/CodisLabs/codis/config目錄下。日誌在$GOPATH/src/github.com/CodisLabs/codis/log 目錄下。

         1.codis-proxy配置

                   1。安裝jdk

  yum -y install yum -y install java-1.8.0-openjdk*

                   2.安裝zookeeper

  wget http://mirrors.shu.edu.cn/apache/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

                            tar zxfzookeeper-3.4.12.tar.gz -C /usr/local/

                            vim/etc/profile.d/zookeeper.sh

                                     exportZOOKEEPER_HOME=/usr/local/zookeeper-3.4.12

                                     exportPATH=$PATH:/usr/local/go/bin:$ZOOKEEPER_HOME/bin

                            source/etc/profile.d/zookeeper.sh

                   3.配置zookeeper,修改配置檔案

 cp /usr/local/zookeeper-3.4.12/conf/zoo_sample.cfg/usr/local/zookeeper-3.4.12/conf/zoo.cfg

 

                            vim/usr/local/zookeeper-3.4.12/conf/zoo.cfg

                                     tickTime=2000

                                     initLimit=10

                                     syncLimit=5

                                     dataDir=/data/zookeeper

                                     autopurge.snapRetainCount=500

                                     autopurge.purgeInterval=24

                                     clientPort=2181

                                     #server.1=codis-1:2888:3888

                                     #server.2=codis-2:2888:3888

                                     #server.2=codis-3:2888:3888

                            mkdir -pv/data/zookeeper

                            echo"1" > /data/zookeeper/myid

                   設定myid:

                            設定myid在我們配置的dataDir指定的目錄下面,建立一個myid檔案,裡面內容為一個數字,用來標識當前主機,conf/zoo.cfg檔案配置的srver.X中的X為什麼數字,則myid檔案就輸入這個數字,我只有一臺zk,所以配置檔案裡可以不配置server.X,但還是要配置myid的,echo一個數字1進去即可。如果有多臺zk,則分別在zk伺服器上echo對應的數字進對應的myid檔案

                   4.codis結合zookeeper

vim /usr/local/codis/config.ini

                                     zk=localhost:2181  //zookeeper的地址, 如果是zookeeper叢集,可以這麼寫:zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5:2181,如果是etcd,則寫成http://hostname1:port,http://hostname2:port,http://hostname3:port

                                     product=test   //產品名稱, 這個codis叢集的名字, 可以認為是名稱空間, 不同名稱空間的codis沒有交集

                                     proxy_id=proxy_1    //proxy會讀取, 用於標記proxy的名字, 針對多個proxy的情況, 可以使用不同的config.ini, 只需要更改 proxy_id 即可

                                     net_timeout=5                  //檢測狀態時間間隔

                                     dashboard_addr=localhost:18087    //dashboard 服務的地址,CLI 的所有命令都依賴於 dashboard 的 RESTfu

                                     coordinator=zookeeper    //如果用etcd,則將zookeeper替換為etcd

6.啟動順序

start zookeeper //啟動zookeeper服務

   change config items in config.ini //修改codis配置檔案

   ./start_dashboard.sh //啟動 dashboard

   ./start_redis.sh //啟動redis例項

   ./add_group.sh //新增redis組,一個redis組只能有一個master

   ./initslot.sh //初始化槽

    ./start_proxy.sh //啟動proxy

   ./set_proxy_online.sh //上線proxy專案

   open browser to http://localhost:18087/admin //訪問web

7.啟動各個元件

         啟動zookeeper

 [[email protected]]# zkServer.sh start

                            ZooKeeperJMX enabled by default

                            Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg

                            Startingzookeeper ... STARTED

                   [[email protected]]# zkServer.sh status

                            ZooKeeperJMX enabled by default

                            Usingconfig: /usr/local/zookeeper-3.4.12/bin/../conf/zoo.cfg

                            Mode:standalone

         啟動codisproxy

  [[email protected] conf]#/usr/local/codis/src/github.com/CodisLabs/codis/admin/codis-proxy-admin.shstart

                   /usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/proxy.toml

                   startingcodis-proxy ...

                   [[email protected]]# pwd

                            /usr/local/codis/src/github.com/CodisLabs/codis

                   [[email protected]]# tail log/codis-proxy.log.2018-06-30

                            2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca7e0] to192.168.8.72:6379, db-11 round-[0]

                            2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 start service

                            2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306ca960] to192.168.8.72:6379, db-13 round-[0]

                            2018/06/3018:46:49 backend.go:258: [WARN] backend conn [0xc4306caa20] to 192.168.8.72:6379,db-14 start service

                            2018/06/3018:46:49 backend.go:261: [WARN] backend conn [0xc4306caa20] to192.168.8.72:6379, db-14 round-[0]

                            2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/start/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920 []

                            2018/06/3018:46:49 proxy_api.go:44: [WARN] [0xc4200c08f0] API call/api/proxy/sentinels/56883e0042494adb5852cd65a754130f from 192.168.8.71:54920[]

                            2018/06/3018:46:49 proxy.go:293: [WARN] [0xc4200c08f0] set sentinels = []

                            2018/06/3018:46:49 main.go:343: [WARN] rpc online proxy seems OK

                            2018/06/3018:46:50 main.go:233: [WARN] [0xc4200c08f0] proxy is working ...

         啟動codis-server(三臺都啟動)

 [[email protected]]# ./admin/codis-server-admin.sh start

                            /usr/local/codis/src/github.com/CodisLabs/codis/admin/../config/redis.conf

                            startingcodis-server ...

                   [[email protected]]# tail /tmp/redis_6379.log

                            1803:M 30Jun 18:50:36.064 * Background saving terminated with success

                            1803:M 30Jun 18:50:36.064 * Synchronization with slave 192.168.8.72:6379 succeeded

                            1803:M 30Jun 18:50:36.089 * Slave 192.168.8.73:6379 asks for synchronization

                            1803:M 30Jun 18:50:36.089 * Partial resynchronization not accepted: Runid mismatch(Client asked for runid 'd585494bee79e778b05737b465dacffc29dd520e', my runid is'3ce28d86c88e2713dae1180d390e685949873248')

                            1803:M 30Jun 18:50:36.089 * Starting BGSAVE for SYNC with target: disk

                            1803:M 30Jun 18:50:36.089 * Background saving started by pid 1808

                            1808:C 30Jun 18:50:36.090 * DB saved on disk

                            1808:C 30Jun 18:50:36.091 * RDB: 0 MB of memory used by copy-on-write

                            1803:M 30Jun 18:50:36.165 * Background saving terminated with success

                            1803:M 30Jun 18:50:36.165 * Synchronization with slave 192.168.8.73:6379 succeeded

         啟動codisFe

 [[email protected] codis]#./admin/codis-fe-admin.sh start

 

                            startingcodis-fe ...

                   [[email protected]]# tail log/codis-fe.

                            codis-fe.log.2018-06-30  codis-fe.out

                            [[email protected]]# tail log/codis-fe.log.2018-06-30

                            2018/06/3016:58:50 main.go:101: [WARN] set ncpu = 1

                            2018/06/3016:58:50 main.go:104: [WARN] set listen = 0.0.0.0:9090

                            2018/06/3016:58:50 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets

                            2018/06/3016:58:50 main.go:162: [WARN] set --filesystem = /tmp/codis

                            2018/06/3016:58:50 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid

                            2018/06/3018:53:27 main.go:101: [WARN] set ncpu = 1

                            2018/06/3018:53:27 main.go:104: [WARN] set listen = 0.0.0.0:9090

                            2018/06/3018:53:27 main.go:120: [WARN] set assets =/usr/local/codis/src/github.com/CodisLabs/codis/bin/assets

                            2018/06/3018:53:27 main.go:162: [WARN] set --filesystem = /tmp/codis

                            2018/06/3018:53:27 main.go:216: [WARN] option --pidfile =/usr/local/codis/src/github.com/CodisLabs/codis/bin/codis-fe.pid

8.web介面

         瀏覽器訪問http://192.168.8.71:9090即可進入web管理頁面

codis-proxy已經啟用

配置新的codis叢集

先在新建一個組我的是1

新增主機


Data center在此處不需要填,在codis server address中填入codis主機的IP和埠

Group填如你剛才建立的組我的1

完成之後是這樣的


至此codis叢集已經建立完成