redis6 集群搭建

文档

下载

下载地址:http://download.redis.io/releases

下载Redis 最新稳定版:http://download.redis.io/releases/redis-6.2.6.tar.gz

安装编译器

1yum groupinstall 'Development Tools' -y

编译安装

1cd /usr/local/src 
2
3tar -zxf redis-6.2.6.tar.gz 
4
5cd redis-6.2.6
6
7make
8
9make install

集群配置文件

 1mkdir -p /app/redis/cluster/7111 
 2
 3cp /usr/local/src/redis-6.2.6/redis.conf /app/redis/cluster/7111/redis-7111.conf 
 4
 5
 6
 7mkdir -p /app/redis/cluster/7112 
 8
 9cp /usr/local/src/redis-6.2.6/redis.conf /app/redis/cluster/7112/redis-7112.conf
10
11
12
13mkdir -p /app/redis/cluster/7113 
14
15cp /usr/local/src/redis-6.2.6/redis.conf /app/redis/cluster/7113/redis-7113.conf 
16
17
18
19mkdir -p /app/redis/cluster/7114 
20
21cp /usr/local/src/redis-6.2.6/redis.conf /app/redis/cluster/7114/redis-7114.conf 
22
23
24
25mkdir -p /app/redis/cluster/7115 
26
27cp /usr/local/src/redis-6.2.6/redis.conf /app/redis/cluster/7115/redis-7115.conf 
28
29
30
31mkdir -p /app/redis/cluster/7116 
32
33cp /usr/local/src/redis-6.2.6/redis.conf /app/redis/cluster/7116/redis-7116.conf 

配置文件内容:

 1# bind 127.0.0.1 -::1                                                # 取消ip绑定
 2
 3# requirepass   123456                                               # 如果需要密码,请去掉注释
 4
 5# masterauth    123456                                               # 如果集群设置了 requirepass,也要设置masterauth一样的密码
 6
 7daemonize yes                                                        # 后台运行
 8
 9pidfile /var/run/redis-7111.pid                                      # 根据端口修改
10
11port 7111                                                            # 端口
12
13cluster-enabled yes                                                  # 启用集群模式
14
15cluster-config-file /app/redis/cluster/7111/cluster-7111.conf        #节点配置文件
16
17cluster-node-timeout 15000                                           # 超时时间
18
19appendonly yes                                                       # 打开aof持久化
20
21dir /app/redis/cluster/7111                                          # 节点数据持久化存放目录
22
23protected-mode no                                                    # 非保护模式
24
25logfile /app/redis/cluster/7111/redis-7111.log                       # 记录日志

启动6个Redis节点。

 1redis-server /app/redis/cluster/7111/redis-7111.conf
 2
 3redis-server /app/redis/cluster/7112/redis-7112.conf
 4
 5redis-server /app/redis/cluster/7113/redis-7113.conf
 6
 7redis-server /app/redis/cluster/7114/redis-7114.conf
 8
 9redis-server /app/redis/cluster/7115/redis-7115.conf
10
11redis-server /app/redis/cluster/7116/redis-7116.conf

启动集群

注意:如果有密码,需要加 -a 参数

1redis-cli --cluster create 192.168.76.129:7111 192.168.76.129:7112 192.168.76.129:7113 192.168.76.130:7114 192.168.76.130:7115 192.168.76.130:7116 --cluster-replicas 1 

输入 yes 并按下回车确认之后,集群就会将配置应用到各个节点,并连接起(join)各个节点,也就是让各个节点开始互相通讯

如果遇到CLUSTERDOWN Hash slot not served 错误

此时,执行下面步骤来修复:

检测

1redis-cli --cluster check 127.0.0.1:7111 

检测结果

1[ERR] Not all 16384 slots are covered by nodes

输入如下命令进行修复:

 1redis-cli --cluster fix 192.168.76.129:7111 
 2
 3redis-cli --cluster fix 192.168.76.129:7112 
 4
 5redis-cli --cluster fix 192.168.76.129:7113 
 6
 7redis-cli --cluster fix 192.168.76.130:7114 
 8
 9redis-cli --cluster fix 192.168.76.130:7115 
10
11redis-cli --cluster fix 192.168.76.130:7116

查看集群主从关系(如果有密码,需要加 -a 参数):

redis-cli -h 192.168.76.129 -p 7111 cluster nodes

redis集群的开机启动

创建脚本

1vim /etc/init.d/redis-cluster

内容如下:

 1#!/bin/sh
 2# chkconfig:   2345 90 10
 3# description:  Redis is a persistent key-value database
 4
 5# 相关配置项,应该根据实际环境信息进行改动,包括for循环中的PIDFILE和CONF
 6REDISPORT=(7001 7002 7003 7004 7005 7006)
 7EXEC=/usr/local/bin/redis-server
 8CLIEXEC=/usr/local/bin/redis-cli
 9# redis 集群密码
10# PASSWD=admin123456
11
12for((i=0;i<${#REDISPORT[@]};i++)) do
13    PIDFILE=/var/run/redis-${REDISPORT[i]}.pid # 进程守护文件
14    CONF=/app/redis/cluster/${REDISPORT[i]}/redis-${REDISPORT[i]}.conf # redis节点配置文件
15
16    case "$1" in
17        start)
18            if [ -f $PIDFILE ]
19            then
20                    echo "$PIDFILE exists, process is already running or crashed"
21            else
22                    echo "Starting Redis cluster server ${REDISPORT[i]} ..."
23                    # 启动 redis 服务
24                    nohup $EXEC $CONF > /dev/null 2>&1 &
25                    sleep 1s
26                    if [ -f $PIDFILE ]
27                    then
28                            echo "Redis cluster ${REDISPORT[i]} startup succeeded!"
29                    else
30                            echo "ERROR: Redis cluster ${REDISPORT[i]} startup failed!"
31                    fi
32            fi
33            ;;
34        stop)
35            if [ ! -f $PIDFILE ]
36            then
37                    echo "$PIDFILE does not exist, process is not running"
38            else
39                    PID=$(cat $PIDFILE)
40                    echo "Stopping Redis cluster ${REDISPORT[i]} ..."
41                    # 如果redis集群有设置密码,下面的命令改为:$CLIEXEC -p ${REDISPORT[i]} -a $PASSWD shutdown
42                    $CLIEXEC -p ${REDISPORT[i]} shutdown
43                    while [ -x /proc/${PID} ]
44                    do
45                        echo "Waiting for Redis cluster ${REDISPORT[i]} to shutdown ..."
46                        sleep 1s
47                    done
48                    echo "Redis cluster ${REDISPORT[i]} stopped!"
49            fi
50            ;;
51        *)
52            echo "Please use start or stop as first argument"
53            ;;
54    esac
55
56done

更改脚本可执行权限

1chmod +x /etc/init.d/redis-cluster

添加 redis cluster 开机服务

1chkconfig --add redis-cluster

开启 redis cluster 服务

1chkconfig redis-cluster on

启动 redis cluster 服务

1service  redis-cluster start

停止 redis cluster 服务

1service  redis-cluster stop