部署redis集群管理工具-codis

一、codis 简介

摘自官方:Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说, 连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (有一些命令不支持), 上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作, 所有后边的一切事情, 对于前面的客户端来说是透明的, 可以简单的认为后边连接的是一个内存无限大的 Redis 服务

  • Codis 由四部分组成:
 Codis Proxy (codis-proxy)
Codis Dashboard (codis-config)
Codis Redis (codis-server)
ZooKeeper/Etcd
  • codis-proxy 是客户端连接的 Redis 代理服务, codis-proxy 本身实现了 Redis 协议, 表现得和一个原生的 Redis 没什么区别 (就像 Twemproxy), 对于一个业务来说, 可以部署多个 codis-proxy, codis-proxy 本身是无状态的.
  • codis-config 是 Codis 的管理工具, 支持包括, 添加/删除 Redis 节点, 添加/删除 Proxy 节点, 发起数据迁移等操作. codis-config 本身还自带了一个 http server, 会启动一个 dashboard, 用户可以直接在浏览器上观察 Codis 集群的运行状态.
  • codis-server 是 Codis 项目维护的一个 Redis 分支, 基于 2.8.21 开发, 加入了 slot 的支持和原子的数据迁移指令. Codis 上层的 codis-proxy 和 codis-config 只能和这个版本的 Redis 交互才能正常运行.
  • Codis 依赖 ZooKeeper 来存放数据路由表和 codis-proxy 节点的元信息, codis-config 发起的命令都会通过 ZooKeeper 同步到各个存活的 codis-proxy.
  • Codis 支持按照 Namespace 区分不同的产品, 拥有不同的 product name 的产品, 各项配置都不会冲突.

二、codis安装

1. 环境

go 1.5.4
zookeeper 3.4.7
jdk 1.7

2. 安装 go,所有节点均安装

wget http://www.golangtc.com/static/go/1.5.4/go1.5.4.linux-amd64.tar.gz
tar xvf go1.5.4.linux-amd64.tar.gz -C /data/c-app/
vim /etc/profile
#codis
export GOROOT=/data/c-app/go
export GOPATH=/data/c-app/mygo
source /etc/profile

3. 安装zk

  • 安装 jdk
vim /etc/profile
JAVA_HOME=/usr/local/jdk1.7.0_51
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export JAVA_HOME PATH CLASSPATH
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
source /etc/profile
  • 安装 zookeeper
tar xvf zookeeper-3.4.7.tar.gz -C /data/c-app/
cd /data/c-app/zookeeper-3.4.7/
vim /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper-3.4.7
export PATH=$GOROOT/bin:$ZOOKEEPER_HOME/bin:$PATH
source /etc/profile
  • 配置 zookeeper 集群
mkdir /data/c-app/{zk_data,zk_logs}/{zk-2181,zk-2182,zk-2183} -p
cd /data/c-app/zookeeper-3.4.7/conf
  • cat 1.zoo.cfg
tickTime=2000
dataDir=/data/c-app/zk_data/zk-2181
dataLogDir=/data/c-app/zk_logs/zk-2181
clientPort=2181
initLimit=10
syncLimit=5
server.1=127.0.0.1:20881:30881
server.2=127.0.0.1:20882:30882
server.3=127.0.0.1:20883:30883
  • cat 2.zoo.cfg
tickTime=2000
dataDir=/data/c-app/zk_data/zk-2182
dataLogDir=/data/c-app/zk_logs/zk-2182
clientPort=2182
initLimit=10
syncLimit=5
server.1=127.0.0.1:20881:30881
server.2=127.0.0.1:20882:30882
server.3=127.0.0.1:20883:30883
  • cat 3.zoo.cfg
tickTime=2000
dataDir=/data/c-app/zk_data/zk-2183
dataLogDir=/data/c-app/zk_logs/zk-2183
clientPort=2183
initLimit=10
syncLimit=5
server.1=127.0.0.1:20881:30881
server.2=127.0.0.1:20882:30882
server.3=127.0.0.1:20883:30883

4. 安装 codis,除ZooKeeper节点外其余节点均正常安装

go get -u -d github.com/CodisLabs/codis
cd $GOPATH/src/github.com/wandoulabs/codis
make && make gotest
ln -s $GOPATH/src/github.com/wandoulabs/codis /data/c-app/
cd /data/c-app/codis
mkdir {conf,redis_conf,scripts}

5. 配置 redis,仅需要在redis节点,目前都在codis节点

cd redis_conf

  • cat 6611.conf
daemonize yes
pidfile /var/run/redis_6611.pid
port 6611
logfile "/data/codis_server/logs/codis_6611.log"
save 900 1
save 300 10
save 60 10000
dbfilename 6611.rdb
dir /data/codis_server/data/6611
  • cat 6612.conf
daemonize yes
pidfile /var/run/redis_6612.pid
port 6612
logfile "/data/codis_server/logs/codis_6612.log"
save 900 1
save 300 10
save 60 10000
dbfilename 6612.rdb
dir /data/codis_server/data/6612
  • 这即是一组 redis主从,可以多配置几组redis主从,多口为6621、6622、6631、6632

6. 加入内核參数

echo "vm.overcommit_memory = 1" >>  /etc/sysctl.conf
sysctl -p

7. 分别启动

  • zookeeper
cd /data/c-app/zookeeper-3.4.7/
./bin/zkServer.sh start ./conf/1.zoo.cfg
./bin/zkServer.sh start ./conf/2.zoo.cfg
./bin/zkServer.sh start ./conf/3.zoo.cfg
  • codis-server(redis)
cd /data/c-app/codis/redis_conf/
nohup ./bin/codis-server ./redis_conf/6611.conf &
nohup ./bin/codis-server ./redis_conf/6612.conf &

# 在启动2组,进程如下

[root@ops-jenkins-01 codis]# ps -ef|grep codis
root      6552     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6622                
root      6558     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6621                
root      6564     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6631                
root      6570     1  0 13:35 ?        00:00:00 ./bin/codis-server *:6632                
root      6576 32270  0 13:35 pts/1    00:00:00 grep codis
root     24293     1  0 11:07 ?        00:00:07 ./bin/codis-server *:6611                
root     24299     1  0 11:07 ?        00:00:07 ./bin/codis-server *:6612
  • codis dashboard
    # 配置 dashboard
vim codis-config.ini
zk=127.0.0.1:2181
product=test
dashboard_addr=localhost:18087
proxy_id=proxy_1
proto=tcp4

# 启动 dashboard 服务

 nohup /data/c-app/codis/bin/codis-config dashboard --http-log=/data/c-app/codis/dashboard.log &
[root@ops-jenkins-01 codis]# ps -ef|grep codis
root     24293     1  0 11:07 ?        00:00:00 ./bin/codis-server *:6611                
root     24299     1  0 11:07 ?        00:00:00 ./bin/codis-server *:6612                
root     29326     1  0 11:23 pts/1    00:00:00 /data/c-app/codis/bin/codis-config dashboard --http-log=/data/c-app/codis/dashboard.log

Tips:如果报错:[error]: dashboard already exists: {"addr": "0.0.0.0:18087", "pid": 26035};
这种问题是由于使用了kill -9导致了dashboard服务异常终止,而退出服务的时候没有在zk上清除自已的信息,所以就出现了这种问题。
临时性的解决办法就是:

/data/c-app/zookeeper-3.4.7/bin/zkCli.sh
rmr /zk/codis/db_test/dashboard

# 初始化 slots

./bin/codis-config -c codis-config.ini slot init

# 强制格式化slot

./bin/codis-config -c config.ini slot init -f

8. 访问

codis dashboard的默认端口是18087,我是配置了域名后直接访问

codis dashboard
  • 至此,codis安装成功,下面讲如何配置使用

三、codis 使用

1. 添加codis_server

  • 页面添加


    add codis server 1
  • 命令行添加
./bin/codis-config server add 2 127.0.0.1:6621 master
./bin/codis-config server add 2 127.0.0.1:6622 slave

刷新页面即可看到:

codis server 2

Tips: 点击“Promote to Master”就会将slave的redis提升为master,而原来的master会自己主动下线。

2. 开启分片

  • 页面添加


    part

    slot status
  • 命令行添加

./bin/codis-config -c config.ini slot range-set 512 1023 2 online

# 查看slot


slot status
  • 扩容,在线添加新分片
# 在添加一组 codis_server
./bin/codis-config server add 2 127.0.0.1:6631 master
./bin/codis-config server add 2 127.0.0.1:6632 slave
# 添加新分片
./bin/codis-config -c config.ini slot migrate 256 511 3
solt 3
  • 导入key到 redis,查看主从情况
cat data.txt|./redis-6131/src/redis-cli --pipe -p 6611
group1

3. 配置 codis-proxy

  • 一台机器部署 codis-proxy,试了几次不行,于是决定分布在另外几台机器

。。。未完成,请待之后更新

参考1:官方文档
参考2:郑彦生博客


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容