设为首页 收藏本站
查看: 2564|回复: 2

[经验分享] Codis 3.0 Release (密码验证) 群集部署文档

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-4-20 09:12:28 | 显示全部楼层 |阅读模式
前言:

Codis 3.x 由以下组件组成:

  • Codis Server:基于 redis-2.8.21 分支开发。增加了额外的数据结构,以支持 slot 有关的操作以及数据迁移指令。具体的修改可以参考文档 redis 的修改。
  • Codis Proxy:客户端连接的 Redis 代理服务, 实现了 Redis 协议。 除部分命令不支持以外(不支持的命令列表),表现的和原生的 Redis 没有区别(就像 Twemproxy)。

    • 对于同一个业务集群而言,可以同时部署多个 codis-proxy 实例;
    • 不同 codis-proxy 之间由 codis-dashboard 保证状态同步。

  • Codis Dashboard:集群管理工具,支持 codis-proxy、codis-server 的添加、删除,以及据迁移等操作。在集群状态发生改变时,codis-dashboard 维护集群下所有 codis-proxy 的状态的一致性。

    • 对于同一个业务集群而言,同一个时刻 codis-dashboard 只能有 0个或者1个;
    • 所有对集群的修改都必须通过 codis-dashboard 完成。

  • Codis Admin:集群管理的命令行工具。

    • 可用于控制 codis-proxy、codis-dashboard 状态以及访问外部存储。

  • Codis FE:集群管理界面。

    • 多个集群实例共享可以共享同一个前端展示页面;
    • 通过配置文件管理后端 codis-dashboard 列表,配置文件可自动更新。

  • Codis HA:为集群提供高可用。

    • 依赖 codis-dashboard 实例,自动抓取集群各个组件的状态;
    • 会根据当前集群状态自动生成主从切换策略,并在需要时通过 codis-dashboard 完成主从切换。

  • Storage:为集群状态提供外部存储。

    • 提供 Namespace 概念,不同集群的会按照不同 product name 进行组织;
    • 目前仅提供了 Zookeeper 和 Etcd 两种实现,但是提供了抽象的 interface 可自行扩展。



架构拓扑图
spacer.jpg
wKioL1cWHQGSSjOPAAIV_mtlI-I772.jpg

测试机器信息:

192.168.223.207   codis-proxy-1   codis-fe       codis-server-7001    codis_server-7002
192.168.223.208   codis-proxy-2   codis-ha      codis-server-7001      codis-server-7002
192.168.223.209   codis-proxy-3   codis-dashboard     codis-server-7001    codis-server-7002  


软件下载目录:
/data/packages


1. 安装ZooKeeper群集

Codis 技术交流群: QQ 240361424  已写有一篇zk群集部署文档,此处省略。


2. 安装go环境
cd /data/packages
wget http://golangtc.com/static/go/1.5.2/go1.5.2.linux-amd64.tar.gz
tar zxvf go1.5.2.linux-amd64.tar.gz -C /usr/local/

配置环境变量
vim /etc/profile

JAVA_HOME=/usr/local/java
JRE_HOME=$JAVA_HOME/jre
ZOOKEEPER_HOME=/usr/local/zookeeper
JAVA_FONTS=/usr/local/java/jre/lib/fonts
CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
GOROOT=/usr/local/go
GOPATH=/usr/local/codis/
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$ZOOKEEPER_HOME/bin:$GOROOT/bin:$GOPATH/bin
export JAVA_HOME PATH CLASSPATH JRE_HOME ZOOKEEPER_HOME GOROOT GOPATH

环境变量生效
source /etc/profile

检查go版本
go version
go version go1.5.2 linux/amd64


3. 编译安装codis
go env GOPATH
/usr/local/codis/
go get -u github.com/tools/godep && which godep
/usr/local/codis/bin/godep

4. 下载codis源码,编译安装
cd /data/packages

wget https://codeload.github.com/CodisLabs/codis/zip/release3.0
mv release3.0 codis-3.0.zip
unzip codis-3.0.zip

mkdir -p /usr/local/codis/src/github.com/CodisLabs/
mv codis-release3.0 codis
mv codis /usr/local/codis/src/github.com/CodisLabs/

cd /usr/local/codis/src/github.com/CodisLabs/codis
make

5. 提示出现golang.org/x/net 下载错误,下载源码 net-master 拷贝到对应文件夹
cd /data/packages/

wget https://codeload.github.com/golang/net/zip/master
mv master net-master.zip
unzip net-master.zip
mkdir -p  /usr/local/codis/src/github.com/CodisLabs/codis/Godeps/_workspace/src/golang.org/x/net
cd /usr/local/codis/src/github.com/CodisLabs/codis/Godeps/_workspace/src/golang.org/x/net
cp -raf /data/packages/net-master/*  .

6. 重新编译安装codis源码

cd /usr/local/codis/src/github.com/CodisLabs/codis
make
编译完成后bin目录下生成如下执行文件:
spacer.jpg
wKiom1cWHGXCFmFlAABJo-ldfUA971.jpg
只需一台机器上编译,其余节点复制编译好的执行文件即可。


7. 复制编译后的执行文件到自定义文件夹 (所有节点机器)
cd /usr/local/codis/bin
cp -raf /usr/local/codis/src/github.com/CodisLabs/codis/bin/* .

8.  启动群集服务,创建自定义启动脚本   (所有节点机器)
创建自定义文件夹
mkdir /usr/local/codis/{etc,logs,scripts,data}

8.1  配置 Codis-dashboard   ( 192.168.223.209机器配置 )

配置codis-dashboard 需要首先启动好zookeeper群集,并确定zk群集运行正常。

生成默认配置文件,修改相应配置参数
/usr/local/codis/bin/codis-dashboard --default-config | tee /usr/local/codis/etc/dashboard.toml

cat  /usr/local/codis/etc/dashboard.toml
spacer.jpg
wKiom1cWHICTgIvdAABONyIK_K8782.jpg

编写自定义启动脚本
cd /usr/local/codis/scripts
vim start_codis_dashboard.sh
#!/bin/sh
CODIS_HOME=/usr/local/codis
nohup $CODIS_HOME/bin/codis-dashboard --ncpu=4 --config=$CODIS_HOME/etc/dashboard.toml --log=$CODIS_HOME/logs/dashboard.log --log-level=WARN &



启动codis-dashboard服务
sh start_codis_dashboard.sh
可查看到如下日志信息:
spacer.jpg
wKioL1cWHVfQxlz7AACNuF7ls24764.jpg

检查进程和端口
ps -ef |grep -v gerp |grep codis
netstat -ntpl
spacer.jpg
wKiom1cWHKvwzTg-AABM8rT5xkA247.jpg

8.2  配置 Codis Proxy         (所有节点机器上配置)
生成默认配置文件,修改相应配置参数


/usr/local/codis/bin/codis-proxy --default-config | tee /usr/local/codis/etc/proxy.toml只需修改如下参数:

# Set Codis Product {Name/Auth}.
product_name = "codis-3.0-release-demo"
product_auth = "test123456"

编写自定义启动脚本

cat /usr/local/codis/scripts/start_codis_proxy.sh    (  192.168.223.207 节点机器上 )
#!/bin/sh

CODIS_HOME=/usr/local/codis

# start codis-proxy
nohup $CODIS_HOME/bin/codis-proxy --ncpu=4 --config=$CODIS_HOME/etc/proxy.toml --log=$CODIS_HOME/logs/proxy.log --log-level=WARN &

sleep 3s

# set codis-proxy online
$CODIS_HOME/bin/codis-admin --dashboard=192.168.223.209:18080 --create-proxy -x 192.168.223.207:11080


================================================

cat /usr/local/codis/scripts/start_codis_proxy.sh    (  192.168.223.208 节点机器上 )
#!/bin/sh

CODIS_HOME=/usr/local/codis

# start codis-proxy
nohup $CODIS_HOME/bin/codis-proxy --ncpu=4 --config=$CODIS_HOME/etc/proxy.toml --log=$CODIS_HOME/logs/proxy.log --log-level=WARN &

sleep 3s

# set codis-proxy online
$CODIS_HOME/bin/codis-admin --dashboard=192.168.223.209:18080 --create-proxy -x 192.168.223.208:11080



====================================================

cat /usr/local/codis/scripts/start_codis_proxy.sh    (  192.168.223.209 节点机器上 )
#!/bin/sh

CODIS_HOME=/usr/local/codis

# start codis-proxy
nohup $CODIS_HOME/bin/codis-proxy --ncpu=4 --config=$CODIS_HOME/etc/proxy.toml --log=$CODIS_HOME/logs/proxy.log --log-level=WARN &

sleep 3s

# set codis-proxy online
$CODIS_HOME/bin/codis-admin --dashboard=192.168.223.209:18080 --create-proxy -x 192.168.223.209:11080




启动服务并设置在线状态
sh /usr/local/codis/scripts/start_codis_proxy.sh

检测状态日志如下:
tail -200f  dashboard.log.2016-04-19
spacer.jpg
wKioL1cWHYGyaOgoAABfkN-NHQU237.jpg
tail -200f proxy.log.2016-04-19
spacer.jpg
wKioL1cWHZOgcw-7AACGLU0nSLQ297.jpg



8.3   配置 Codis Server   (所有节点机器上配置)
编辑codis-server 实例配置文件:(  以下配置仅供参考,生产环境请慎用。)
vim /usr/local/codis/etc/codis-server-7001.conf
daemonize yes
pidfile /var/run/redis_7001.pid
port 7001
tcp-backlog 511
timeout 0
tcp-keepalive 0
loglevel notice
logfile "/usr/local/codis/logs/codis-server-7001.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump-7001.rdb
dir /usr/local/codis/data
slave-serve-stale-data yes
slave-read-only yes
repl-disable-tcp-nodelay no
slave-priority 100
requirepass test123456
maxmemory 2G
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
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-entries 512
list-max-ziplist-value 64
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

配置多个实例配置文件:
cp codis-server-7001.conf codis-server-7002.conf
sed -i 's/7001/7002/g' codis-server-7002.conf

复制两组实例配置到所有节点上。
cd /usr/local/codis/etc
scp root@192.168.223.209:/usr/local/codis/etc/*.conf .

编写自定义启动脚本
cat /usr/local/codis/scripts/start_codis_server.sh

#!/bin/sh

CODIS_HOME=/usr/local/codis

$CODIS_HOME/bin/codis-server $CODIS_HOME/etc/7001.conf
$CODIS_HOME/bin/codis-server $CODIS_HOME/etc/7002.conf



启动codis-server 服务
sh /usr/local/codis/scripts/start_codis_server.sh

检查服务状态:
spacer.jpg
wKioL1cWHanAoTYqAABdaYnnpV4469.jpg


8.4   配置 Codis FE  ( 192.168.223.207 机器上配置 )

生成默认配置文件:

/usr/local/codis/bin/codis-admin --dashboard-list --zookeeper=192.168.223.209:2181 | tee /usr/local/codis/etc/codis.jsoncat  /usr/local/codis/etc/codis.json

[
    {
        "name": "codis-3.0-release-demo",
        "dashboard": "192.168.223.209:18080"
    }
]


编写自定义启动脚本
vim  /usr/local/codis/scripts/start_codis_fe.sh
#!/bin/sh

CODIS_HOME=/usr/local/codis

nohup $CODIS_HOME/bin/codis-fe --ncpu=4 --log=$CODIS_HOME/logs/fe.log --log-level=WARN --dashboard-list=$CODIS_HOME/etc/codis.json --listen=0.0.0.0:8080 &

启动codis-fe服务
sh /usr/local/codis/scripts/start_codis_fe.sh

检查状态:
spacer.jpg
wKiom1cWHQCwOW0RAABO5z0fvlM575.jpg
打开浏览器访问:(推荐使用火狐浏览器)
http://192.168.223.207:8080
可以看到如下界面:
spacer.jpg
wKiom1cWHRHTmH5EAAGuSsGhDwc722.jpg


8.5 通过管理界面添加组和实例主从。

打开http://192.168.223.207  输入组编号进行新建,如下:
wKioL1cWHe3S3Kr8AAA5Qi9a7VI822.jpg
spacer.jpg
这里共添加3个组:最终如下所示:
wKioL1cWHgDRkhFUAABJLVNUdEw093.jpg
spacer.jpg
接下来,添加组里面的实例。
wKiom1cWHVfj0VhhAABl3Rdm0xM970.jpg
spacer.jpg
首先输入组编号,在输入实例IP和端口在添加即可。
spacer.jpg
wKiom1cWHXDhEw2hAAB2iZHANAE753.jpg
接下来添加slave实例:
wKioL1cWHkHTz5oSAACm7Av6Uzs219.jpg
spacer.jpg
最后设置主从状态,点击图标即可。
wKioL1cWHliivujKAACzfh_lblw829.jpg
spacer.jpg
最终效果如下:
spacer.jpg
wKiom1cWHaqDxo-tAACxo_doeKI658.jpg

8.6   分配Slots 槽到组里面


操作如下:
spacer.jpg
wKioL1cWHn7jvX9zAABUSHac7Wc977.jpg
可以看到日志 tail -f dashboard.log.2016-04-19
spacer.jpg
wKioL1cWHo_ih3PTAAB-XHydUqs380.jpg
接着分配最后一段范围给第二组,选择OK,然后查看dashboard.log日志,速度非常快,在迁移。
spacer.jpg
wKioL1cWHqLjuyfMAAF5cxuFX_c919.jpg
最终效果如下:
spacer.jpg
wKioL1cWHq7hYLwgAABGOMIyip4515.jpg
这里我只分配两组,剩下的一组用来做迁移测试。



8.7   配置 Codis HA  ( 192.168.223.208 机器上配置,目前3.0版本codis-ha正式支持密码验证)

cat /usr/local/codis/scripts/start_codis_ha.sh
#!/bin/sh

CODIS_HOME=/usr/local/codis

nohup $CODIS_HOME/bin/codis-ha --log=$CODIS_HOME/logs/ha.log --log-level=WARN --dashboard=192.168.223.209:18080 &

启动codis-ha 服务
sh /usr/local/codis/scripts/start_codis_ha.sh

检查状态:
spacer.jpg
spacer.jpg
wKiom1cWHgaDXAgUAAArjPIjPKM672.jpg
wKiom1cWHhfiI-MiAABlCHxbpU8236.jpg

部署到这里,恭喜你已经完成群集部署,接下来可以进行相应的测试。



10. 测试

一、 提供个简单的批量写入shell脚本:
vim redis-key.sh
#!/bin/bash

REDISCLI="/usr/local/packages/redis-2.8.13/src/redis-cli -h 192.168.223.209 -p 19000 -a test123456 -n 0 SET"
ID=1

while [ $ID -le 50000 ]
do
  INSTANCE_NAME="i-2-$ID-VM"
  UUID=`cat /proc/sys/kernel/random/uuid`
  CREATED=`date "+%Y-%m-%d %H:%M:%S"`
  $REDISCLI vm_instance:$ID:instance_name "$INSTANCE_NAME"
  $REDISCLI vm_instance:$ID:uuid "$UUID"
  $REDISCLI vm_instance:$ID:created "$CREATED"
  $REDISCLI vm_instance:$INSTANCE_NAME:id "$ID"
  ID=`expr $ID + 1`
done

运行脚本 sh redis-key.sh

查看管理界面如下:
spacer.jpg
spacer.jpg
wKiom1cWHmKweHjwAAF2DFJ0j3s229.jpg

wKiom1cWHoiA1OwKAAGDwoy7MTU120.jpg

二、使用redis自带压力测试工具redis-benchmark


测试命令事例:
1、/usr/local/packages/redis-2.8.13/src/redis-benchmark -h 192.168.223.207 -p 19000 -c 100 -n 100000
100个并发连接,100000个请求,检测host为localhost 端口为6379的redis服务器性能

2、/usr/local/packages/redis-2.8.13/src/redis-benchmark -h 192.168.223.207 -p 19000 -q -d 100  
测试存取大小为100字节的数据包的性能

3、/usr/local/packages/redis-2.8.13/src/redis-benchmark -h 192.168.223.207 -p 19000 -t set,lpush -n 100000 -q
只测试某些操作的性能

4、/usr/local/packages/redis-2.8.13/src/redis-benchmark -h 192.168.223.207 -p 19000 -n 100000 -q script load "redis.call('set','foo','bar')"
只测试某些数值存取的性能


三、测试codis-ha

首先kill 一个主进程 ,如下:
spacer.jpg
wKioL1cWH2PSPDuEAABXXZlXGOM348.jpg
然后查看codis-ha日志,如下:
spacer.jpg
wKiom1cWHrGwub3wAACVZKXNpQE507.jpg
管理界面会自动剔除连接不上的主实例,如下:
spacer.jpg
wKioL1cWH4CAkMzCAAC1nOyAoIw919.jpg
主实例服务再次起来,需要手动在管理界面重新添加,并需要点击帮手小图标进行同步。恢复后如下:
spacer.jpg
wKiom1cWHs3zqfW2AADEl94ExNI807.jpg



参考链接:
https://github.com/golang/net
https://github.com/CodisLabs/codis/tree/release3.0
https://github.com/CodisLabs/cod ... /doc/tutorial_zh.md



总结:
codis3.0 总体来说改进很大, 部署也越简单化。web管理界面更加完善,各个服务功能清楚明了,并且codis-ha也支持密码验证,但是还是需要外部存储提供群集使用。
由于本人使用虚拟机部署,对性能和稳定性相关测试少,请喜爱codis3.0的童鞋。一起测试。





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-206313-1-1.html 上篇帖子: ubuntu sudo apt-get install 默认安装路径 下篇帖子: vbox 虚拟机 windows 虚拟 ubuntu 共享文件夹设置
累计签到:6 天
连续签到:1 天
发表于 2016-11-25 19:03:13 | 显示全部楼层
文章里边codis-proxy有3个,他们代理的是哪组redis? 这里并没有设置codis-proxy与codis-server进行关联?
codis-ha是否需要单独部署?codis-ha是对哪组codis-server进行监控的?
codis-proxy会不会单点故障,codis-ha是否会单点故障?
客户端连接的地址是codis-proxy配置的地址?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

累计签到:6 天
连续签到:1 天
发表于 2016-11-25 19:05:15 | 显示全部楼层
如果是多个codis-proxy那么客户端到底访问哪个proxy的ip?

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表