码迷,mamicode.com
首页 > 其他好文 > 详细

codis集群部署实战

时间:2018-01-10 17:36:56      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:keep   aof   bash   daemon   slot   目录   orm   viso   time   

codis介绍

Codis 是一个分布式 Redis 解决方案, 对于上层的应用来说,

连接到 Codis Proxy 和连接原生的 Redis Server 没有明显的区别 (有一些命令不支持),

上层应用可以像使用单机的 Redis 一样使用, Codis 底层会处理请求的转发, 不停机的数据迁移等工作,

所有后边的一切事情, 对于前面的客户端来说是透明的,

可以简单的认为后边连接的是一个内存无限大的 Redis 服务,当然,

前段时间redis官方的3.0出了稳定版,3.0支持集群功能,codis的实现原理和3.0的集群功能差不多

,我了解的现在美团、阿里已经用了3.0的集群功能了,我们这边的业务主要是php,

3.0集群的sdk目前貌似还没有支持php语言的,

大家谁的php应用上了3.0集群,请联系我,我去取经,

有关redis常见的集群技术,请移步到 @萧田国 萧老师的infoq专栏Redis集群技术及Codis实践

窗体顶端

窗体底端

codis架构

10.105.67.119 ZooKeeper-node1

10.105.78.46 ZooKeeper-node2

10.237.236.73 ZooKeeper-node3

 

10.105.78.57 codis-config  codis-proxy

10.105.33.226    codis-proxy

 

 

 

10.237.164.111 codis server

 

6379   6380   group1

6381   6382   group2

6383   6384   group3


技术分享图片


zookeeper机器部署

ZooKeeper-node1:

vim /data/zookeeper/zookeeper-3.4.6/conf/zoo.cfg ##撰写zk的配置文件

maxClientCnxns=50              #这里我在实际测试的时候50 zookeeper会卡住,所以我调成了500

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/

clientPort=2181

server.1=ZooKeeper-node1:2888:3888

server.2=ZooKeeper-node2:2888:3888

server.3=ZooKeeper-node3:2888:3888

 

       

mkdir /data/zookeeper/ ##创建zk的datadir目录

echo "1" >/data/zookeeper/myid  ##生成ID,这里需要注意, myid对应的zoo.cfg的server.ID,比如ZooKeeper-node1对应的myid应该是1

/data/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start  ## 服务启动

 

 

ZooKeeper-node2:

vim /data/zookeeper/zookeeper-3.4.6/conf/zoo.cfg ##撰写zk的配置文件

maxClientCnxns=50

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/

clientPort=2181

server.1=ZooKeeper-node1:2888:3888

server.2=ZooKeeper-node2:2888:3888

server.3=ZooKeeper-node3:2888:3888

 

mkdir /data/zookeeper/

echo "2" >/data/zookeeper/myid

/data/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start

 

 

ZooKeeper-node3:

vim /data/zookeeper/zookeeper-3.4.6/conf/zoo.cfg ##撰写zk的配置文件

maxClientCnxns=50

tickTime=2000

initLimit=10

syncLimit=5

dataDir=/data/zookeeper/

clientPort=2181

server.1=ZooKeeper-node1:2888:3888

server.2=ZooKeeper-node2:2888:3888

server.3=ZooKeeper-node3:2888:3888

 

mkdir /data/zookeeper/

echo "3" >/data/zookeeper/myid

/data/zookeeper/zookeeper-3.4.6/bin/zkServer.sh start

 

窗体顶端

窗体底端

codis-config codis-proxy codis-server所在机器部署

wget https://storage.googleapis.com/golang/go1.4.1.linux-amd64.tar.gz --no-check-certificate

tar -zxvf go1.4.1.linux-amd64.tar.gz

mv go /usr/local/

cd /usr/local/go/src/

bash all.bash

cat >> ~/.bashrc << _bashrc_export

export GOROOT=/usr/local/go

export PATH=\$PATH:\$GOROOT/bin

export GOARCH=amd64

export GOOS=linux

_bashrc_export

source ~/.bashrc

 

 

mkdir /data/go

export GOPATH=/data/go

yum -y install git

/usr/local/go/bin/go get github.com/wandoulabs/codis   这个会报错安装git 然后还会报错不用管

cd  /data/go/src/github.com/wandoulabs/codis/

rm -rf *

wget -c https://github.com/CodisLabs/codis/archive/release1.9.zip

unzip release1.9.zip

mv codis-release1.9/* .

 

vim  bootstrap.sh  加入

go get -u github.com/xiam/resp

 

然后运行

sh -x bootstrap.sh

make gotest

===========================以上步骤需要在codis所有节点都运行===================================

启动 dashboard(codis-config上操作)

cat /etc/codis/config_10.ini ##撰写配置文件

zk=ZooKeeper-node1:2181,ZooKeeper-node2:2181,ZooKeeper-node3:2181

product=zh_news

proxy_id=codis-proxy_10

net_timeout=5000

proto=tcp4

dashboard_addr=10.105.78.57:18087

coordinator=zookeeper

 

cd /data/go/src/github.com/wandoulabs/codis/ &&  ./bin/codis-config -c /etc/codis/config_10.ini  dashboard &

 

 

 

 

配置codis-proxy集群10.105.78.57 操作

mkdir -p /etc/codis/

vim /etc/codis/config_10.ini

zk=10.105.67.119:2181,10.105.78.46:2181,10.237.236.73:2181

product=zh_news

proxy_id=codis-proxy_10

net_timeout=5000

proto=tcp4

dashboard_addr=10.105.78.57:18087

coordinator=zookeeper

 

 

初始化 slots (codis-config上操作)

cd /data/go/src/github.com/wandoulabs/codis/ &&  ./bin/codis-config -c /etc/codis/config_10.ini slot init

 

 

配置codis-proxy集群10.105.33.226 操作

mkdir -p /etc/codis/

vim /etc/codis/config_49.ini

zk=10.105.67.119:2181,10.105.78.46:2181,10.237.236.73:2181

product=zh_news

proxy_id=codis-proxy_49

net_timeout=5000

proto=tcp4

dashboard_addr=10.105.78.57:18087

coordinator=zookeeper

 

 

 

 

窗体顶端

窗体底端

启动 Codis Redis Server

cd /data/go/src/github.com/wandoulabs/codis/

./bin/codis-server /data/codis_server/conf/6379.conf

./bin/codis-server /data/codis_server/conf/6380.conf

./bin/codis-server /data/codis_server/conf/6381.conf

./bin/codis-server /data/codis_server/conf/6382.conf

./bin/codis-server /data/codis_server/conf/6383.conf

./bin/codis-server /data/codis_server/conf/6384.conf

 

 

 

 

6379.conf

daemonize yes

pidfile /var/run/redis_6379.pid

port 6379

tcp-backlog 511

timeout 300

tcp-keepalive 0

loglevel notice

logfile "/data/codis_server/logs/redis_6379.log"

databases 16

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename 6379.rdb

dir /data/codis_server/data

slave-serve-stale-data yes

repl-disable-tcp-nodelay no

slave-priority 100

maxclients 10000

maxmemory 3gb

maxmemory-policy allkeys-lru

appendonly yes

appendfilename "6379_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

窗体顶端

窗体底端

在codis config机器中添加 Redis Server Group

./bin/codis-config -c /etc/codis/config_10.ini server add 1 10.237.164.111:6379 master

./bin/codis-config -c /etc/codis/config_10.ini server add 1 10.237.164.111:6380 slave

./bin/codis-config -c /etc/codis/config_10.ini server add 2 10.237.164.111:6381 master

./bin/codis-config -c /etc/codis/config_10.ini server add 2 10.237.164.111:6382 slave

./bin/codis-config -c /etc/codis/config_10.ini server add 3 10.237.164.111:6383 master

./bin/codis-config -c /etc/codis/config_10.ini server add 3 10.237.164.111:6384 slave

窗体顶端

窗体底端

设置 server group 服务的 slot (codis config操作)

cd /data/go/src/github.com/wandoulabs/codis/

./bin/codis-config -c /etc/codis/config_10.ini slot range-set 0 300 1 online

./bin/codis-config -c /etc/codis/config_10.ini slot range-set 301 700 2 online

./bin/codis-config -c /etc/codis/config_10.ini slot range-set 701 1023 3 online

 

设置 server group 服务的 slot 范围 Codis 采用 Pre-sharding 的技术来实现数据的分片,

默认分成 1024 个 slots (0-1023), 对于每个key来说,

通过以下公式确定所属的 Slot Id : SlotId = crc32(key) % 1024 每一个 slot

都会有一个特定的 server group id 来表示这个 slot

的数据由哪个 server group 来提供.(codis-config上操作)

窗体顶端

窗体底端

启动 codis-proxy (codis-proxy上操作)

10.105.78.57操作:

cd /data/go/src/github.com/wandoulabs/codis/

./bin/codis-proxy  -c /etc/codis/config_10.ini -L /data/logs/codis-proxy_10.log  --cpu=4 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

 

10.105.33.226操作

cd /data/go/src/github.com/wandoulabs/codis/

./bin/codis-proxy  -c /etc/codis/config_49.ini -L /data/logs/codis-proxy_49.log  --cpu=4 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &

窗体顶端

窗体底端

codis-server的HA

codis-ha实现codis-server的主从切换,

codis-server主库挂了会提升一个从库为主库,从库挂了会设置这个从库从集群下线

 

export GOPATH=/data/go

/usr/local/go/bin/go get github.com/ngaut/codis-ha

cd  /data/go/src/github.com/ngaut/codis-ha

go build

cp codis-ha /data/go/src/github.com/wandoulabs/codis/bin/

使用方法:

/data/go/src/github.com/wandoulabs/codis/bin/codis-ha --codis-config=10.105.78.57:18087 --productName=zh_news &

 

 

窗体顶端

窗体底端

使用supervisord管理codis-ha进程

yum install python-setuptools

easy_install supervisor

 

或者yum -y install supervisord

 

       

/etc/supervisord.conf中添加如下内容:

[program:codis-ha]

autorestart = True

stopwaitsecs = 10

startsecs = 1

stopsignal = QUIT

command = /data/go/src/github.com/wandoulabs/codis/bin/codis-ha --codis-config=10.105.78.57:18087 --productName=zh_news

user = root

startretries = 3

autostart = True

exitcodes = 0,2

 

[supervisord]

 

 

/etc/init.d/supervisord start

chkconfig supervisord  on

 

或者使用命令:

cd /root

cp /etc/supervisord.conf .

supervisord -c /etc/supervisord.conf  


codis集群部署实战

标签:keep   aof   bash   daemon   slot   目录   orm   viso   time   

原文地址:http://blog.51cto.com/13017250/2059494

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!