1. 程式人生 > >Codis叢集的搭建與使用

Codis叢集的搭建與使用

一、簡介  

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

Codis架構圖:

以上我們可以看到codis-proxy是單個節點的,因為我們可以通過結合keepalived來實現高可用:

codis-proxy 提供連線叢集redis服務的入口

codis-redis-group 實現redis讀寫的水平擴充套件,高效能

codis-redis 實現redis例項服務,通過codis-ha實現服務的高可用

二、元件說明

codis-proxy : 是客戶端連線的Redis代理服務,codis-proxy 本身實現了Redis協議,表現得和一個原生的Redis沒什麼區別(就像Twemproxy),對於一個業務來說,可以部署多個codis-proxy,codis-proxy本身是沒狀態的。

codis-config :是Codis的管理工具,支援包括,新增/刪除Redis節點,新增/刪除Proxy節點,發起資料遷移等操作,codis-config本身還自帶了一個http server,會啟動一個dashboard,使用者可以直接在瀏覽器上觀察Codis叢集的狀態。

codis-server:是Codis專案維護的一個Redis分支,基於2.8.13開發,加入了slot的支援和原子的資料遷移指令,Codis上層的codis-proxy和codis-config只能和這個版本的Redis互動才能正常執行。

ZooKeeper :用來存放資料路由表和codis-proxy節點的元資訊,codis-config發起的命令都會通過ZooKeeper同步到各個存活的codis-proxy

說明:

    Codis支援按照Namespace區分不同的產品,擁有不同的product name 的產品,各項配置都不會衝突。

實驗環境:

   角色                  ip地址            主機名          
codis-redis-master  192.168.10.128      redis-master             
codis-redis-slave   192.168.10.129      redis-slave
zk,codis-proxy 192.168.10.130 codis-proxy

三、安裝配置(我這裡只部署單個codis-proxy節點的環境),在codis-proxy伺服器上操作:

1、安裝go:

下載安裝包:(貌似海外伺服器才能下載)

wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz

下載後,解壓就可以用了:

[[email protected] ~]# tar -zxf go1.4.1.linux-amd64.tar.gz -C /usr/local/

2、安裝JDK,自己在官網下載一個安裝即可,版本要求不嚴格,後面的zookeeper會用到JDK:

[[email protected] ~]# sh jdk-6u34-fcs-bin-b04-linux-amd64-19_jul_2012.bin
[[email protected] ~]# mv jdk1.6.0_34 /usr/local/
[[email protected] ~]# mv /usr/local/jdk1.6.0_34 /usr/local/jdk

3、安裝zookeeper

[[email protected] ~]# wget http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[[email protected] ~]# tar -xzf zookeeper-3.4.6.tar.gz -C /usr/local/

然後修改環境變數為 vim /etc/profile 在最後新增以下內容:

export GOROOT=/usr/local/go
export GOPATH=/usr/local/codis
JAVA_HOME=/usr/local/jdk
CLASS_PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.6
export PATH=$PATH:$GOROOT/bin:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin

然後執行 source /etc/profile
編輯一個檔案來測試一下go是否正常使用了:

複製程式碼
[[email protected] ~]# cat hello.go 
        package main
    import "fmt"

    func main(){
        fmt.Printf("hello,world\n")
 }
[[email protected] ~]# go run hello.go 
hello,world
複製程式碼

可以看到,正常列印hello,world了,在命令直接輸入java,如果出現一大堆使用說明,就意味java安裝成功了。

 4、安裝codis,安裝codis時依賴go,所以在安裝codis先裝好go,上面已經裝好:

獲取codis:

[[email protected] ~]# yum install -y git
[[email protected] ~]# go get github.com/wandoulabs/codis
package github.com/wandoulabs/codis
        imports github.com/wandoulabs/codis
        imports github.com/wandoulabs/codis: no buildable Go source files in /usr/local/codis/src/github.com/wandoulabs/codis
[[email protected] ~]# 

可以看到no buildable Go source files in /usr/local/codis/src/github.com/wandoulabs/codis,我們在上面環境就是設定GOAPTH=/usr/local/codis,所以只要執行上面的獲取命令,就會下載在/usr/local/codis下:
我們進到提示的路徑進行安裝,安裝過程比較久,耐心等待:

[[email protected] ~]# cd /usr/local/codis/src/github.com/wandoulabs/codis
[[email protected] codis]# ls
bootstrap.sh  cmd  doc  docker  Dockerfile  extern  Godeps  Makefile  MIT-LICENSE.txt  pkg  README.md  sample  test  vitess_license
[[email protected] codis]# sh bootstrap.sh 
downloading dependcies, it may take a few minutes...

執行指令碼完成看,會看到make gotest的結果:

複製程式碼
Hint: To run 'make test' is a good idea ;)

make[2]: Leaving directory `/usr/local/codis/src/github.com/wandoulabs/codis/extern/redis-2.8.13/src'
make[1]: Leaving directory `/usr/local/codis/src/github.com/wandoulabs/codis/extern/redis-2.8.13'
go test ./pkg/... ./cmd/... -race
?       github.com/wandoulabs/codis/pkg/env     [no test files]
ok      github.com/wandoulabs/codis/pkg/models  5.773s
ok      github.com/wandoulabs/codis/pkg/proxy/cachepool 0.009s
?       github.com/wandoulabs/codis/pkg/proxy/group     [no test files]
ok      github.com/wandoulabs/codis/pkg/proxy/parser    0.016s
?       github.com/wandoulabs/codis/pkg/proxy/redisconn [no test files]
?       github.com/wandoulabs/codis/pkg/proxy/redispool [no test files]
ok      github.com/wandoulabs/codis/pkg/proxy/router    16.092s
?       github.com/wandoulabs/codis/pkg/proxy/router/topology   [no test files]
ok      github.com/wandoulabs/codis/pkg/utils   0.008s
ok      github.com/wandoulabs/codis/cmd/cconfig 0.016s
?       github.com/wandoulabs/codis/cmd/proxy   [no test files]
[[email protected] codis]# 
複製程式碼

會在 codis/bin 資料夾生成 codis-config, codis-proxy 兩個可執行檔案, (另外, bin/assets 資料夾是 codis-config 的 dashboard http 服務需要的前端資源, 需要和 codis-config 放置在同一資料夾下)

將編譯好後,把bin目錄和一些指令碼複製過去/usr/local/codis目錄下:

[[email protected] codis]# mkdir -p /usr/local/codis/{log,redis_conf}
[[email protected] codis]# cp -rf bin /usr/local/codis/
[[email protected] codis]# cp sample/config.ini /usr/local/codis/bin/
[[email protected] codis]# cp sample/redis_conf/6381.conf /usr/local/codis/redis_conf/
[[email protected] codis]# cp -rf src/github.com/wandoulabs/codis/sample/* ./

 到止,codis-proxy的環境幾乎搭建好了,下面進行配置:

5、進行配置

在codis-proxy上操作

配置zookeeper,修改配置檔案:

複製程式碼
[[email protected] ~]# cp /usr/local/zookeeper-3.4.6/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.6/conf/zoo.cfg
[[email protected] ~]# cd /usr/local/zookeeper-3.4.6/conf/
[[email protected] conf]# vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/data/zookeeper/data
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
複製程式碼

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

[[email protected] conf]# mkdir -p /data/zookeeper/data
[[email protected] conf]# echo "1" > /data/zookeeper/data/myid

啟動zookeeper,因為環境變數裡已經添加了路徑,直接執行命令即可,執行zkServer.sh start後,要等一會再執行zkServer status:

複製程式碼
[[email protected] ~]# zkServer.sh start
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[[email protected] ~]# zkServer.sh status
JMX enabled by default
Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
Mode: standalone
[[email protected] ~]# 
複製程式碼

在那個目錄下啟動,就在那個目錄下產生一個啟動的日誌zookeeper.out,檢視這個日誌可以檢視是否正常啟動了。由於單個zookeeper,所以這裡指示Mode: standalone,如果有多個zk節點,就只有一個Mode: leader的狀態,別的都是Mode: follower狀態。

由於我現在是做一個機器做zk,所以這裡幾乎不用修改:

複製程式碼
[[email protected] codis]# cd /usr/local/codis
[[email protected] codis]# cat 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 的 RESTful API,所以必須啟動 coordinator=zookeeper //如果用etcd,則將zookeeper替換為etcd [[email protected]1 bin]#
複製程式碼

6、檢視一下啟動流程:

複製程式碼
[[email protected] codis]# cat usage.md 
0. start zookeeper       //啟動zookeeper服務
1. change config items in config.ini  //修改codis配置檔案
2. ./start_dashboard.sh  //啟動 dashboard
3. ./start_redis.sh      //啟動redis例項
4. ./add_group.sh        //新增redis組,一個redis組只能有一個master
5. ./initslot.sh         //初始化槽
6. ./start_proxy.sh      //啟動proxy
7. ./set_proxy_online.sh  //上線proxy專案
8. open browser to http://localhost:18087/admin //訪問web

[[email protected]-proxy codis]# 
複製程式碼

這只是一個參考,有些順序不是必須的,但啟動dashboard前,必須啟動zookeeper服務,這是必須的,後面有很多操作,都可以在web頁面完成,例如新增/刪除組,新增/刪除redis例項等。

7、我們到啟動dashboard這一步了,我們修改一下指令碼,執行即可啟動,修改為如下:(由本來的../修改為./)

[[email protected] codis]# cat start_dashboard.sh 
#!/bin/sh
nohup ./bin/codis-config -c config.ini -L ./log/dashboard.log dashboard --addr=:18087 --http-log=./log/requests.log &>/dev/null &

[[email protected]-proxy codis]# 

啟動後檢視下是否正常啟動了:

[r[email protected] codis]# sh start_dashboard.sh 
[[email protected]-proxy codis]# ps -ef |grep dashboard
root      1463     1  2 20:38 pts/0    00:00:00 ./bin/codis-config -c config.ini -L ./log/dashboard.log dashboard --addr=:18087 --http-log=./log/requests.log
root      1470  1277  0 20:38 pts/0    00:00:00 grep dashboard
[[email protected]-proxy codis]# 


8、初始化槽(修改指令碼,把../修改為./以及把後面的一些暫時沒用的東西註釋掉)

複製程式碼
[[email protected] codis]# cat initslot.sh 
#!/bin/sh
echo "slots initializing..."
./bin/codis-config -c config.ini slot init -f
echo "done"

#echo "set slot ranges to server groups..."
#./bin/codis-config -c  config.ini slot range-set 0 
            
           

相關推薦

Redis叢集搭建維護

一、概述     Redis3.0版本之後支援Cluster. 二、redis cluster安裝     1、下載和解包 cd /usr/local/ wget http://download.redis.io/releases/re

codis叢集搭建筆記

一、安裝Linux虛擬機器 二、安裝go執行環境 https://www.cnblogs.com/xmzncc/p/6218694.html wget http://mirrors.flysnow.org/golang/go1.7.5.linux-amd64.tar.gz 三、安裝JDK

MongoDB叢集搭建java程式碼操作MongoDB示例

MongoDB叢集搭建與java程式碼操作MongoDB示例 MongoDB叢集搭建過程 java使用MongoDB叢集Demo MongoDB叢集搭建過程 1. MongoDB Replica set叢集搭建準備(主從仲裁) 介

Hadoop叢集搭建經驗總結

(002)最近要研發一款資料傳輸服務的產品需要用到Hadoop叢集,之前搭建過後來長時間不用就給忘記了,這次搭好來記錄一下搭建方法與經驗總結 Hadoop叢集的搭建 原料: VM虛擬機器 JDK1.8 hadoop2.7.3 注:將jdk1.8.ta

阿里雲Kubernetes實戰1–叢集搭建服務暴露

前言: 考慮到公司持續整合與docker容器技術實施已有一段時間,取得了不錯的效果,但對於裝置運維、系統隔離、裝置利用率和擴充套件性還有待提升,綜合目前比較成熟的微服務技術,打算把現有業務遷移到K8S叢集。 由於公司所有業務均部署在阿里雲上,最開始就調研了阿里雲自己提供的Kubernetes叢集,但後來還

redis cluster叢集搭建深入分析(1)

對於之前所講的master+slave進行讀寫分離同時通過sentinel叢集保障高可用的架構,對於一般的資料量系統已經足夠。但是對於資料量龐大的T級別的資料,單master可能就無法滿足橫向擴充套件的場景。所以redis cluster支援多master

Solr學習(三)SolrCloud叢集搭建建立Collection

1、什麼是SolrCloud SolrCloud是Solr提供的分散式搜尋方案,當你需要大規模,容錯,分散式索引和檢索能力時使用 SolrCloud。當一個系統的索引資料量少的時候是不需要使用SolrCloud的,當索引量很大,搜尋請求併發很高,這時需要使用SolrCloud來滿足這些需求。

JavaEE進階——Redis叢集搭建快取實現

一、Redis簡介 ​ Redis是一個開源的使用ANSI C語言編寫、支援網路、可基於記憶體亦可持久化的日誌型、Key-Value資料庫,並提供多種語言的API。從2010年3月15日起,Redis的開發工作由VMware主持。從2013年5月開始,Re

Linux Redis叢集搭建簡單使用

介紹安裝環境與版本 用兩臺虛擬機器模擬6個節點,一臺機器3個節點,創建出3 master、3 salve 環境。 redis 採用 redis-3.2.4 版本。 兩臺虛擬機器都是 CentOS ,一臺 CentOS6.5 (IP:192.168.3

codis叢集 搭建

CODIS(release3.2.0)叢集搭建 一、CODIS安裝 注:在Mac下測試需要獨立安裝autoconf (如何安裝autoconf),可能需要關注一下版本。 準備工作:版本可以不一樣,都可以去官網下載 2.2 Go使用版本:go1.5.2.Linux-

codis叢集搭建

                                                                                             codis分散式叢集部署1.codis簡介         Codis是一個分散式 Red

codis3.2.1叢集搭建測試

Codis是一套用go語言編寫的,為了應對高並環境下的redis叢集軟體,原理是對一個redis key操作前,先把這個key通過crc32演算法,分配到不同redis的某一個slot上,實現併發讀寫功能.而且能通過zookeeper呼叫redis-sentinel來實現故障

Linux下Redis叢集搭建測試

叢集搭建 準備條件 一臺已經配置好Redis服務的虛擬機器,地址為: 192.168.2.100:6379 克隆6臺,使用命令nmtui修改地址分別為: 192.168.2.101 192.168.2.102 192.168.2.103 1

Redis 叢集搭建連線

1.Redis 安裝 2.Redis 叢集介紹 2.1 redis-cluster架構圖 edis-cluster把所有的物理節點對映到[0-16383]slot上,cluster 負責維護node<->slot<->value Re

Docker1.7安裝及swarm叢集搭建介紹

Linux centos7上安裝Docker1.7: 開啟頁面:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/,執行以下命令 wget https://download.docker.c

Spark叢集搭建並驗證環境是否搭建成功(三臺機器)

在之前hadoop的基礎上,進行Spark分散式叢集: (1)下載Spark叢集需要的基本軟體,本篇需要的是:Scala-2.10.4、spark-1.4.0-bin-hadoop (2)安裝Spar

spark叢集搭建叢集上執行wordcount程式

Spark 配置 1、master 機器 Spark 配置 進入 Spark 安裝目錄下的 conf 目錄, 拷貝 spark-env.sh.template 到 spark-env.sh。 cp spark-env.sh.template spark-e

spark叢集搭建mysql元資料管理

找個spark叢集搭建是針對於上一篇hadoop的基礎上搭建的。 所以spark的版本也是要按照著hadoop版本進行下載。 1.解壓spark,修改spark的/etc/profile的home目錄。 2.安裝SCALA,並配置SCALA_HOME。 3.修改spar

Redis的叢集搭建Redisspring整合

叢集: 高可用,滿足高併發, 把資料分佈在不同的節點上,提高單個節點的效能 1.redis叢集 架構細節: (1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸

Postgresql叢集搭建PostGIS安裝

目錄 Postgresql叢集搭建手冊 一、軟體安裝預先準備工作 二、Postgresql安裝 (附帶PostgreGIS安裝) 2.1 potgresql安裝 2.2 postgres常見錯誤說明 三、PostgreGIS安裝 postGIS 四.Pos