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的叢集搭建與Redis與spring整合
叢集: 高可用,滿足高併發, 把資料分佈在不同的節點上,提高單個節點的效能 1.redis叢集 架構細節: (1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進位制協議優化傳輸
Postgresql叢集搭建與PostGIS安裝
目錄 Postgresql叢集搭建手冊 一、軟體安裝預先準備工作 二、Postgresql安裝 (附帶PostgreGIS安裝) 2.1 potgresql安裝 2.2 postgres常見錯誤說明 三、PostgreGIS安裝 postGIS 四.Pos