CentOS 6.7html
详细安装过程,请参考上篇博客Redis单点安装,注册为系统服务,开机启动node
因为虚拟机数量有限,我就在一台虚拟机上部署了Redis集群,只须要安装一个Redis,复制出6份配置文件(三主三从),分别启动,就可拥有6个Redis实例。下面进行详细描述。redis
/usr/local/redis/binshell
注:vim
Redis自动安装在/usr/local/bin目录下,这里手动将文件移动到了/usr/local/redis/bin目录下。ruby
$ cd /usr/local/redis $ mkdir cluster
在cluster目录中放置集群,采用三主三从的模式,使用7000,7001,7002,7003,7004,7005端口,分别建立以端口号命名的目录。bash
$ cd cluster $ mkdir 7000 7001 7002 7003 7004 7005
在每一个目录下,建立data文件夹,用以存放数据,操做以下,以7000为例,其余相似。app
$ cd 7000 $ mkdir data
至此,目录结构搭建完毕。spa
配置文件特别重要,在redis源码自带的redis.conf上修改操作系统
$ cp /usr/local/src/redis-4.0.1/redis.conf /usr/local/redis/cluster/7000/7000.conf
以7000须要的配置文件为例:
$ cd /usr/local/redis/cluster/7000 $ vim 7000.conf
有几处须要更改或取消注释:
port 7000 daemonize yes pidfile /var/run/redis_7000.pid dir /usr/local/redis/cluster/7000/data appendonly yes cluster-enabled yes cluster-config-file /usr/local/redis/cluster/7000/nodes.conf cluster-node-timeout 15000
注:
nodes.conf不用手动建立,在redis集群启动的过程当中会自动生成。
将此配置文件分别复制到7001-7005的文件夹下:
$ cp 7000.conf ../7001/7001.conf $ cp 7000.conf ../7002/7002.conf $ cp 7000.conf ../7003/7003.conf $ cp 7000.conf ../7004/7004.conf $ cp 7000.conf ../7005/7005.conf
下面进行文本替换,以7001为例:
$ cd ../7001 $ vim 7001.conf
:%s/7000/7001
7002-7005也是这样操做,至此,准备工做已基本完毕。
$ cd /usr/local/redis $ bin/redis-server cluster/7000/7000.conf $ bin/redis-server cluster/7001/7001.conf $ bin/redis-server cluster/7002/7002.conf $ bin/redis-server cluster/7003/7003.conf $ bin/redis-server cluster/7004/7004.conf $ bin/redis-server cluster/7005/7005.conf
启动过程当中,会有以下输出:
查看端口占用状况:
$ netstat -nltp
集群中,每一个redis会占用两个端口,一个是自己设置的端口,如7000(用来服务客户端),还有一个是在设置的端口上加10000,也就成了17000(用做集群间nodes通讯:用来处理节点的失效检测,配置更新,灾备受权等事情,称为集群总线)。
会提示Hash slot尚未分配。
redis-trib位于Redis源码的src文件夹,它是一个Ruby程序,这个程序经过向实例发送特殊命令来完成建立新集群,检查集群,或者对集群进行从新分片(reshared)等工做。
先安装所需的Ruby环境:
$ yum install ruby $ yum install rubygems $ gem install redis
使用redis-trib.rb建立:
$ cd /usr/local/src/redis-4.0.1/src $ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
注:
--replicas 1 表示为集群中的每一个主节点建立一个从节点
在建立的过程当中,须要手动写入一次yes代表赞成上述配置。
至此集群搭建完毕。
再次说明,nodes.conf没必要手动建立,集群在启动过程当中会自动建立。
此时,启动与关闭集群,须要对6个实例逐一操做,十分麻烦,须要改写启动脚本。启动脚本在源码自带的脚本上进行修改。能够先参考上篇博客Redis单点安装,注册为系统服务,开机启动对脚本的说明。
$ cp /usr/local/src/redis-4.0.1/utils/redis_init_script /etc/init.d/redisc
重命名为redisc表示是reidis cluster。
修改后的脚本为:
#!/bin/sh # chkconfig: 2345 80 90 # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. REDISPORT0=7000 REDISPORT1=7001 REDISPORT2=7002 REDISPORT3=7003 REDISPORT4=7004 REDISPORT5=7005 EXEC=/usr/local/redis/bin/redis-server CLIEXEC=/usr/local/redis/bin/redis-cli PIDFILE=/var/run/redis_${REDISPORT0}.pid CONF0="/usr/local/redis/cluster/${REDISPORT0}/${REDISPORT0}.conf" CONF1="/usr/local/redis/cluster/${REDISPORT1}/${REDISPORT1}.conf" CONF2="/usr/local/redis/cluster/${REDISPORT2}/${REDISPORT2}.conf" CONF3="/usr/local/redis/cluster/${REDISPORT3}/${REDISPORT3}.conf" CONF4="/usr/local/redis/cluster/${REDISPORT4}/${REDISPORT4}.conf" CONF5="/usr/local/redis/cluster/${REDISPORT5}/${REDISPORT5}.conf" case "$1" in start) if [ -f $PIDFILE ] then echo "$PIDFILE exists, process is already running or crashed" else echo "Starting Redis cluster server..." $EXEC $CONF0 & $EXEC $CONF1 & $EXEC $CONF2 & $EXEC $CONF3 & $EXEC $CONF4 & $EXEC $CONF5 & fi ;; stop) if [ ! -f $PIDFILE ] then echo "$PIDFILE does not exist, process is not running" else PID=$(cat $PIDFILE) echo "Stopping ..." $CLIEXEC -p $REDISPORT0 shutdown $CLIEXEC -p $REDISPORT1 shutdown $CLIEXEC -p $REDISPORT2 shutdown $CLIEXEC -p $REDISPORT3 shutdown $CLIEXEC -p $REDISPORT4 shutdown $CLIEXEC -p $REDISPORT5 shutdown while [ -x /proc/${PID} ] do echo "Waiting for Redis cluster to shutdown ..." sleep 1 done echo "Redis cluster stopped" fi ;; *) echo "Please use start or stop as first argument" ;; esac
注:
这块在网上没有找到参考资料(多是我没有仔细找),以前也没有写过shell脚本,就按照自带的脚本写法作了一些修改。确定是不完善的,首先判断条件就只看了7000,这点就不够充足。若是有更好的脚本,请告知我。不过通常也不会把全部的Redis装在一台机器上,因此这个脚本的实用性也不强,怪不得没有找到^_^
$ chkconfig --add redisc
启动:service redisc start
关闭:service redisc stop
感受清爽多了。
注:
只要在第一次使用redis-trib.rb,以后再启动和关闭集群就没必要再使用了,由于Hash slot在初次就分配完成啦。
$ chkconfig redisc on
链接的时候随便挑一个node便可,须要添加-c:
$ ./redis-cli -c -p 7000
使用:cluster info,cluster nodes能够查看集群状态