Redis集群Codis安装

来源:互联网 发布:墙纸设计软件 编辑:程序博客网 时间:2024/05/24 03:48
本文介绍豌豆荚公司开源的Redis集群方案Codis集群的安装,亲测成功。


工程地址
https://github.com/CodisLabs/codis

规划

操作系统
192.25.103.86   Redhat 6.5
192.25.103.87   CentOS 6.7

ZooKeeper
192.25.103.86:7101:7201   server-1
192.25.103.86:7102:7202   server-2
192.25.103.86:7103:7203   server-3

192.25.103.86:2181   client-1
192.25.103.86:2182   client-2
192.25.103.86:2183   client-3

codis-group1
192.25.103.86:7001    master
192.25.103.87:7004    slave

codis-group2
192.25.103.86:7002    master
192.25.103.87:7005    slave

codis-group3
192.25.103.86:7003    master
192.25.103.87:7006    slave

codis-dashboard
192.25.103.86:18087

codis-proxy
192.25.103.86:19000   proxy server
192.25.103.86:11000   debug server




部署安装详细步骤

一、安装zookeeper

1、安装java环境

ZooKeeper 要求 JAVA 的环境才能运行,并且需要 JAVA6 以上的版本,可以

从 SUN 官网上下载,并对 JAVA 环境变量进行设置。

yum -y install java-1.7.0-openjdk-devel

java -version

2、安装zookeeper

wget --no-check-certificate https://www.apache.org/dist/zookeeper/zookeeper-3.4.8/zookeeper-3.4.8.tar.gz

tar zxvf zookeeper-3.4.8.tar.gz

mkdir ./{logs,data}

配置zoo.cfg

cp /usr/local/zookeeper-3.4.8/conf/zoo_sample.cfg /usr/local/zookeeper-3.4.8/conf/zoo1.cfg

vim /usr/local/zookeeper-3.4.8/conf/zoo1.cfg

以下3个实例不同
dataDir=/usr/local/zookeeper-3.4.8/data/1
dataLogDir=/usr/local/zookeeper-3.4.8/logs/1
clientPort=2181

以下3个实例相同
server.1=192.25.103.86:7101:7201
server.2=192.25.103.86:7102:7202
server.3=192.25.103.86:7103:7203

上述配置内容说明,可以参考

http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper

3、设置myid

在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字
echo 1 > /usr/local/zookeeper-3.4.8/data/1/myid
echo 2 > /usr/local/zookeeper-3.4.8/data/2/myid
echo 3 > /usr/local/zookeeper-3.4.8/data/3/myid

4、启动zookeeper

启动顺序zookeeper-1>zookeeper-2>zookeeper-3

bin/zkServer.sh start conf/zoo1.cfg
bin/zkServer.sh start conf/zoo2.cfg
bin/zkServer.sh start conf/zoo3.cfg

查看leader
bin/zkServer.sh status conf/zoo1.cfg
bin/zkServer.sh status conf/zoo2.cfg
bin/zkServer.sh status conf/zoo3.cfg

可以看到有一个是leader,其他两个是follower

设置开机启动

vim /etc/rc.local
/usr/local/zookeeper-3.4.8/bin/zkServer.sh start conf/zoo1.cfg
/usr/local/zookeeper-3.4.8/bin/zkServer.sh start conf/zoo2.cfg
/usr/local/zookeeper-3.4.8/bin/zkServer.sh start conf/zoo3.cfg

设置环境变量

vim /etc/profile

export GOROOT=/usr/local/go
export GOPATH=/usr/local/gopkg
export CODISPATH=/usr/local/codis

export ZOOKEEPERPATH=/usr/local/zookeeper-3.4.8
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin:$ZOOKEEPERPATH/bin:$CODISPATH/bin

source /etc/profile

二、安装codis集群

1、安装go

设置环境变量如上一节

下载安装go

cd /usr/local/

wget http://golangtc.com/static/go/1.7/go1.7.linux-amd64.tar.gz

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

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

go version

2、安装依赖环境

yum groupinstall "Development Tools"

3、安装codis

yum install -y git

安装Codis
go get -u -d github.com/CodisLabs/codis  #下载文件到GOPATH

安装
mkdir -p $GOPATH/src/github.com/tools

cd $GOPATH/src/github.com/tools

go get -u github.com/tools/godep

cd godep

go install ./

验证godep
which godep
godep version

cd $GOPATH/src/github.com/CodisLabs/codis

编译
make

测试是否正确
make gotest

4、配置Codis集群

# 将编译好后,把bin目录和一些脚本复制过去/usr/local/codis目录下:

mkdir -p /usr/local/codis/{logs,conf,scripts}

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

cp -rf bin /usr/local/codis/

配置集群config.ini
cp config.ini /usr/local/codis/

vim /usr/local/codis/config.ini

zk=192.25.103.86:2181,192.25.103.86:2182,192.25.103.86:2183
dashboard_addr=192.25.103.86:18087
proxy_id=proxy_9

该配置文件中,我们需要注意三个参数:zk、dashboard_addr、proxy_id。

其中zk是表示zookeeper集群的服务器IP地址,dashboard_addr表示codis web管理的IP地址及端口,proxy_id表示codis的id,注意每台codis服务器该值要唯一

另外两台主要修改proxy_id。

配置实例config.ini
cp extern/redis-test/conf/6379.conf /usr/local/codis/conf/7301.conf
vim /usr/local/codis/redis_conf/7301.conf

pidfile /var/run/redis7301.pid
port 7301
logfile /usr/local/codis/7301.log
dbfilename dump7301.rdb
dir /usr/local/codis

每台codis服务器上redis配置完毕后,我们来启动redis实例,如下:

/usr/local/codis/bin/codis-server /usr/local/codis/conf/7301.conf

ps -ef | grep codis

5、启动codis dashboard

redis实例全部启动后,我们现在来启动codis的dashboard。

要在192.25.103.86这台codis服务器上启动该命令,这是因为之前codis配置文件中配置的dashboard地址就是192.25.103.86。

使用如下命令启动dashboard:

nohup /usr/local/codis/bin/codis-config -c /usr/local/codis/config.ini dashboard &

查看日志确认是否成功启动
tail -100f nohup.out

访问以下地址:
http://192.25.103.86:18087/admin/

错误1: create zk node failed
有时kill方式停止codis时,再次启动会出现下面的错误提示,因为zookeeper中的相关配置没有删除,连接上zookeeper删除相关文件夹。

/usr/local/zookeeper-3.4.8/bin/zkCli.sh -server 127.0.0.1:2181
rmr /zk/codis/db_test/dashboard

如果要kill的dashboard的话,强烈建议通过kill -15 pid来关闭。
如果是直接使用kill -9进行kill的话,可能会报zk节点不存在错误的话。

错误2: zkutil: obtaining lock timed out
cd /usr/local/codis
/usr/local/codis/bin/codis-config action remove-lock


三、安装codis集群

1、管理group和instance

增加group和instance
  • New Server Group
  • Add New Redis Instance
注意:Addr需要输入ip:port,组内第一个实例为master,再增加的均为slave。

可以通过命令进行添加,如下:

/usr/local/codis/bin/codis-config server add 1 192.25.103.86:7301 master
/usr/local/codis/bin/codis-config server add 1 192.25.103.87:7304 slave

可以通过命令查看,各个redis server组的信息,如下:
/usr/local/codis/bin/codis-config server list

删除一个已分配slot的group,或者redis-master时,报错:
[error]: http status code 500, cannot remove master, use promote first

解决方案:已分配slot的group是删除不了的,只能转移slot数据。删除redis-master也必然不行,一个group必须有个master。可以先指定一个slave升级为master,然后可以删除该master。

2、管理slot

codis采用pre-sharding的技术来实现数据的分片,默认分成1024个slot(0-1023)。对于每个key来说,可以通过以下公式确定所属的slot id:slotid=crc32(key)%1024。

每一个slot都会有一个且必须有一个特定的server group id来表示这个slot的数据由哪个server group来提供。

在分配slot之前,我们需要初始化slot。

在codis服务器任意一台上执行命令,在zookeeper上创建slot相关信息。如下:
/usr/local/codis/bin/codis-config -c config.ini slot init

slot初始化完毕后,我们现在来分配slot范围。如下:

Range Set
0~341        1
342~682    2
683~1023  3

也可以通过命令进行分配,如下:
/usr/local/codis/bin/codis-config slot range-set 0 341 1 online

查看slot信息,如下:
/usr/local/codis/bin/codis-config slot info 1

3、启动codis-proxy

创建启动脚本

vim 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=2 --addr=0.0.0.0:19000 --http-addr=0.0.0.0:11000 &
echo "done"

echo "sleep 3s"
sleep 3
tail -n 30 ./logs/proxy.log

下面对以上命令中的参数进行解释:

-c 配置文件地址。

-L 日志输出文件地址。

–log-level=<loglevel> 输出日志级别(debug<info (default)<warn<error<fatal)。

–cpu=<cpu_num> proxy占用的cpu核数,默认1,最好设置为机器的物理cpu数的一半到2/3左右。

–addr=<proxy_listen_addr> proxy的redis server监听的地址, 格式<ip or hostname>:<port>, 如: localhost:9000, :9001。

–http-addr=<debug_http_server_addr> proxy的调试信息启动的http server,可以访问 http://debug_http_server_addr/debug/vars。

启动proxy

./start_proxy.sh

四、连接codis集群

redis-cli -h 192.25.103.86 -p 19000

info

对codis集群做一些压力测试,同时在dashboard上观察键值对的情况。如下:

redis-benchmark -h 192.25.103.86 -p 19000 -c 10000 -d 100 -t set -n 100000 -r 100000

使用redis-benchmark压力测试命令连接codis集群,同时并发10000个(-c),测试set操作(-t),每个测试数据集是100字节(-d),请求数是100000(-n),使用使用随机数插入数值(-r)。


0 0
原创粉丝点击