redis-cluster集群搭建

redis cluster集群搭建

1、环境说明

系统版本:CentOS Linux release 7.2.1511 (Core)
Redis 版本:3.2.5
Ruby 版本:2.4.4
数据目录:/data/redis/{6379,6380,6381}/
安装位置:/data/software/
日志目录:/data/logs/redis/{6379,6380,6381}/
端口:1.247: 6379 6380 6381 :1.248: 6379 6380 6381

2、创建 redis 数据目录,日志目录
mkdir -p /data/redis/{6379,6380,6381}
mkdir -p /data/logs/redis/{6379,6380,6381}
3、安装 ruby 及 redis 模块
3.1 安装 rvm:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
curl -sSL https://get.rvm.io | bash -s stable
source /usr/local/rvm/bin/ruby-rvm-env
source /etc/profile.d/rvm.sh 

备注:第一步如因网络问题导致失败,可多尝试几次
参考:http://rvm.io/

3.2 安装ruby

查看 rvm 库中已知的 ruby 版本,安装一个较新 ruby 版本:

rvm list known
rvm install 2.4

3.3安装 redis 模块:

gem install redis
4. 安装Redis
4.1 下载redis
cd /data/software/
wget http://download.redis.io/releases/redis-3.2.5.tar.gz
4.2 解压安装redis
tar xf redis-3.2.5.tar.gz
cd redis-3.2.5
make && make install
cd utils/
+./install_server.sh 
Welcome to the redis service installer
This script will help you easily set up a running redis server
.......
Starting Redis server...
Installation successful!

备注:执行install_server.sh脚本后,一路回车即可,或者根据需要修改相关配置,脚本执行完毕后会自动启动实例,此时先停止实例,继续修改配置文件。
关闭redisl

/etc/init.d/redis_6379 stop
5.修改配置文件,并启动多实例
5.1 修改redis-cluster配置参数
bind 192.168.1.247
appendonly  yes 
cluster-enabled yes
cluster-config-file /data/tools/redis/conf/6379-node.conf
cluster-node-timeout 15000 
cluster-slave-validity-factor 10 master
cluster-migration-barrier 1
cluster-require-full-coverage no
5.2 创建多实例

修改配置文件和启动文件中的端口即可。其他配置一样,注意数据目录和配置目录要创建好
以下为2启动程序和配置文件的示例,修改端口即可。
6379启动程序

#!/bin/sh
#Configurations injected by install_server below....

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli
PIDFILE=/var/run/redis_6379.pid
CONF="/data/tools/redis/conf/6379/6379.conf"
REDISPORT="6379"
###############
# SysV Init Information
# chkconfig: - 58 74
# description: redis_6379 is the redis daemon.
### BEGIN INIT INFO
# Provides: redis_6379
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Should-Start: $syslog $named
# Should-Stop: $syslog $named
# Short-Description: start and stop redis_6379
# Description: Redis daemon
### END INIT INFO


case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
            echo "$PIDFILE exists, process is already running or crashed"
        else
            echo "Starting Redis server..."
            $EXEC $CONF
        fi
        ;;
    stop)
        if [ ! -f $PIDFILE ]
        then
            echo "$PIDFILE does not exist, process is not running"
        else
            PID=$(cat $PIDFILE)
            echo "Stopping ..."
            $CLIEXEC -p $REDISPORT shutdown
            while [ -x /proc/${PID} ]
            do
                echo "Waiting for Redis to shutdown ..."
                sleep 1
            done
            echo "Redis stopped"
        fi
        ;;
    status)
        PID=$(cat $PIDFILE)
        if [ ! -x /proc/${PID} ]
        then
            echo 'Redis is not running'
        else
            echo "Redis is running ($PID)"
        fi
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Please use start, stop, restart or status as first argument"
        ;;
esac

6379配置文件

bind 192.168.1.248
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile /var/run/redis.pid
loglevel notice
logfile "/data/logs/redis/6379/redis.log"
databases 16
save ""
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /data/redis/6379
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
maxmemory 4gb
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
cluster-enabled yes
cluster-config-file /data/tools/redis/conf/6379/6379-node.conf
cluster-node-timeout 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
5.3 启动redis,2台机器分别执行
/etc/init.d/redis_6379 start
/etc/init.d/redis_6380 start
/etc/init.d/redis_6381 start
6、启动redis-cluster
6.1 初始化redis-cluster
redis-trib.rb create --replicas 1 192.168.1.247:6379 192.168.1.247:6380 192.168.1.247:6381 192.168.1.248:6379 192.168.1.248:6380 192.168.1.248:6381
6.2 基本测试,命令行进入cluster 需要 加上-c参数,由于bind了IP,因此此处要-h 指定ip
redis-cli -c -h 192.168.1.247
192.168.1.247:6379> cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_sent:57818
cluster_stats_messages_received:57818
192.168.1.247:6379> 

从上可以看出,节点状态是ok,有6个节点。此命令也可用于监控redis-cluster的集群状态。
监控脚本

redis-cli -c -h 192.168.1.247 cluster info|grep 'cluster_state:ok'|wc -l
原文地址:https://www.cnblogs.com/cangyuefeng/p/10339106.html