安装codis
前面我们安装go语言环境:使用go get进行codis安装。
go get github.com/wandoulabs/codis
如果这个操作失败,直接将git clone下来:
git clone https://github.com/wandoulabs/codis.git
或者下载zip压缩包解压后复制覆盖到:/usr/local/codis/src/github.com/wangdoulabs/codis/,然后进入目录执行bootstrap.sh:
cd /usr/local/codis/src/github.com/wandoulabs/codis/
sh -x bootstrap.sh
这个过程非常漫长,有时还不成功,这个完全取决于你的网络,遇到此情况解决的办法是:进入到相应目录执行 git pull,然后再执行sh -x bootstrap.sh。因为在bootstrap.sh执行中,ps查看会发现git clone,也就是即便是你系统里有了,再重新下载一次,使用git pull 只是更新,应该讲相对重新下载要来的快一些。
执行过程:
+ make clean
+ echo 'downloading dependcies, it may take a few minutes...'
downloading dependcies, it may take a few minutes...
+ godep path
+ '[' 127 = 0 ']'
+ go get -u github.com/alicebob/miniredis
+ go get -u github.com/bsm/redeo
+ go get -u github.com/c4pt0r/cfg
...中间省略N行
+ make gotest
go test ./pkg/... ./cmd/... -race
ok github.com/wandoulabs/codis/pkg/models 19.486s
ok github.com/wandoulabs/codis/pkg/proxy 10.921s
ok github.com/wandoulabs/codis/pkg/proxy/redis 4.934s
ok github.com/wandoulabs/codis/pkg/proxy/router 2.286s
? github.com/wandoulabs/codis/pkg/utils [no test files]
? github.com/wandoulabs/codis/pkg/utils/assert [no test files]
? github.com/wandoulabs/codis/pkg/utils/atomic2 [no test files]
ok github.com/wandoulabs/codis/pkg/utils/bytesize 1.007s
? github.com/wandoulabs/codis/pkg/utils/errors [no test files]
? github.com/wandoulabs/codis/pkg/utils/log [no test files]
? github.com/wandoulabs/codis/pkg/utils/trace [no test files]
? github.com/wandoulabs/codis/cmd/cconfig [no test files]
? github.com/wandoulabs/codis/cmd/proxy [no test files]
看到上面的提示,codis编译安装完成。
redis安装这里就不多讲了,后面要用到redis-cli
将 /usr/local/codis/src/github.com/wandoulabs/codis 目录中的bin目录复制到/usr/local/codis目录下
cp -rf /usr/local/codis/src/github.com/wandoulabs/codis /usr/local/codis/
创建一些必要的目录并将配置文件复制到/etc/目录下:
mkdir /etc/codis
mkdir /var/log/codis
cp -rf /usr/local/codis/src/github.com/wandoulabs/codis/config.ini /etc/codis/
创建脚本,脚本内容后面介绍:
cd /usr/local/codis/bin
touch start_dashboard.sh
touch start_proxy.sh
修改配置文件:
# cat /etc/codis/config.ini | grep -v ^# | grep -v ^$
coordinator=zookeeper
zk=127.0.0.1:2181
product=test
dashboard_addr=192.168.1.62:18087
password=
backend_ping_period=5
session_max_timeout=1800
session_max_bufsize=131072
session_max_pipeline=1024
zk_session_timeout=30
proxy_id=proxy_1
流程 0.启动 dashboard:
/usr/local/codis/bin/start_dashboard.sh
Starting Codis Dashboard...
1.初始化slots
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini slot init -f
2.启动codis Redis(脚本后面介绍):
/etc/init.d/redis_6379 start
/etc/init.d/redis_6380 start
3.添加Redis server group, 每一个 Server Group 作为一个 Redis 服务器组存在, 只允许有一个 master, 可以有多个 slave, group id 仅支持大于等于1的整数
如: 添加两个 server组, 每个组内有两个redis实例,group的id分别为1和2, redis实例为一主一从。添加一个group,group的id为1, 并添加一个redis master到该group
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini server add 1 192.168.1.62:6379 master
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini server add 1 192.168.1.63:6379 slave
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini server add 2 192.168.1.62:6380 master
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini server add 2 192.168.1.63:6380 slave
4.配置server group服务的slot范围
Codis 采用 Pre-sharding 的技术来实现数据的分片, 默认分成 1024 个 slots (0-1023), 对于每个key来说, 通过以下公式确定所属的Slot Id : SlotId = crc32(key) % 1024 每一个 slot 都会有一个且必须有一个特定的server group id 来表示这个 slot 的数据由哪个 server group 来提供.
如: 设置编号为[0, 511]的 slot 由 server group 1 提供服务, 编号 [512, 1023] 的 slot 由 server group 2 提供服务
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini slot -h
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini slot range-set 0 511 1 online
/usr/local/codis/bin/codis-config -c /etc/codis/config.ini slot range-set 512 1023 2 online
5.启动 codis-proxy
/usr/local/codis/bin/start_proxy.sh start
Starting Codis Proxy...
刚启动的 codis-proxy 默认是处于 offline状态的, 然后设置 proxy 为 online 状态, 只有处于 online 状态的 proxy 才会对外提供服务
/usr/local/bin/codis-config -c /etc/codis/config.ini proxy online proxy_1
6.打开浏览器 http://ip:18087/admin