Redis集群安装,注册为系统服务,开机启动

1. 操做系统

CentOS 6.7html

2. 集群部署准备工做

2.1. 先安装Redis

详细安装过程,请参考上篇博客Redis单点安装,注册为系统服务,开机启动node

因为虚拟机数量有限,我就在一台虚拟机上部署了Redis集群,只须要安装一个Redis,复制出6份配置文件(三主三从),分别启动,就可拥有6个Redis实例。下面进行详细描述。redis

2.2. 目录构建

2.2.1. Redis安装目录

/usr/local/redis/binshell

注:vim

       Redis自动安装在/usr/local/bin目录下,这里手动将文件移动到了/usr/local/redis/bin目录下。ruby

2.2.2. 建立cluster目录,完成集群目录构建

$ 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

2.3. 配置文件

2.3.1. 配置文件修改

配置文件特别重要,在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集群启动的过程当中会自动生成。

2.3.2. 配置文件复制与内容替换

将此配置文件分别复制到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也是这样操做,至此,准备工做已基本完毕。

3. 启动

3.1. 依次启动

$ 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

启动过程当中,会有以下输出:

3.2. 端口占用

查看端口占用状况:

$ netstat -nltp

集群中,每一个redis会占用两个端口,一个是自己设置的端口,如7000(用来服务客户端),还有一个是在设置的端口上加10000,也就成了17000(用做集群间nodes通讯:用来处理节点的失效检测,配置更新,灾备受权等事情,称为集群总线)。

3.3. 完成集群建立

3.3.1. 随便链接一个node

会提示Hash slot尚未分配。

3.3.2. 使用redis-trib.rb完成集群建立

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代表赞成上述配置。

至此集群搭建完毕。

3.4. 最终目录结构

再次说明,nodes.conf没必要手动建立,集群在启动过程当中会自动建立。

4. 注册为系统服务,开机启动

4.1. 改写启动脚本

此时,启动与关闭集群,须要对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装在一台机器上,因此这个脚本的实用性也不强,怪不得没有找到^_^

4.2. 注册为系统服务

$ chkconfig --add redisc

启动:service redisc start

关闭:service redisc stop

感受清爽多了。

注:

      只要在第一次使用redis-trib.rb,以后再启动和关闭集群就没必要再使用了,由于Hash slot在初次就分配完成啦。

4.3. 开机启动

$ chkconfig redisc on

4.4. 其余说明

链接的时候随便挑一个node便可,须要添加-c:

$ ./redis-cli -c -p 7000

使用:cluster info,cluster nodes能够查看集群状态

4.5. 参考资料

http://www.redis.cn/topics/cluster-tutorial.html

http://www.cnblogs.com/mafly/p/redis_cluster.html

相关文章
相关标签/搜索