Codis 运维D2 - Codis 的安装部署

摘要:昨天讲了 初识Codis ,大概会对 Codis 的版本更替和各组件有个简单的了解,今天我们来说说 Codis 的安装部署,以及安装部署技巧及规范。

 

一、安装前的环境部署规范

223237_H3VH_3023401.png

注:

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服务器看一眼

140234_PAqa_3023401.png

初始化slot,把所有的都分配给group1

140552_bk2G_3023401.png

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

161157_28pr_3023401.png

至此一个传统的 Codis 集群搭建完毕,明天计划更新 codis 的命令帮助。

为了方便大家交流,本人开通了微信公众号(关注看更多精彩)和QQ群,QQ群1(291519319)和QQ群2(659336691)。喜欢技术的一起来交流吧

转载于:https://my.oschina.net/u/3023401/blog/1546856

Codis 和 Redis Cluster 是两种不同的分布式架构方案,它们在客户端的使用上有一些区别: 1. **连接方式**: Codis 通过代理层来提供分片和高可用的功能,客户端需要连接到 Codis 代理层,并通过代理层来操作数据。而 Redis Cluster 是原生的 Redis 分布式方案,客户端可以直接连接到 Redis Cluster 的任意节点,并通过集群内部自动进行数据路由和分片。 2. **命令支持**: Codis 是基于 Redis 的协议实现的代理层,大部分 Redis 命令在 Codis 中都得到了支持。但是由于 Codis 引入了额外的代理层,某些 Redis 命令可能会有一些限制或行为上的差异。而 Redis Cluster 是原生的 Redis 实现,支持完整的 Redis 命令集。 3. **数据路由**: Codis 使用槽(slot)分片方式来将数据分散到不同的后端 Redis 节点上。这意味着在 Codis 中,客户端发送的命令会被转发到相应的后端节点上执行。而 Redis Cluster 使用哈希槽(hash slot)分片方式,将数据根据哈希值映射到不同的槽位,每个槽位对应一个 Redis 节点。客户端发送的命令会被自动路由到正确的节点上。 4. **容错和高可用性**: Codis 和 Redis Cluster 都提供了容错和高可用性的机制。Codis 通过代理层的高可用性来保证服务的可用性,可以通过配置多个代理实例来实现容错和负载均衡。Redis Cluster 则通过在集群中的节点之间进行数据复制和故障转移来提供高可用性。 总的来说,Codis 和 Redis Cluster 在客户端的使用上有一些细微的差别,主要体现在连接方式、命令支持和数据路由等方面。了解这些区别可以帮助你在选择和使用适合自己业务需求的分布式方案时做出明智的决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值