此示例是在一台服务器上搭建的伪集群,生产尽量多台机器部署,可一台机器开启多个节点,集群最少是6个节点(主从结构以及半数选举机制决定)
1.下载reids
wget https://download.redis.io/releases/redis-6.2.6.tar.gz
使用make命令编译Redis需要c语言环境,CentOS自带c语言环境,若是使用其他Linux系统中没有c语言环境,则需要安装,如yum安装: yum install gcc-c++
查看Linux系统有没有 gcc 环境
gcc --version
没有就安装,下载安装最新版的 gcc 编译器,安装C语言的编译环境
yum install gcc-c++
gcc -v // 查看gcc版本
安装完 gcc 后, 解压redis安装包
2.解压并安装redis
tar -zxvf redis-6.2.6.tar.gz
mv redis-6.2.6 /usr/local/redis
cd /usr/local/redis
[root@redis-cluster /data/redis-6.2.6]# make
编译过后,就是安装了,安装Redis的命令如下:
make install PREFIX=/usr/local/redis
该命令中,前面的”make install PREFIX=”是固定的,而”/usr/local/redis”是Redis的安装目录,一般就这么写,如若需要安装在其他地方,只需将此路径更换即可。
安装完redis后,修改配置参数
3、修改配置
cd /usr/local/redis
修改redis.conf文件:vim redis.conf
修改如下配置:
daemonize yes,把默认的no改为yes(允许支持后台启动)
bind 0.0.0.0 让所有人都可访问,将bind 127.0.0.1 -::1修改为bind 0.0.0.0
protected-mode no 改为no 关闭redis的服务保护模式,要配合requirepass 设置密码使用,如果想要开启密码保护,则所有节点的密码都必须一致
requirepass boyunvision2021
logfile "/usr/local/redis/bin/redis.log" 如果不设置路径不会保存日志
loglevel verbose
appendonly yes #打开aof功能
maxmemory设置为0,表示cache大小无限制
maxmemory-policy noeviction
aof-use-rdb-preamble yes
如果appendonly.aof文件没有生成则执行下redis-cli config set appendonly yes 或者已经登录redis-cli则直接执行config set appendonly yes 文件就生成了
集群配置修改:
port 1990 // 节点端口
cluster-enabled yes // 开启集群模式
cluster-node-timeout 15000 // 节点超时时间(接收 pong 消息回复的时间)
cluster-config-file /usr/local/redis/cluster/1990/nodes-1990.conf //集群内部配置文件
pidfile /usr/local/redis/bin/redis_1990.conf //pid存放
logfile /usr/local/redis/bin/redis1990.log //日志存放路径
dbfilename dump1990.rdb
修改完一个redis.conf文件后,复制redis.conf文件到/usr/local/redis/cluster/1990、1991......1995每个目录下一个文件,并修改文件名为redis1990.conf、redis1991.conf......redis1995.conf
4、启动,执行如下命令同时启动所有
/usr/local/redis/bin/redis-server /usr/local/redis/1990/redis1990.conf &&
/usr/local/redis/bin/redis-server /usr/local/redis/1991/redis1991.conf &&
/usr/local/redis/bin/redis-server /usr/local/redis/1992/redis1992.conf &&
/usr/local/redis/bin/redis-server /usr/local/redis/1993/redis1993.conf &&
/usr/local/redis/bin/redis-server /usr/local/redis/1994/redis1994.conf &&
/usr/local/redis/bin/redis-server /usr/local/redis/1995/redis1995.conf
5、开启集群,集群最少是6个节点
因为我们的redis版本是6.2.6,根据redis官网,redis5及以上的版本可以使用redis-cli --cluster 命令创建集群:
/usr/local/redis/bin/redis-cli --cluster create --cluster-replicas 1 ip:1995 ip:1994 ip:1993 ip:1992 ip:1991 ip:1990
如果你的redis设置的有密码,在以上命令的后边加上密码即可
redis-cli --cluster create --cluster-replicas 1 -a 密码 ip:1995 ip:1994 ip:1993 ip:1992 ip:1991 ip:1990
如果要对集群设置密码:requirepass和masterauth 都需要进行设置,并且需要每个节点的密码都保持相同;
6、测试
./redis-cli -c -p 1995 -a 密码
部分问题解决方案:
1、ERR Slot 0 is already busy (Redis::CommandError)
原因分析:
这是由于之前搭建集群是,slot 被占用了,清理一下之前数据,重启就可
解决:
/usr/local/redis/bin/redis-cli -h ip -p 1995
#执行如下两条命令后重启
flushall
cluster reset
2、 分配指定范围的槽位不成功(error) ERR Invalid or out of range slot
解决:
redis-cli -h 服务器IP -p 端口号 cluster addslots {0..5460}
3、redis最后集群创建出现 /usr/bin/env: ruby: 没有那个文件或目录问题
解决:
/usr/local/redis/bin/redis-cli -h ip -p 1995 --cluster create --cluster-replicas 1 ip:1995 ip:1994 ip:1993 ip:1992 ip:1991 ip:1990
>>> Performing hash slots allocation on 6 nodes... 最少是6个节点
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
......