Codis集成方法的具体搭建与部署

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

codis的话我也是绕了不少的坑,终于在研究了一周以后就搭出来了,

https://github.com/wandoulabs/codis

下面是github上面的源代码,但是介绍相对简单了点

https://github.com/wandoulabs/codis/blob/master/doc/tutorial_zh.md

我细细说吧

Codis 由四部分组成:

  • Codis Proxy   (codis-proxy)//是客户端连接的 Redis 代理服务,客户端访问proxy结构,它在根据相应的均衡算法在redis里进行存储

  • Codis Manager (codis-config)//一些dashborad等配置

  • Codis Redis   (codis-server)//redis服务器

  • ZooKeeper或者etcd//它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。

安装的话非常简单,按照他的步骤


go get -d github.com/wandoulabs/codis
cd $GOPATH/src/github.com/wandoulabs/codis
./bootstrap.sh
make gotest

基本上没有太大的问题,如果 github.com/wandoulabs/codis 下载有问题的话,也可以直接放在$GOPATH/src目录下

接着就是运行,运行的话建议运行sample里面现成的shell文件,注意在此之前要运行zookeeper或者etcd

zk=localhost:2181   <- zookeeper的地址, 如果是zookeeper集群,可以这么写: zk=hostname1:2181,hostname2:2181,hostname3:2181,hostname4:2181,hostname5:2181
如果是etcd,则写成http://hostname1:port,http://hostname2:port,http://hostname3:port
product=test        <- 产品名称, 这个codis集群的名字, 可以认为是命名空间, 不同命名空间的codis没有交集
proxy_id=proxy_1    <- proxy会读取, 用于标记proxy的名字, 针对多个proxy的情况, 可以使用不同的config.ini, 只需要更改 proxy_id 即可
dashboard_addr=localhost:18087   <- dashboard 服务的地址,CLI 的所有命令都依赖于 dashboard 的 RESTful API,所以必须启动
coordinator=zookeeper  <- 如果用etcd,则将zookeeper替换为etcd

这里要注意下,zk中etcd和zookeeper的区别

然后可以直接启动 startall.sh,不过这里建议还是分别启动,因为有些可能和实际情况不同./

./start_dashboard.sh

可以查看代码,addr是端口号,http-log是存放端口的位置,config.ini就是之前的配置文件

启动start_redis.sh,如果存在主从,或者需要修改端口的话还需要在里面修改,

#!/bin/sh
for i in 638{0..3}; do
    nohup ../bin/codis-server ./redis_conf/${i}.conf &> ./log/redis_${i}.log &
done
echo "sleep 3s"
sleep 3
tail -n 30 ./log/redis_*.log

然后启动add_group.sh

let group=0
for port in 638{0..3}; do
    let group="1+group"
    echo "add group $group with a master(localhost:$port), Notice: do not use localhost when in produciton"
    ../bin/codis-config -c config.ini -L ./log/cconfig.log server add $group localhost:$port master
done

这里就是添加 Redis Server Group , 每一个 Server Group 作为一个 Redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数,

值得注意的是在 官方的操作里面:

 添加 Redis Server Group是在初始化slots后面但是,在sample里面则是在initslots前面,这里需要指出的是,

add_group.sh应该在initslots前面,不然slots可能会报无法init的错误

然后./initslot.sh

#!/bin/sh
echo "slots initializing..."
../bin/codis-config -c config.ini slot init -f 
echo "done"

之后的内容可以省略,在图形化界面里也可以配置而且更加直观

最后./start_proxy.sh

#!/bin/sh
echo "shut down proxy_1..."
../bin/codis-config -c config.ini proxy offline proxy_1
echo "done"
echo "start new proxy..."
nohup ../bin/codis-proxy --log-level info -c config.ini -L ./log/proxy.log  --cpu=8 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &
echo "done"
echo "sleep 3s"
sleep 3
tail -n 30 ./log/proxy.log

这里19000是客户端的访问端口,11000则是http上进行测试的端口

进行以上操作后打开

127.0.0.1:18087

就可以看到界面了

Ps:遇到dashboard无法开启,说进程被占用的情况,然后缺没有实际的进程,这种情况下在etcd,或者zookeeper下找到dashboard目录,貌似是在很多级的子目录下面。把目录删除即可

你可能感兴趣的:(Codis集成方法的具体搭建与部署)