redis4.0.2集群配置

操作系统:centos6.4 x86_64

redis:4.0.2

在一台虚拟机上验证集群配置,通过不同的端口,启动不同的redis实例

1、使用源码安装redis

cd /home

tar -xfv redis-4.0.2.tar.gz

cd redis-4.0.2

make

#指定安装的位置

make PREFIX=/usr/local/redis install

2、集群需要至少6个节点,拷贝出6份配置文件

#建立配置文件路径

mkdir -p /etc/redis/cluster/conf.d

#将通用配置放到配置文件目录

cd /etc/redis/cluster

cp /home/redis-4.0.2/redis.conf  common.conf

3、建立个性化配置

cd /etc/redis/cluster/conf.d

vi 7000.conf

#配置文件要差异化,跟端口有关的都要分开配置,以7000端口为例,将以下内容写入7000.conf

#包含通用配置

include /etc/redis/cluster/common.conf

#指定端口
port 7000

#指定集群配置文件名称,该文件记录集群运行时信息

#注意:可以用绝对路径,但必须保证路径已经存在,否则启动失败;如果只有文件名称的话,文件生成在工作路径下
cluster-config-file /etc/redis/cluster/run/nodes-7000.conf

#指定进程pid文件
pidfile /var/run/redis_7000.pid

#指定日志文件
logfile /var/log/redis_7000.log

#指定数据库文件存放路径

dir /var/lib/redis/7000

#appendonly日志文件

appendfilename appendonly-7000.aof


4、按同样的方式建立7001.conf~7005.conf

5、修改common.conf

1)关于个性化的配置前加#屏蔽掉

2)增加统一的密码配置,将requirepass配置打开,使用默认密码foobared

3)appendonly改为yes

6、建立数据库文件路径

mkdir -p /var/lib/redis/7000

mkdir -p /var/lib/redis/7001

mkdir -p/var/lib/redis/7002

mkdir -p/var/lib/redis/7003

mkdir -p /var/lib/redis/7004

mkdir -p /var/lib/redis/7005


7、编写启动脚本/etc/init.d/redis_cluster

#!/bin/sh


PROG=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli
CONF_DIR=/etc/redis/cluster/conf.d
COMMON_CONF=/etc/redis/cluster/common.conf
NODES=6
BASEPORT=7000


PWD=`grep ^requirepass $COMMON_CONF | awk '{print $2}'`
if test "$PWD"
then
        AUTH="auth $PWD"
fi


startRedis()
{
        REDISPORT=$1
        CONF_FILE=$CONF_DIR/$REDISPORT.conf
        PIDFILE=/var/run/redis_$REDISPORT.pid


        [ -z $REDISPORT ] && exit 1


        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        elif [ ! -f $CONF_FILE ]
        then
                echo "$CONF_FILE does not exist"
        else
                $PROG $CONF_FILE
        fi
}


stopRedis()
{
        REDISPORT=$1
        [ -z $REDISPORT ] && exit 1
        PIDFILE=/var/run/redis_$REDISPORT.pid
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping $REDISPORT ..."
            $CLIEXEC -p $REDISPORT << EOF
            $AUTH
            shutdown
EOF
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis $REDISPORT to shutdown ..."
                sleep 1
            done
            echo "Redis $REDISPORT stopped"
        fi
}


statusRedis()
{
        REDISPORT=$1
        [ -z $REDISPORT ] && exit 1
        PIDFILE=/var/run/redis_$REDISPORT.pid
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis $REDISPORT is not running'
        else
            echo "Redis $REDISPORT is running ($PID)"
        fi
}


case "$1" in
    start)
        if test "$2"
        then
                startRedis $2
        else


                for ((i=0; i<$NODES; i++))
                do
                        startRedis $((BASEPORT+i))
                done
        fi
        ;;
    stop)
        if test "$2"
        then
                stopRedis $2
        else
                for ((i=0; i<$NODES; i++))
                do
                        stopRedis $((BASEPORT+i))
                done
        fi
        ;;
    status)
        if test "$2"
        then
                statusRedis $2
        else
                for ((i=0; i<$NODES; i++))
                do
                        statusRedis $((BASEPORT+i))
                done
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac

9、启动集群实例,/etc/init.d/redis_cluster  start

10、配置集群

cd /home/redis-4.0.2/src

HOSTS="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"

./redis-trib.rb create --replicas 1 $HOSTS

执行之后,报错“/usr/bin/env: ruby: No such file or directory”,需要安装ruby

 yum install ruby

继续执行上个命令,又报错“./redis-trib.rb:24:in `require': no such file to load -- rubygems (LoadError)
        from ./redis-trib.rb:24”,需要安装rubygems

yum install rubygems

继续执行上个命令,又报错“/usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require': no such file to load -- redis (LoadError)
        from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
        from ./redis-trib.rb:25”,需要通过gem安装redis

gem install redis

执行之后报错“ERROR:  Error installing redis:
        redis requires Ruby version >= 2.2.2.”,需要升级ruby

11、升级ruby

1)确认rvm有没有安装

rvm -v

如果已经安装,就跳过第2步

2)安装rvm

   curl -L get.rvm.io | bash -s stable

如果没有curl命令,就执行yum intall  curl进行安装

执行结果如下

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 24090  100 24090    0     0  21983      0  0:00:01  0:00:01 --:--:-- 21983
Downloading https://github.com/rvm/rvm/archive/1.29.3.tar.gz
Downloading https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc
gpg: Signature made Mon 11 Sep 2017 04:59:21 AM CST using RSA key ID BF04FF17
gpg: Can't check signature: No public key
Warning, RVM 1.26.0 introduces signed releases and automated check of signatures when GPG software found. Assuming you trust Michal Papis import the mpapis public key (downloading the signatures).


GPG signature verification failed for '/usr/local/rvm/archives/rvm-1.29.3.tgz' - 'https://github.com/rvm/rvm/releases/download/1.29.3/1.29.3.tar.gz.asc'! Try to install GPG v2 and then fetch the public key:


    gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3


or if it fails:


    command curl -sSL https://rvm.io/mpapis.asc | gpg2 --import -


the key can be compared with:


    https://rvm.io/mpapis.asc
    https://keybase.io/mpapis


NOTE: GPG version 2.1.17 have a bug which cause failures during fetching keys from remote server. Please downgrade or upgrade to newer version (if available) or use the second method described above.

按照提示,获取一下public key

 gpg2 --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

再次执行安装curl -L get.rvm.io | bash -s stable,就可以了。

3)source /usr/local/rvm/scripts/rvm

4)查看可以安装的ruby版本

rvm list known

显示如下

# MRI Rubies
[ruby-]1.8.6[-p420]
[ruby-]1.8.7[-head] # security released on head
[ruby-]1.9.1[-p431]
[ruby-]1.9.2[-p330]
[ruby-]1.9.3[-p551]
[ruby-]2.0.0[-p648]
[ruby-]2.1[.10]
[ruby-]2.2[.7]
[ruby-]2.3[.4]
[ruby-]2.4[.1]

5)安装2.4.1版本

rvm install 2.4.1

6)确认ruby版本

ruby -v

12、再次安装redis

gem install redis

13、再次执行集群配置

./redis-trib.rb create --replicas 1 $HOSTS

报错“[ERR] Sorry, can't connect to node 127.0.0.1:7000”

原来,用redis-trib.rb命令创建集群前,不能设置密码。

先将集群实例停止,/etc/init.d/redis_cluster stop

将common.conf中密码requirepass屏蔽掉,再启动集群实例

/etc/init.d/redis_cluster start

然后再执行集群配置

./redis-trib.rb create --replicas 1 $HOSTS

14、设置集群的密码

先将集群实例停止,/etc/init.d/redis_cluster stop

修改common.conf,将requirepass打开,并设置密码,同时将masterauth打开,密码设置与requirepass一样

15、重新启动集群,至此,集群配置完毕

16、验证集群

./redis-cli -p 7000

127.0.0.1:7000> cluster nodes

此时,7000、7001、7002是master,其他三个是slave

在另外一个会话窗口停掉7002

/etc/init.d/redis_cluster stop 7002

再次查看cluster状态

/etc/init.d/redis_cluster restart

此时,7002变成failed?,7005变为master

17、验证数据存取

./redis-cli -p 7000

127.0.0.1:7000> set key5 7005
(error) MOVED 9057 127.0.0.1:7001

登录的时候,必须加上-c参数,才会自动重定向到另外一个实例

./redis-cli -c -p 7000

再次执行,又出现(error) NOAUTH Authentication required.

登录的时候,必须加上密码参数-a,这样就不用要求输入密码了

猜你喜欢

转载自blog.csdn.net/GANWEI793089452/article/details/80210735