在滴滴雲 DC2 雲伺服器上搭建 Codis
前言
Codis 是什麼
Codis 是 Wandoujia Infrastructure Team 開發的一個分散式 Redis 服務,使用者可以看成是一個無限記憶體的 Redis 服務, 有動態擴/縮容的能力。
Codis 的好處
Redis 有獲得動態擴容/縮容的能力,增減 Redis 例項對 client 完全透明,不需要重啟服務,業務方不需要擔心 Redis 記憶體爆掉的問題和申請太大而造成浪費,也不需要自己維護 Redis。
準備
系統硬體
滴滴雲伺服器 (DC2): 安全可靠,擁有極高的價效比高,為開發者的需求而設計。適合大中小型使用者購買使用。
彈性公網 IP (EIP): 計費靈活,適配各類應用架構。可以滿足使用者各類應用場景需求。
雲盤 (EBS): 採用分散式三副本設計的,為雲伺服器 DC2 提供基於網路連線的持久化塊級資料儲存服務的裝置。
本文示例採用通用型 2核 CPU 4GB記憶體 500G的 EBS 雲盤的伺服器配置.
依賴軟體
系統:CentOS 7.4
Golang 1.11.2
Codis 3.2.2
OpenJDK 1.8.0
ZooKeeper 3.4.13
安裝過程
1.登入伺服器
SSH 登入購買的滴滴雲 DC2 主機
ssh [email protected]
由於安裝軟體需要 root 許可權,切換到 root 賬戶
sudo -i
2.安裝 Golang
下載 Golang 安裝包
wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz
解壓到 /usr/local
tar -C /usr/local -xzf go1.11.2.linux-amd64.tar.gz
新增 Golang的環境變數
vi /etc/profile
export GOROOT=/usr/local/go export GOPATH=/data/goSRC PATH=$PATH:$GOROOT:$GOPATH PATH=$PATH:$HOME/bin export PATH=$PATH:$GOPATH/bin export PATH=$PATH:$GOROOT/bin export PATH
source /etc/profile
出現如下提示則安裝成功
[[email protected] dc2-user]# go env
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/data/goSRC"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build452989403=/tmp/go-build -gno-record-gcc-switches"
3.安裝 Codis
建立 Codis目錄
mkdir -p $GOPATH/src/github.com/CodisLabs
下載 Codis原始碼
cd $GOPATH/src/github.com/CodisLabs/ && git clone https://github.com/CodisLabs/codis.git -b release3.2
編譯
cd codis && make
出現如下提示則編譯成功
tls : 1
cache-oblivious : 1
===============================================================================
go build -i -o bin/codis-dashboard ./cmd/dashboard
go build -i -tags "cgo_jemalloc" -o bin/codis-proxy ./cmd/proxy
go build -i -o bin/codis-admin ./cmd/admin
go build -i -o bin/codis-ha ./cmd/ha
go build -i -o bin/codis-fe ./cmd/fe
檢視編譯後的檔案
ls -l bin/
總用量 129960
drwxr-xr-x 4 root root 117 11月 23 21:20 assets
-rwxr-xr-x 1 root root 23173200 11月 23 21:20 codis-admin
-rwxr-xr-x 1 root root 24469328 11月 23 21:20 codis-dashboard
-rwxr-xr-x 1 root root 22183904 11月 23 21:20 codis-fe
-rwxr-xr-x 1 root root 20910888 11月 23 21:20 codis-ha
-rwxr-xr-x 1 root root 26570112 11月 23 21:20 codis-proxy
-rwxr-xr-x 1 root root 5366512 11月 23 21:19 codis-server
-rwxr-xr-x 1 root root 2432712 11月 23 21:19 redis-benchmark
-rwxr-xr-x 1 root root 2586776 11月 23 21:19 redis-cli
-rwxr-xr-x 1 root root 5366512 11月 23 21:19 redis-sentinel
-rw-r--r-- 1 root root 168 11月 23 21:20 version
cat bin/version
version = 2018-11-04 16:22:35 +0800 @de1ad026e329561c22e2a3035fbfe89dc7fef764 @3.2.2-12-gde1ad02
compile = 2018-11-23 21:19:59 +0800 by go version go1.11.2 linux/amd64
編寫啟動指令碼
vi load.sh
#!/bin/bash
start() {
sh admin/codis-dashboard-admin.sh start &
sh admin/codis-proxy-admin.sh start &
sh admin/codis-server-admin.sh start &
sh admin/codis-fe-admin.sh start &
}
stop() {
sh admin/codis-dashboard-admin.sh stop &
sh admin/codis-proxy-admin.sh stop &
sh admin/codis-server-admin.sh stop &
sh admin/codis-fe-admin.sh stop &
}
restart() {
stop
sleep 5
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
啟動服務
sh load.sh start
4.配置 Codis
通過瀏覽器開啟 ip:9090 即可檢視和操作 Codis。(如果伺服器啟動正常,但是 9090 埠無法訪問,需檢視 DC2 對應的安全組規則。如果 9090 埠不在開放的列表中,需要新增對應的開放規則)
選擇左側的 codis-demo 叢集
建立 Group 1 並向 Group 1 新增 Server
初始化 Slot:輸入並點選 Rebalance All Slots 按鈕,等待初始化完成。
這樣一個簡單的 Codis 服務就搭建好了。通過 Redis-cli 可直連 Proxy 地址檢視資料
5.配置叢集狀態外部儲存為 ZooKeeper
安裝 ZooKeeper( 由於 ZooKeeper 非本文重點,如需 ZooKeeper 叢集搭建請參考本部落格另一篇文章:《在滴滴雲DC2雲伺服器上搭建 ZooKeeper 叢集實戰(一)》
安裝 Java
cd /data/
yum install java
wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
tar -zxvf zookeeper-3.4.13.tar.gz
cd zookeeper-3.4.13/conf
cp zoo_sample.cfg zoo.cfg
啟動 ZooKeeper
cd /data/zookeeper-3.4.13/bin/
sh zkServer.sh start
如下提示即為啟動成功
sh zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /data/zookeeper-3.4.13/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
修改 Codis的配置為 ZooKeeper。對應下文中的 jodis_name、jodis_addr。
cd $GOPATH/src/github.com/CodisLabs/codis/
vi config/proxy.toml
# Set Codis Product Name/Auth.
# 叢集名稱 上文我們操作的叢集 可修改為其他名稱,注意當使用外部狀態儲存時會影響對應的path
product_name = "codis-demo"
product_auth = ""
# Set auth for client session
# 1. product_auth is used for auth validation among codis-dashboard,
# codis-proxy and codis-server.
# 2. session_auth is different from product_auth, it requires clients
# to issue AUTH <PASSWORD> before processing any other commands.
session_auth = ""
# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:11080"
# Set bind address for proxy, proto_type can be "tcp", "tcp4", "tcp6", "unix" or "unixpacket".
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"
# Set jodis address & session timeout
# 1. jodis_name is short for jodis_coordinator_name, only accept "zookeeper" & "etcd".
# 2. jodis_addr is short for jodis_coordinator_addr
# 3. jodis_auth is short for jodis_coordinator_auth, for zookeeper/etcd, "user:password" is accepted.
# 4. proxy will be registered as node:
# if jodis_compatible = true (not suggested):
# /zk/codis/db_{PRODUCT_NAME}/proxy-{HASHID} (compatible with Codis2.0)
# or else
# /jodis/{PRODUCT_NAME}/proxy-{HASHID}
#修改外部儲存為zookeeper。
jodis_name = "zookeeper"
jodis_addr = "127.0.0.1:2181"
jodis_auth = ""
jodis_timeout = "20s"
#為了相容2.0的連結方式開啟此開關
jodis_compatible = true
重啟服務,即可通過 Codis Client 連線 ZooKeeper 來進行 Codis 操作。
參考文獻:
codis官方文件:https://github.com/CodisLabs/codis/blob/release3.2/doc/tutorial_zh.md