摘要:昨天讲了 初识Codis ,大概会对 Codis 的版本更替和各组件有个简单的了解,今天我们来说说 Codis 的安装部署,以及安装部署技巧及规范。
一、安装前的环境部署规范
注:
1)所有软件采用编译安装,禁止yum直接安装(如果操作系统不同,有可能导致 yum 版本不一致)
2)软件安装目录均在/home/work下,软链接均在/usr/local下,所有软件均用work账户启动
3)数据存放目录均在/home/work/data下,以 服务+端口号 标识(多实例)
4)Codis 是一个强依赖的zk的项目,而且在 proxy 和 zk 的连接发生抖动造成 session expired 的时候,proxy是不能对外提供服务的,所以尽量保证 proxy 和 zk 部署在同一个机房。生产环境中 zk 一定要是>=3台的奇数台机器
二、开始安装
2.1 依赖组件的安装
[root@redis01 home]# mkdir /home/work
[root@redis01 home]# cd /home/work
[root@redis01 local]# groupadd work
[root@redis01 local]# useradd -g work -s /sbin/nologin -M work
安装golang
[root@redis02 work]# wget https://storage.googleapis.com/golang/go1.8.1.linux-amd64.tar.gz
[root@redis02 work]# tar xf go1.8.1.linux-amd64.tar.gz
[root@redis02 work]# ln -s /home/work/go /usr/local/go
[root@redis02 bin]# sed -i.ori '$a export PATH=$PATH:/usr/local/go/bin\nexport GOPATH=/home/work/codis' /etc/profile
[root@redis02 bin]# source /etc/profile
[root@redis02 bin]# go env GOPATH
/home/worker/codis
安装jdk
[root@redis02 work]# tar xf jdk-8u65-linux-x64.tar.gz
[root@redis02 work]# mv jdk1.8.0_65 jdk
[root@redis02 work]# ln -s /home/work/jdk /usr/local/jdk
[root@redis02 local]# sed -i.ori '$a export JAVA_HOME=/usr/local/jdk\nexport PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH\nexport CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' /etc/profile
[root@redis02 local]# source /etc/profile
[root@redis02 local]# java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
安装zk
[root@redis02 work]# wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
[root@redis02 work]# tar xf zookeeper-3.4.6.tar.gz
[root@redis02 work]# mv zookeeper-3.4.6 zookeeper
[root@redis02 work]# mkdir -p /home/work/data/zookeeper/{data,log}
[root@redis02 zookeeper]# cd /home/work/zookeeper/conf
[root@redis02 conf]# egrep -v '^#|^$' zoo_sample.cfg >zoo.cfg
[root@redis02 conf]# cat zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/home/work/data/zookeeper/data
dataLogDir=/home/work/data/zookeeper/log
clientPort=2181
server.1=10.0.0.6:2888:3888
server.2=10.0.0.7:2888:3888
server.3=10.0.0.8:2888:3888
#注意:2888是主从的通信端口,3888是选举端口,server后面的1,2,3是在data目录下myid文件里的数值
zk配置:设置myid在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,要一一对应
[root@redis02 zookeeper]# cd /home/work/data/zookeeper/data
[root@redis02 data]# pwd
/home/work/data/zookeeper/data
[root@redis02 data]# echo 2 > myid
zk启动:要看到1个leader,两个follower,说明ZK集群正常启动
[root@redis02 data]# /home/work/zookeeper/bin/zkServer.sh start
[root@redis02 data]# /home/work/zookeeper/bin/zkServer.sh status
2.2 Codis 的安装
编译安装 Codis
[root@redis01 work]# mkdir -p $GOPATH/src/github.com/CodisLabs
[root@redis01 codis]# cd $GOPATH/src/github.com/CodisLabs
[root@redis01 CodisLabs]# git clone https://github.com/CodisLabs/codis.git -b release3.2
[root@redis01 codis]# cd $GOPATH/src/github.com/CodisLabs/codis
[root@redis01 codis]# make MALLOC=libc
[root@redis01 codis]# echo $?
0
编译完之后会产生如下文件
[root@redis01 codis]# cd bin/
[root@redis01 bin]# ls
assets codis-dashboard codis-ha codis-server redis-cli version
codis-admin codis-fe codis-proxy redis-benchmark redis-sentinel
三、启动 Codis 各组件
3.1 codis-fe 的启动
[root@redis01 codis]# nohup ./codis-fe --assets-dir=/home/work/codis/assets/ --ncpu=1 --log=/home/work/codis/logs/fe.log --log-level=WARN --zookeeper=127.0.0.1:2181 --listen=0.0.0.0:27001 &
3.2 codis-dashboard 的配置及启动
配置:
[root@redis01 dashboard]# cat dashboard.toml
coordinator_name = "zookeeper"
coordinator_addr = "10.0.0.6:2181,10.0.0.7:2181,10.0.0.8:2181"
product_name = "codis-test01"
admin_addr = "0.0.0.0:18080"
启动:
[root@redis01 codis]# nohup ./codis-dashboard --ncpu=1 --config=/home/work/codis/conf/dashboard/dashboard.toml --log=/home/work/codis/logs/dashboard.log --log-level=WARN &
3.3 codis-server 的配置及启动
配置:
[root@redis01 redis]# cat redis.conf
bind 10.0.0.6
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /home/work/data/codis_6379/redis_6379.pid
loglevel notice
logfile "/home/work/data/codis_6379/redis_6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename 'dump_6379.rdb'
dir /home/work/data/codis_6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly_6379.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
启动:
[root@redis01 codis]# ./codis-server ./conf/redis/redis.conf &
3.4 通过FE添加集群
下面是已经配置好主从的环境,可以登录redis服务器看一眼
初始化slot,把所有的都分配给group1
3.5 codis-proxy 的配置及启动
配置:
[root@redis01 proxy]# cat proxy.toml
product_name = "codis-test01"
admin_addr = "0.0.0.0:11080"
proto_type = "tcp4"
proxy_addr = "0.0.0.0:19000"
jodis_timeout = "20s"
backend_send_bufsize = "128kb"
backend_send_timeout = "30s"
backend_max_pipeline = 20480
启动:
nohup ./codis-proxy --ncpu=1 --config=/home/work/codis/conf/proxy/proxy.toml --log=/home/work/codis/logs/proxy.log --log-level=WARN &
通过fe添加codis proxy
至此一个传统的 Codis 集群搭建完毕,明天计划更新 codis 的命令帮助。
为了方便大家交流,本人开通了微信公众号(关注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜欢技术的一起来交流吧