前言
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 dc2-user@ip
由于安装软件需要 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
出现如下提示则安装成功
[root@10-254-97-39 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