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架構圖
圖片來源於網絡,侵刪。
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 設置環境變量
如圖,go的安裝目錄是 /usr/local
vim /etc/profile
export GOROOT=/usr/local/go #設置為go安裝的路徑
export GOPATH=/usr/local/gopath #默認安裝包的路徑
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
更新/etc/profile, wq
保存,使用 source /etc/profile
命令可以使新建立的環境變量立刻生效而不用重新啟動系統。
1.1.4 helloword go go go
新建一個go文件,然后運行。
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
這個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
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: 未找到命令
安裝autoconf
yum install autoconf
安裝autoconf之后,繼續通過 make
編譯。
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為當前日期。
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
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
因為Redis默認端口號就是6379,由於之前(centos安裝Redis)設置了本機默認開機啟動Redis,所以6379已被占用。
解決方案
如下圖所示,修改 /usr/local/gopath/src/github.com/CodisLabs/codis/config/redis.conf
配置文件的端口號。改為6380
修改端口號以后再通過 ./admin/codis-server-admin.sh start
啟動codis-server。
tail -100 /tmp/redis_6379.log
查看日志如下:
注意:如果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 按鈕即可,如下圖所示:
1.6 通過fe初始化slot
新增的集群 slot 狀態是 offline,因此我們需要對它進行初始化(將 1024 個 slot 分配到各個 group),而初始化最快的方法可通過 fe 提供的 rebalance all slots
按鈕來做,如下圖所示,點擊此按鈕,我們即快速完成了一個集群的搭建。
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
按照上面add server的方法(如下圖)添加兩個實例,注意,若未執行 ./bin/codis-server ./config/redis6381.conf
,添加時會報錯。
剛添加進來的默認狀態是NO:ONE,如下圖,點擊小扳手(SLAVEOF 127.0.0.1:6380)。
測試效果:
注意:如上圖,開啟集群管理之后,6380可讀可寫,81和82只有只讀權限。
2.2 創建新的分組
按照上面步驟繼續創建7380和7381.
在Codis • Dashboard(http://ip:9090/#codis-demo)中添加新的分組和server成員。
v博客總結
本篇文章只聊了codis,不聊集群,如果對集群感興趣的可以看看之前的一篇文章。《詳解Redis Cluster集群》
本文"安裝步驟"段落,大面積采用的是Codis github上的介紹,該段落也可以去github看看。當然本文中也加入了一些github上沒有說的太清楚或者不太好理解的細節。
本來打算在本文中直接介紹springboot引入codis的,但是這篇文章已經很長,排版起來實在不方便。所以關於springboot可以在這里看。《SpringBoot進階教程(五十九)整合Codis》。
其他參考資料:
作 者:請叫我頭頭哥
出 處:http://www.cnblogs.com/toutou/
關於作者:專注於基礎平台的項目開發。如有問題或建議,請多多賜教!
版權聲明:本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。
特此聲明:所有評論和私信都會在第一時間回復。也歡迎園子的大大們指正錯誤,共同進步。或者直接私信我
聲援博主:如果您覺得文章對您有幫助,可以點擊文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!