1. 程式人生 > >在滴滴雲 DC2 雲伺服器上搭建 Codis

在滴滴雲 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