詳解Codis安裝與部署


Codis github上的介紹安裝,里面很全,而且也有中/英文的,只不過按照github的步驟安裝,會有一些坑,所以有了這么一篇文章。

在上一篇文章《Redis實用監控工具一覽》中,介紹了Redis常用的監控工具,codis是帶有圖形化的面板和管理工具的。於是才有了這么一篇文章。桌面系統:Centos7。

v簡介

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

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

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 交互才能正常運行.

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

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

Codis架構圖

詳解Codis安裝與部署

圖片來源於網絡,侵刪。

v特性

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

注意,為了避免重復造輪子。以上“簡介”部分來自百度百科的摘錄。

v安裝步驟

1.1 安裝Go

1.1.1 下載Go壓縮包

習慣系在最新的環境,目前最新版的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 設置環境變量

詳解Codis安裝與部署

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

vim /etc/profile

詳解Codis安裝與部署

export GOROOT=/usr/local/go   #設置為go安裝的路徑
export GOPATH=/usr/local/gopath  #默認安裝包的路徑
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

更新/etc/profile, wq 保存,使用 source /etc/profile 命令可以使新建立的環境變量立刻生效而不用重新啟動系統。

詳解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    #這里最好自己設置
# 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

創建/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 進行編譯,這里報了個錯 ./autogen.sh:行5: autoconf: 未找到命令

詳解Codis安裝與部署

安裝autoconf

yum install autoconf

安裝autoconf之后,繼續通過 make 編譯。

詳解Codis安裝與部署

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

注意的是,目錄結構一定要是,gopath的自己的定義,單后后面的目錄需要新建,必須和官網一樣,不一樣,要報錯。 $GOPATH/src/github.com/CodisLabs/

1.4.3 啟動codis-dashboard

使用 codis-dashboard-admin.sh 腳本啟動 dashboard,並查看 dashboard 日志確認啟動是否有異常。

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

tail -100 ./log/codis-dashboard.log.2019-05-26 注意:2019-05-26為當前日期。

詳解Codis安裝與部署

詳解Codis安裝與部署

1.4.3 啟動codis-proxy

使用 codis-proxy-admin.sh 腳本啟動 codis-proxy,並查看 proxy 日志確認啟動是否有異常。

./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 日志確認啟動是否有異常。

./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默認端口號就是6379,由於之前(centos安裝Redis)設置了本機默認開機啟動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中對應的logfile也改成6380的話,查看日志就得用 tail -100 /tmp/redis_6380.log

1.4.5 啟動codis-fe

使用 codis-fe-admin.sh 腳本啟動 codis-fe,並查看 fe 日志確認啟動是否有異常。

./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 欄可看到我們已經啟動的 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 狀態是 offline,因此我們需要對它進行初始化(將 1024 個 slot 分配到各個 group),而初始化最快的方法可通過 fe 提供的 rebalance all slots 按鈕來做,如下圖所示,點擊此按鈕,我們即快速完成了一個集群的搭建。

詳解Codis安裝與部署

1.7 通過 ansible 快速部署集群

使用 ansible 可快速在單機、多機部署多套 codis 集群。 ansible 文件夾包含了部署 codis 集群的 playbook,根據自己部署環境修改 groups_var/all 文件里參數,修改 hosts 文件添加部署的環境 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

v集群配置

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的方法(如下圖)添加兩個實例,注意,若未執行 ./bin/codis-server ./config/redis6381.conf ,添加時會報錯。

詳解Codis安裝與部署

剛添加進來的默認狀態是NO:ONE,如下圖,點擊小扳手(SLAVEOF 127.0.0.1:6380)。

詳解Codis安裝與部署

測試效果:

詳解Codis安裝與部署

注意:如上圖,開啟集群管理之后,6380可讀可寫,81和82只有只讀權限。

2.2 創建新的分組

按照上面步驟繼續創建7380和7381.

詳解Codis安裝與部署

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

詳解Codis安裝與部署

v博客總結

本篇文章只聊了codis,不聊集群,如果對集群感興趣的可以看看之前的一篇文章。《詳解Redis Cluster集群》

本文"安裝步驟"段落,大面積采用的是Codis github上的介紹,該段落也可以去github看看。當然本文中也加入了一些github上沒有說的太清楚或者不太好理解的細節。

本來打算在本文中直接介紹springboot引入codis的,但是這篇文章已經很長,排版起來實在不方便。所以關於springboot可以在這里看。《SpringBoot進階教程(五十九)整合Codis》

其他參考資料:


作  者:請叫我頭頭哥
出  處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角推薦一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM