redis 集群搭建
高可用方案
一般常用的有两种高可用方案:
- redis 哨兵
- redis 集群
在 redis 早期版本中,只能使用哨兵模式,但这种模式下,需要多一个守护对资源进行监控,并且在 master 断掉的时候切换过程比较慢。
在 5.0 之后,一般推荐使用 redis 集群方案实现高可用。
操作环境
使用了三台机器,以三主三从的方案进行部署,在一台机器上部署一主一从,其中 8001 是主节点,8002 是从节点。
- redis01: 192.168.0.2
- redis02: 192.168.0.3
- redis03: 192.168.0.4
虽然这三台机器都是 Ubuntu Server 18.04,但是内核版本都不相同,所以都是单独执行的编译过程。
决定不使用系统空间,而使用 /opt/ 的上 TB 空间。
所有 redis 相关的数据都在 /opt/redis/ 下面:
bin/ 二进制程序
conf/ 配置文件
data/ 运行产生文件
log/ 日志文件
redis-6.0.7/ 源代码
部署过程
主要是配置文件的处理:
主节点配置以下参数:
- daemonize yes
- port 8001
- dir /opt/redis/data/master
- cluster-enabled yes
- cluster-config-file /opt/redis/conf/nodes-8001.conf
- cluster-node-timeout 15000
- #bind 127.0.0.1
- protected-mode no
- appendonly yes
- requirepass abcdefg
- masterauth abcdefg
- logfile /opt/redis/log/redis-master-8081.log
从节点配置以下参数:
- daemonize yes
- port 8002
- dir /opt/redis/data/master
- cluster-enabled yes
- cluster-config-file /opt/redis/conf/nodes-8002.conf
- cluster-node-timeout 15000
- #bind 127.0.0.1
- protected-mode no
- appendonly yes
- requirepass abcdefg
- masterauth abcdefg
- logfile /opt/redis/log/redis-master-8082.log
其实在此时,还并没有主从的概念,只是为了方便后面的操作。
在 redis 6.x 之后,可以直接使用 redis-cli 添加集群,不用再手动的一个一个的配置。
/opt/redis/bin/redis-cli -a abcdefg --cluster create --cluster-replicas 1 192.168.0.2:8001 192.168.0.2:8002 192.168.0.3:8001 192.168.0.3:8002 192.168.0.4:8001 192.168.0.4:8002
根据提示,直接确认 yes 即可。
在这里,我偷了懒,使用了 -a 参数,在之后的实践中,命令行内使用 –askpass 进行权限识别。
使用方法
使用三方工具,直接连接以下配置即可,默认密码为:abcdefg。
- -h 192.168.0.2 -p 8001
- -h 192.168.0.2 -p 8002
- -h 192.168.0.3 -p 8001
- -h 192.168.0.3 -p 8002
- -h 192.168.0.4 -p 8001
- -h 192.168.0.4 -p 8002
但是 redis 集群的高可用只是保证数据的高可用,而不是无视连接错误的高可用,也就是说,单节点挂了,它的数据会通过从节点拷贝到其他的主节点上,但是直接连接服务会无法连接。这需要更高一层的 keepalivd 或者 nginx 来实现。