20190929学习笔记(Redis集群Cluster搭建记录

注明:

1、环境CetOS 7.4

2、Redis版本5.0.5

 

一、下载及安装

Redis官方网站:https://redis.io/download

1、在某个目录下执行如下命令:

$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz

$ tar xzf redis-5.0.5.tar.gz

$ cd redis-5.0.5

$ make

 

2、在该目录下创建集群节点目录

如图:

redis-cli create redis-cli create cluster_Redis Cluster

我搭建的集群节点为单节点,非主从模式,在实际生产中不建议这样做,因为如果某个节点挂了连备机都没有,直接导致集群故障。

 

3、在节点目录下创建配置文件

配置文件redis.conf可从redis-5.0.5目录下拷贝,然后修改,我直接讲需要重点注意的地方

 

#指定redis只能接受来自此IP绑定的网卡的请求,注意此默认值默认外网是不可访问的,因此需要把此项注释掉

#bind 127.0.0.1

#是否开启保护模式。如果没有指定bind和密码,redis只会本地进行访问,拒绝外部访问。

protected-mode yes

#默认端口,建议生产环境不要使用默认端口避免被恶意扫描到

port 7000

#开启redis集群

cluster-enabled yes

#配置redis自动生成的集群配置文件名。确保同一系统中运行的各redis实例该配置文件不要重名。

cluster-config-file nodes7000.conf

#集群节点超时毫秒数

cluster-node-timeout 5000

#后台运行

daemonize yes

#配置PID文件路径,以端口号做后缀方便区分

pidfile /var/run/redis_7000.pid

#日志文件,如果指定了值,请手动创建文件,否则启动时会报文件不存在的错误

logfile "/usr/local/redisCluster/redis_7000/logs/redis.log"

#启动AOF增量持久化策略

appendonly yes

#发生改变就记录日志

appendfsync always

 

如果配置有误,在Redis启动时会报出相关行数的错误,请自行查询修改。

 

 

二、启动及设置环境变量

1、启动Redis

进入 Redis安装目录下的src目录:cd cd /usr/local/redisCluster/redis-5.0.5/src

该目录下面包含了Redis安装的很多文件,其中包括

(1)redis-server 服务器端操作,可以使⽤help查看帮助⽂档

(2)redis-cli 客户端操作

(3)redis-check-rdb 检查Redis转储数据库文件的完整性

(4)redis-check-aof Redis AOF文件检查和修复

现在分别启动Redis的3个节点

./ redis-server /usr/local/redisCluster/redis_7000/redis.conf

./ redis-server /usr/local/redisCluster/redis_7001/redis.conf

./ redis-server /usr/local/redisCluster/redis_7002/redis.conf

然后查看启动情况:ps –ef |grep redis

redis-cli create redis-cli create cluster_Redis5_02

 

2、添加环境变量

如果每次启动或者连接客户端都要进入Redis的安装目录未免有些麻烦,不如直接将其设置到环境变量中。3种方式如下:

方法一:用export命令,输入“export PATH="$PATH: /usr/local/redisCluster/redis-5.0.5/src”,临时生效。

方法二:修改profile文件,输入vim /etc/profile,进行修改,永久对所有用户生效。

方法三:修改.bashrc文件,输入vim /root/.bashrc,进行修改,永久对当前用户(root)生效。

方法二、三改动如下:

export REDIS_HOME=/usr/local/redisCluster/redis-5.0.5

export PATH=$PATH: $REDIS_HOME/src

使用永久生效的方式,修改文件后,执行source [文件](如 /etc/profile),让环境变量配置生效

修改生效后启动Redis就可以直接使用 redis-server [配置文件]启动Redis。

 

 

三、设置开机启动Redis集群节点

每次重启后需要手动启动Redis,为节省工作量,可设置开机启动Redis集群节点。

1、编写Redis集群节点启动脚本

注意:redis配置中需要开启后台启动, daemonize yes

以我的脚本为例,很粗鲁,仅供参考

#!/bin/sh
 
REDISPORT0=7000
REDISPORT1=7001
REDISPORT2=7002
 
EXEC=/usr/local/redisCluster/redis-5.0.5/src/redis-server
CLIEXEC=/usr/local/redisCluster/redis-5.0.5/src/redis-cli
 
PIDFILE=/var/run/redis_7000.pid
 
CONF0="/usr/local/redisCluster/redis_7000/redis.conf"
CONF1="/usr/local/redisCluster/redis_7001/redis.conf"
CONF2="/usr/local/redisCluster/redis_7002/redis.conf"
 
case "$1" in
    start)
        if [ -f $PIDFILE ]
        then
                echo "$PIDFILE exists, process is already running or crashed"
        else
                echo "Starting Redis server..."
                nohup $EXEC $CONF0 &
                nohup $EXEC $CONF1 &
                nohup $EXEC $CONF2 &
                            echo "Redis cluster started"
        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
                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

 

2、将其保存到目录/etc/init.d/下,命名为redisd

添加其执行权限chmod +x redisd 或 chmod 755 redisd

编写成功后执行文件看看是否可以正确启动,如有问题可通过查看日志nohup.out排查原因。

 

3、配置redisd开机执行

chkconfig redisd on

重启机器后,发现以上3个节点已经成功启动了。

 

 

四、创建Redis集群

1、以上述为例实现的非主从3节点Cluster集群,执行如下命令

redis-cli --cluster create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

补充一下:如果需要被其他机器访问,这里千万不能使用127.0.0.1,否则访问时会报错:No more cluster attempts left。

解决方法是,使用真实真实IP

 

2、网上有很多教程一般都以3主3从为例创建Cluster集群,执行如下命令

redis-cli --cluster create 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  --cluster-replicas 1

生产中建议使用主从模式创建集群,防止单个节点挂掉影响到整个系统。

上面的 --cluster-replicas 1 官方解释为:The option --cluster-replicas 1 means that we want a slave for every master created.意思是:为每一台主机(master)创建一台从机(slave),如果使用其他值,同理。

官方原文翻译:Redis-cli将为您提供一个配置。输入yes接受建议的配置。集群将被配置和连接,这意味着实例将被引导到彼此之间进行通信。最后,如果一切顺利,您将看到这样一条消息:

[OK] All 16384 slots covered

redis-cli create redis-cli create cluster_Redis集群_03