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、在该目录下创建集群节点目录
如图:
我搭建的集群节点为单节点,非主从模式,在实际生产中不建议这样做,因为如果某个节点挂了连备机都没有,直接导致集群故障。
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
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