Codis在生产环境的搭建指南

随着公司的业务量越来越大,并且因为疫情影响,线上办公的需求越来越大。又由于我们公司最近承接了其他公司不能远程办公的人工坐席,所以之前的单实例Redis在将来的压力会变大。为了防止Redis出现单点故障,我们决定搭建Redis集群,以便减少单个Redis的压力。

在综合考察了各个Redis集群方案后,我们决定使用豌豆荚出品的Codis作为我们的集群方案。在此就不比较Codis和官方的Redis Cluster两者之间的区别了,因为每个人使用的情况都不相同。下面就来讲一下生产环境下的Codis的搭建步骤吧,会讲一些官方文档没有提及的部分。

其实基本的搭建步骤官网已经介绍得很清楚了,如果你对Codis的安全性比较感兴趣,希望你继续读下去,其实我们是可以给Codis proxy设置密码的,这样就不用怕别人利用redis的漏洞来做一些危害服务器的操作了。而且经过我实践,如果你通过redis-cli连接Codis,超过一定时间没有操作的话会让你重新输入密码,可以说是比Redis安全性要高一点了。

官方文档也说了,生产环境建议使用zookeeperetctd作为外部存储。这里我们就使用zookeeper吧。因为zookeeper是用Java写的,所以前提还要保证你的机器上有jdk。

准备环境

0.安装jdk

这个我推荐大家在Oracle官网找到下载链接,然后在服务器上通过wget下载rpm包,最后再通过rpm -ivh *.rpm安装,这样环境变量也自动帮你配置好了,不用再看网上那么复杂的配置环境变量了。

1.安装zookeeper

这里推荐w3c官网的教程,讲的非常清楚明白。记住你的zookeeper地址和端口,后面需要用。

2.安装Go运行环境

由于Codis是由Go语言编写的,所以我们需要安装Go语言的运行环境,才能编译Codis源码安装。你可以先去Go下载页面获取适合你服务器的安装包,然后解压在/usr/local下。

3.设置编译环境

在/etc/profile文件中输入下面三行

1
2
3
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/usr/local/codis/gopath
export PATH=$PATH:$GOPATH/bin

4.下载Codis源码

Codis 源代码需要下载到 $GOPATH/src/github.com/CodisLabs/codis

1
2
$ mkdir -p $GOPATH/src/github.com/CodisLabs
$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2

5.编译 Codis 源代码

直接通过make编译,可以看到如下输出:

1
2
3
4
5
6
7
8
$ cd $GOPATH/src/github.com/CodisLabs/codis
$ make
make -j -C extern/redis-3.2.8/
... ...
go build -i -o bin/codis-dashboard ./cmd/dashboard
go build -i -o bin/codis-proxy ./cmd/proxy
go build -i -o bin/codis-admin ./cmd/admin
go build -i -o bin/codis-fe ./cmd/fe

修改默认配置文件

1.修改dashboard.toml

注意设置product_name和product_auth(设置一个别人不容易破解的密码,不然裸奔会很危险!参考我之前的一篇文章服务器被入侵了怎么办?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
##################################################
# #
# Codis-Dashboard #
# #
##################################################

# Set Coordinator, only accept "zookeeper" & "etcd"
coordinator_name = "zookeeper"
coordinator_addr = "127.0.0.1:2181"

# Set Codis Product {Name/Auth}.
product_name = "codis-1"
product_auth = "123456"

# Set bind address for admin(rpc), tcp only.
admin_addr = "0.0.0.0:18080"

2.修改proxy.toml

  • 注意product_name和product_auth和dashboard.toml要保持一致
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
##################################################
# #
# Codis-Proxy #
# #
##################################################

# Set Codis Product Name/Auth.
product_name = "codis-1"
product_auth = "123456"

# 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"

3.配置多个codis-server

这里的codis-server其实是codis团队基于Redis3.2.8分支开发。所以配置文件也和redis的一样,注意我们要配置以下几项:

1
2
3
4
5
6
protected-mode no
port 6379
daemonize yes
pidfile "/tmp/redis_6379.pid"
logfile "/tmp/redis_6379.log"
requirepass 123456

因为我们是要搭建集群,建议三个codis-server起步,所以复制两个文件,命名为redis-6378.conf和redis-6377.conf,然后使用如下命令修改这两个配置文件:

1
2
$ sed -i 's/6379/6378/g' redis-6378.conf
$ sed -i 's/6379/6377/g' redis-6377.conf

这比你通过vim一个一个改方便多了。

启动

1.启动Codis Dashboard

1
2
$ nohup ./bin/codis-dashboard --ncpu=4 --config=dashboard.toml \
--log=dashboard.log --log-level=WARN &

2.启动Codis Proxy

1
2
$ nohup ./bin/codis-proxy --ncpu=4 --config=proxy.toml \
--log=proxy.log --log-level=WARN &

3.启动Codis Server

1
2
3
$ nohup ./bin/codis-server redis-6377.conf &
$ nohup ./bin/codis-server redis-6378.conf &
$ nohup ./bin/codis-server redis-6379.conf &

3.启动Codis FE(前端管理界面)

1
2
nohup ./bin/codis-fe --ncpu=4 --log=fe.log --log-level=WARN \
--zookeeper=127.0.0.1:2181 --listen=0.0.0.0:8081 &

注意这里最后一个参数是你要访问的前端地址,但是因为zookeeper已经占用了8080端口,所以你可以改成别的端口。而且为了你在任何地址都可以访问,你可以设置监听ip为0.0.0.0,因为FE是不用密码的,所以端口最好设置一个不常见的,避免被不怀好意的人看到前端页面之后对你的codis集群做出不好的事情。

4.登录FE界面

  • 添加Codis Proxy

image-20200228214650222

  • 添加codis-server

image-20200227233523027

注意先添加group,再添加server分配到相应group。

好的,基本上到这,一个生产级别的搭建过程基本就算完成了。如果你还需要主从,也可以通过增加三个节点然后通过FE操作,它自动就可以帮助你做好主从同步。

最后再放一张我们生产环境的QPS曲线图:

image-20200229155843293


Codis在生产环境的搭建指南
https://www.chuckfang.com/2020/02/18/codis/
作者
方程
发布于
2020年2月18日
许可协议