随着公司的业务量越来越大,并且因为疫情影响,线上办公的需求越来越大。又由于我们公司最近承接了其他公司不能远程办公的人工坐席,所以之前的单实例Redis在将来的压力会变大。为了防止Redis出现单点故障,我们决定搭建Redis集群,以便减少单个Redis的压力。
在综合考察了各个Redis集群方案后,我们决定使用豌豆荚出品的Codis作为我们的集群方案。在此就不比较Codis和官方的Redis Cluster两者之间的区别了,因为每个人使用的情况都不相同。下面就来讲一下生产环境下的Codis的搭建步骤吧,会讲一些官方文档没有提及的部分。
其实基本的搭建步骤官网已经介绍得很清楚了,如果你对Codis的安全性比较感兴趣,希望你继续读下去,其实我们是可以给Codis proxy设置密码的,这样就不用怕别人利用redis的漏洞来做一些危害服务器的操作了。而且经过我实践,如果你通过redis-cli连接Codis,超过一定时间没有操作的话会让你重新输入密码,可以说是比Redis安全性要高一点了。
官方文档也说了,生产环境建议使用zookeeper
或etctd
作为外部存储。这里我们就使用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文件中输入下面三行
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
:
$ mkdir -p $GOPATH/src/github.com/CodisLabs
$ cd $_ && git clone https://github.com/CodisLabs/codis.git -b release3.2
5.编译 Codis 源代码
直接通过make编译,可以看到如下输出:
$ 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(设置一个别人不容易破解的密码,不然裸奔会很危险!参考我之前的一篇文章服务器被入侵了怎么办?)
##################################################
# #
# 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要保持一致
##################################################
# #
# 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的一样,注意我们要配置以下几项:
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,然后使用如下命令修改这两个配置文件:
$ sed -i 's/6379/6378/g' redis-6378.conf
$ sed -i 's/6379/6377/g' redis-6377.conf
这比你通过vim一个一个改方便多了。
启动
1.启动Codis Dashboard
$ nohup ./bin/codis-dashboard --ncpu=4 --config=dashboard.toml \
--log=dashboard.log --log-level=WARN &
2.启动Codis Proxy
$ nohup ./bin/codis-proxy --ncpu=4 --config=proxy.toml \
--log=proxy.log --log-level=WARN &
3.启动Codis Server
$ nohup ./bin/codis-server redis-6377.conf &
$ nohup ./bin/codis-server redis-6378.conf &
$ nohup ./bin/codis-server redis-6379.conf &
3.启动Codis FE(前端管理界面)
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
- 添加codis-server
注意先添加group,再添加server分配到相应group。
好的,基本上到这,一个生产级别的搭建过程基本就算完成了。如果你还需要主从,也可以通过增加三个节点然后通过FE操作,它自动就可以帮助你做好主从同步。
最后再放一张我们生产环境的QPS曲线图:
本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!