詳解Codis安裝與部署

簡介

Codis 是一個分布式 Redis 解決方案, 對于上層的應(yīng)用來說, 連接到 Codis Proxy 和連接原生的 Redis Server 沒有明顯的區(qū)別 (不支持的命令列表), 上層應(yīng)用可以像使用單機的 Redis 一樣使用, Codis 底層會處理請求的轉(zhuǎn)發(fā), 不停機的數(shù)據(jù)遷移等工作, 所有后邊的一切事情, 對于前面的客戶端來說是透明的, 可以簡單的認(rèn)為后邊連接的是一個內(nèi)存無限大的 Redis 服務(wù).

  • Codis Proxy (codis-proxy)
  • Codis Manager (codis-config)
  • Codis Redis (codis-server)
  • ZooKeeper

codis-proxy 是客戶端連接的 Redis 代理服務(wù), codis-proxy 本身實現(xiàn)了 Redis 協(xié)議, 表現(xiàn)得和一個原生的 Redis 沒什么區(qū)別 (就像 Twemproxy), 對于一個業(yè)務(wù)來說, 可以部署多個 codis-proxy, codis-proxy 本身是無狀態(tài)的.

codis-config 是 Codis 的管理工具, 支持包括, 添加/刪除 Redis 節(jié)點, 添加/刪除 Proxy 節(jié)點, 發(fā)起數(shù)據(jù)遷移等操作. codis-config 本身還自帶了一個 http server, 會啟動一個 dashboard, 用戶可以直接在瀏覽器上觀察 Codis 集群的運行狀態(tài).

codis-server 是 Codis 項目維護的一個 Redis 分支, 基于 2.8.13 開發(fā), 加入了 slot 的支持和原子的數(shù)據(jù)遷移指令. Codis 上層的 codis-proxy 和 codis-config 只能和這個版本的 Redis 交互才能正常運行.

Codis 依賴 ZooKeeper 來存放數(shù)據(jù)路由表和 codis-proxy 節(jié)點的元信息, codis-config 發(fā)起的命令都會通過 ZooKeeper 同步到各個存活的 codis-proxy.

Codis 支持按照 Namespace 區(qū)分不同的產(chǎn)品, 擁有不同的 product name 的產(chǎn)品, 各項配置都不會沖突.

Codis架構(gòu)圖

詳解Codis安裝與部署

v特性

  • 自動平衡
  • 使用非常簡單
  • 圖形化的面板和管理工具
  • 支持絕大多數(shù) Redis 命令,完全兼容twemproxy
  • 支持 Redis 原生客戶端
  • 安全而且透明的數(shù)據(jù)移植,可根據(jù)需要輕松添加和刪除節(jié)點
  • 提供命令行接口
  • RESTful APIs

v安裝步驟

1.1 安裝Go

1.1.1 下載Go壓縮包

習(xí)慣系在最新的環(huán)境虐拓,目前最新版的go是1.12.5的引谜,這里我們就用最新版的金砍。最新版更新可以在這里看英妓。https://golang.org/dl/

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

1.1.2 解壓Go壓縮包

tar -zxvf go1.12.5.linux-amd64.tar.gz

1.1.3 設(shè)置環(huán)境變量

詳解Codis安裝與部署

如圖,go的安裝目錄是 /usr/local

vim /etc/profile

詳解Codis安裝與部署
export GOROOT=/usr/local/go   #設(shè)置為go安裝的路徑
export GOPATH=/usr/local/gopath  #默認(rèn)安裝包的路徑
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

更新/etc/profile, wq保存以舒,使用source /etc/profile命令可以使新建立的環(huán)境變量立刻生效而不用重新啟動系統(tǒng)霎肯。

詳解Codis安裝與部署

1.1.4 helloword go go go

新建一個go文件擎颖,然后運行。

詳解Codis安裝與部署
package main
    import "fmt"

    func main(){
        fmt.Printf("hello,world\n")
 }

1.2 安裝JDK

沒有安裝Java JDK的朋友可以直接看這里观游。《CentOS安裝Java JDK》

1.3 安裝ZooKeeper

1.3.1 下載ZooKeeper壓縮包

wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz

1.3.2 解壓ZooKeeper壓縮包

tar -zxvf zookeeper-3.4.13.tar.gz

1.3.3 刪除ZooKeeper壓縮包

rm -f zookeeper-3.4.13.tar.gz

1.3.4 拷貝配置文件

cd /usr/local/zookeeper-3.4.13/conf

cp zoo_sample.cfg zoo.cfg

vim zoo.cfg

詳解Codis安裝與部署

這個zoo.cfg是zookeeper的配置文件搂捧,這里我搭的是單機版,如果想搭集群版也是通過修改配置文件即可懂缕。

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/usr/local/zookeeper-3.4.13/data    #這里最好自己設(shè)置
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=cnblogs01:8888:9888         #這里修改為自己的主機名或者IP
server.2=cnblogs02:8888:9888
server.3=cnblogs03:8888:9888

創(chuàng)建/usr/local/zookeeper-3.4.13/data文件夾允跑,新建一個myid,寫入1

mkdir data

vim myid

1.3.5 啟動ZooKeeper

/usr/local/zookeeper-3.4.13/bin/zkServer.sh start

詳解Codis安裝與部署

1.4 安裝Codis

1.4.1 安裝Codis

Codis 源代碼需要下載到 $GOPATH/src/github.com/CodisLabs/codis

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

cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2

1.4.2 編譯Codis

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

make

直接通過 make 進(jìn)行編譯,這里報了個錯./autogen.sh:行5: autoconf: 未找到命令

詳解Codis安裝與部署

安裝autoconf

yum install autoconf

安裝autoconf之后,繼續(xù)通過make編譯。

詳解Codis安裝與部署

dashboard,proxy,admin,ha,fe這些codis的組件編譯完成了聋丝。

注意的是索烹,目錄結(jié)構(gòu)一定要是,gopath的自己的定義,單后后面的目錄需要新建弱睦,必須和官網(wǎng)一樣百姓,不一樣,要報錯况木。 $GOPATH/src/github.com/CodisLabs/

1.4.3 啟動codis-dashboard

使用 codis-dashboard-admin.sh腳本啟動 dashboard垒拢,并查看 dashboard 日志確認(rèn)啟動是否有異常。

./admin/codis-dashboard-admin.sh start

tail -100 ./log/codis-dashboard.log.2019-05-26注意:2019-05-26為當(dāng)前日期火惊。

詳解Codis安裝與部署
詳解Codis安裝與部署

1.4.3 啟動codis-proxy

使用 codis-proxy-admin.sh腳本啟動 codis-proxy求类,并查看 proxy 日志確認(rèn)啟動是否有異常。

./admin/codis-proxy-admin.sh start

tail -100 ./log/codis-proxy.log.2019-05-26

詳解Codis安裝與部署

1.4.4 啟動codis-server

使用 codis-server-admin.sh腳本啟動 codis-server矗晃,并查看 redis 日志確認(rèn)啟動是否有異常仑嗅。

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

tail -100 /tmp/redis_6379.log

查看日志如下圖所示宴倍,啟動codis時報錯提示:

21875:M 26 May 20:51:24.154 * Increased maximum number of open files to 10032 (it was originally set to 1024).
21875:M 26 May 20:51:24.154 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use
詳解Codis安裝與部署

因為Redis默認(rèn)端口號就是6379张症,由于之前(centos安裝Redis)設(shè)置了本機默認(rèn)開機啟動Redis,所以6379已被占用鸵贬。

解決方案

如下圖所示俗他,修改/usr/local/gopath/src/github.com/CodisLabs/codis/config/redis.conf配置文件的端口號。改為6380

詳解Codis安裝與部署
詳解Codis安裝與部署

修改端口號以后再通過./admin/codis-server-admin.sh start啟動codis-server阔逼。

tail -100 /tmp/redis_6379.log查看日志如下:

詳解Codis安裝與部署

注意:如果redis.conf中對應(yīng)的logfile也改成6380的話兆衅,查看日志就得用tail -100 /tmp/redis_6380.log

1.4.5 啟動codis-fe

使用 codis-fe-admin.sh腳本啟動 codis-fe,并查看 fe 日志確認(rèn)啟動是否有異常嗜浮。

./admin/codis-fe-admin.sh start

tail -100 ./log/codis-fe.log.2019-05-26

1.5 通過fe添加group

通過web瀏覽器訪問集群管理頁面(fe地址:127.0.0.1:9090) 選擇我們剛搭建的集群 codis-demo羡亩,在 Proxy 欄可看到我們已經(jīng)啟動的 Proxy, 但是 Group 欄為空危融,因為我們啟動的 codis-server 并未加入到集群 添加 NEW GROUP畏铆,NEW GROUP 行輸入 1,再點擊 NEW GROUP 即可 添加 Codis Server吉殃,Add Server 行輸入我們剛剛啟動的 codis-server 地址辞居,添加到我們剛新建的 Group,然后再點擊 Add Server 按鈕即可蛋勺,如下圖所示:

詳解Codis安裝與部署

1.6 通過fe初始化slot

新增的集群 slot 狀態(tài)是 offline瓦灶,因此我們需要對它進(jìn)行初始化(將 1024 個 slot 分配到各個 group),而初始化最快的方法可通過 fe 提供的 rebalance all slots按鈕來做抱完,如下圖所示贼陶,點擊此按鈕,我們即快速完成了一個集群的搭建。

詳解Codis安裝與部署

1.7 通過 ansible 快速部署集群

使用 ansible 可快速在單機每界、多機部署多套 codis 集群捅僵。 ansible 文件夾包含了部署 codis 集群的 playbook,根據(jù)自己部署環(huán)境修改 groups_var/all文件里參數(shù)眨层,修改 hosts 文件添加部署的環(huán)境 IP 即可庙楚。 ansible 安裝也及其簡單,各部署機器無需安裝任何額外的 agent趴樱,彼此之間通過 ssh 通信馒闷。

git clone https://github.com/ansible/ansible.git -b stable-2.3
cd ./ansible
source ./hacking/env-setup
cd $codis_dir/ansible
ansible-playbook -i hosts site.yml

集群配置

2.1 添加Redis實例

這里再分別添加6381、6382兩個Redis實例叁征。

cp config/redis.conf config/redis6381.conf

cp config/redis.conf config/redis6382.conf

分別更新6381纳账、6382.conf的port、pidfile和logfile

vim config/redis6381.conf

更新之后捺疼,啟動新增的兩個Redis實例疏虫。

./bin/codis-server ./config/redis6381.conf

./bin/codis-server ./config/redis6382.conf

詳解Codis安裝與部署

按照上面add server的方法(如下圖)添加兩個實例,注意啤呼,若未執(zhí)行./bin/codis-server ./config/redis6381.conf卧秘,添加時會報錯。

詳解Codis安裝與部署

剛添加進(jìn)來的默認(rèn)狀態(tài)是NO:ONE官扣,如下圖翅敌,點擊小扳手(SLAVEOF 127.0.0.1:6380)。

詳解Codis安裝與部署

測試效果:

詳解Codis安裝與部署

注意:如上圖惕蹄,開啟集群管理之后蚯涮,6380可讀可寫,81和82只有只讀權(quán)限。

2.2 創(chuàng)建新的分組

按照上面步驟繼續(xù)創(chuàng)建7380和7381.

詳解Codis安裝與部署

在Codis ? Dashboard(http://ip:9090/#codis-demo)中添加新的分組和server成員。

詳解Codis安裝與部署
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末芜飘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子棒旗,更是在濱河造成了極大的恐慌,老刑警劉巖鸥滨,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗦哆,死亡現(xiàn)場離奇詭異,居然都是意外死亡婿滓,警方通過查閱死者的電腦和手機老速,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凸主,“玉大人橘券,你說我怎么就攤上這事。” “怎么了旁舰?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵锋华,是天一觀的道長。 經(jīng)常有香客問我箭窜,道長毯焕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任磺樱,我火速辦了婚禮纳猫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘竹捉。我一直安慰自己芜辕,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布块差。 她就那樣靜靜地躺著侵续,像睡著了一般。 火紅的嫁衣襯著肌膚如雪憨闰。 梳的紋絲不亂的頭發(fā)上状蜗,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音起趾,去河邊找鬼诗舰。 笑死警儒,一個胖子當(dāng)著我的面吹牛训裆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蜀铲,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼边琉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了记劝?” 一聲冷哼從身側(cè)響起变姨,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎厌丑,沒想到半個月后定欧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡怒竿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年砍鸠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片耕驰。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡爷辱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饭弓,我是刑警寧澤双饥,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站弟断,受9級特大地震影響咏花,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阀趴,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一迟螺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧舍咖,春花似錦矩父、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至攻柠,卻和暖如春球订,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瑰钮。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工冒滩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人浪谴。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓开睡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親苟耻。 傳聞我的和親對象是個殘疾皇子篇恒,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Codis 3.2 部署配置匯總 概念總結(jié) 集群配置前需要了解架構(gòu),集群分片主要分三種: 客戶端分片:這個需要自己...
    三杯水Plus閱讀 5,971評論 0 11
  • 背景 關(guān)于Redis的高可用除了只身的Sentinel和Cluster之外凶杖,還有一個用的比較多的是Codis胁艰,由于...
    丶Daniel閱讀 639評論 0 1
  • codis架構(gòu) Codis組件 Codis 3.x 由以下組件組成: Codis FE:集群管理界面多個集群實例共...
    volkin閱讀 2,893評論 2 1
  • 1腾么、簡介 redis是目前使用廣泛的中間件,從3.0版本開始官方支持了redis cluster杈湾。理解codis ...
    armo要多讀書閱讀 2,107評論 0 2
  • Redis集群主要有五種方案: 官方cluster方案解虱、twemproxy代理方案、哨兵模式毛秘、Codis饭寺、客戶端分...
    CleverApe閱讀 1,043評論 0 0