Linux环境 Redis-6.2.6集群部署
基础安装
- redis-6.2.6下载地址,上传redis至服务器/usr/local
- /usr/local类似于windows上安装软件时的自定义安装目录,可根据实际情况自己选择。
- 安装时各种操作尽量使用非root用户去操作。
-
解压
tar -zxvf /usr/local/redis-6.2.6.tar.gz
,重命名mv redis-6.2.6 redis
-
安装redis
cd /usr/local/redis make
-
修改配置
redis.conf
,仅供参考,不同场景,配置不同。# 端口号 port 6379 # 是否是后台运行 daemonize yes # 注释掉IP这一行 # bind XXX.XXX.XXX.XXX # 开启AOF模式 appendonly yes # 为了可以远程链接,关闭保护模式 protected-mode no # 设置密码 requirepass 123456
-
验证redis安装
# 启动redis ./src/redis-server redis.conf # 查看redis 是否开启 ps -ef|grep redis|grep -v grep # 杀死进程 kill -9 pid
附:
单机修改密码步骤
redis/src/redis-cli -c -h 127.0.0.1 -p 6379
auth 123456
config set requirepass Carry@213
auth Carry@213
集群部署
-
创建集群文件夹
mkdir /usr/local/redis_cluster cd /usr/local/redis_cluster mkdir -p 6380/data 6381/data 6382/data 6383/data 6384/data 6385/data
-
复制集群可执行文件
mkdir /usr/local/redis_cluster/bin cd /usr/local/redis/src cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-cli redis-server redis-trib.rb /usr/local/redis_cluster/bin
-
复制集群配置文件
cp /usr/local/redis/redis.conf /usr/local/redis_cluster/6380
修改配置
vi 6380/redis.conf
,参考如下# 每个节点的端口号 port 6380 # 是否是后台运行 daemonize yes # 注释掉IP这一行 # bind XXX.XXX.XXX.XXX # 数据文件存放位置 dir /usr/local/redis_cluster/6380/data/ # 防止启动多个进程副本的pid文件,主要文件名要与端口号对应 pidfile /var/run/redis_6380.pid # 集群模式配置 cluster-config-file要与port对应 cluster-enabled yes cluster-config-file nodes6380.conf cluster-node-timeout 15000 # 开启AOF模式 appendonly yes # 为了可以远程链接,关闭保护模式 protected-mode no
修改完成之后将6380的配置文件,拷贝到文件6381-6385的文件下面,并且替换里面内容端口
cp -rf /usr/local/redis_cluster/6380/redis.conf /usr/local/redis_cluster/6381 cp -rf /usr/local/redis_cluster/6380/redis.conf /usr/local/redis_cluster/6382 cp -rf /usr/local/redis_cluster/6380/redis.conf /usr/local/redis_cluster/6383 cp -rf /usr/local/redis_cluster/6380/redis.conf /usr/local/redis_cluster/6384 cp -rf /usr/local/redis_cluster/6380/redis.conf /usr/local/redis_cluster/6385
vim /usr/local/redis_cluster/6381/redis.conf :%s/6380/6381/g vim /usr/local/redis_cluster/6382/redis.conf :%s/6380/6382/g vim /usr/local/redis_cluster/6383/redis.conf :%s/6380/6383/g vim /usr/local/redis_cluster/6384/redis.conf :%s/6380/6384/g vim /usr/local/redis_cluster/6385/redis.conf :%s/6380/6385/g
注:redis的集群配置的前期是不能设置密码的!
-
使用root用户,开启防火墙端口
此时要开启所有端口,否则会出现Waiting for the cluster to join…
是因为集群总线的端口没有开放集群总线
每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。# 查看状态 systemctl status firewalld # 开启防火墙 systemctl start firewalld # 开放6380、6381、6382、6383、6384、8385、16380、16381、16382、16383、16384、16385 firewall-cmd --permanent --add-port=6380/tcp firewall-cmd --permanent --add-port=16380/tcp firewall-cmd --permanent --add-port=6381/tcp firewall-cmd --permanent --add-port=16381/tcp firewall-cmd --permanent --add-port=6382/tcp firewall-cmd --permanent --add-port=16382/tcp firewall-cmd --permanent --add-port=6383/tcp firewall-cmd --permanent --add-port=16383/tcp firewall-cmd --permanent --add-port=6384/tcp firewall-cmd --permanent --add-port=16384/tcp firewall-cmd --permanent --add-port=6385/tcp firewall-cmd --permanent --add-port=16385/tcp # 重启防火墙(修改配置后要重启防火墙) firewall-cmd --reload # 查看开放端口 firewall-cmd --list-ports # 关闭防火墙 systemctl stop firewalld
-
启动各个节点
cd /usr/local/redis_cluster bin/redis-server 6380/redis.conf bin/redis-server 6381/redis.conf bin/redis-server 6382/redis.conf bin/redis-server 6383/redis.conf bin/redis-server 6384/redis.conf bin/redis-server 6385/redis.conf
查看redis启动情况:
ps -ef|grep redis|grep -v grep
-
配置集群
./bin/redis-cli --cluster create --cluster-replicas 1 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385
-
密码设置
cd /usr/local/redis_cluster ./bin/redis-cli -c -h 127.0.0.1 -p 6380 # 执行以下命令 密码:123456(推荐强密码) config set masterauth 123456 config set requirepass 123456 # 上面的密码改完就会立刻生效,所以需要你马上输入一次密码 auth 123456 config rewrite
然后重复操作6381-6385节点
开机自启
-
使用root用户创建文件
vi /etc/init.d/redis
-
填写内容
#!/bin/sh # # Simple Redis init.d script conceived to work on Linux systems # as it does use of the /proc filesystem. # chkconfig: 2345 80 90 # description: Redis is a persistent key-value database REDISPORT0=5380 REDISPORT1=5381 REDISPORT2=5382 REDISPORT3=6380 REDISPORT4=6381 REDISPORT5=6382 EXEC=/usr/local/redis_cluster/bin/redis-server CLIEXEC=/usr/local/redis_cluster/bin/redis-cli case "$1" in start) CONF="/usr/local/redis_cluster/${REDISPORT0}/redis.conf" echo "Starting Redis server on $REDISPORT0..." $EXEC $CONF & ! CONF="/usr/local/redis_cluster/${REDISPORT1}/redis.conf" echo "Starting Redis server on $REDISPORT1..." $EXEC $CONF & ! CONF="/usr/local/redis_cluster/${REDISPORT2}/redis.conf" echo "Starting Redis server on $REDISPORT2..." $EXEC $CONF & ! CONF="/usr/local/redis_cluster/${REDISPORT3}/redis.conf" echo "Starting Redis server on $REDISPORT3..." $EXEC $CONF & ! CONF="/usr/local/redis_cluster/${REDISPORT4}/redis.conf" echo "Starting Redis server on $REDISPORT4..." $EXEC $CONF & ! CONF="/usr/local/redis_cluster/${REDISPORT5}/redis.conf" echo "Starting Redis server on $REDISPORT5..." $EXEC $CONF & ! ;; stop) es_pid=`ps -aux|grep redis|grep ${REDISPORT0}|grep -v grep|awk '{print $2}'` kill -9 $es_pid echo "$REDISPORT0 stopped" es_pid=`ps -aux|grep redis|grep ${REDISPORT1}|grep -v grep|awk '{print $2}'` kill -9 $es_pid echo "$REDISPORT1 stopped" es_pid=`ps -aux|grep redis|grep ${REDISPORT2}|grep -v grep|awk '{print $2}'` kill -9 $es_pid echo "$REDISPORT2 stopped" es_pid=`ps -aux|grep redis|grep ${REDISPORT3}|grep -v grep|awk '{print $2}'` kill -9 $es_pid echo "$REDISPORT3 stopped" es_pid=`ps -aux|grep redis|grep ${REDISPORT4}|grep -v grep|awk '{print $2}'` kill -9 $es_pid echo "$REDISPORT4 stopped" es_pid=`ps -aux|grep redis|grep ${REDISPORT5}|grep -v grep|awk '{print $2}'` kill -9 $es_pid echo "$REDISPORT5 stopped" ;; *) echo "start|stop" ;; esac exit $?
-
添加执行权限
chmod +x /etc/init.d/redis
-
设置开机自启
chkconfig --add redis
异常情况
问题1:设置机器时出现,Sorry, can’t connect to node或者Node is not empty
解决方法:
- 关闭集群的所有实例
- 删除掉每个节点文件下的 xx.rdb 和 xx.conf文件
- 重启redis各个节点
参考链接: