3主+3从,redis列表:
搭建集群至少需要3主3从6台服务器或进程
redis | ip+port |
---|---|
redis79 | 10.XX.XX.14:6379 |
redis80 | 10.XX.XX.14:6380 |
redis81 | 10.XX.XX.14:6381 |
redis79 | 10.XX.XX.15:6379 |
redis80 | 10.XX.XX.15:6380 |
redis81 | 10.XX.XX.15:6381 |
新建集群文件存放redis.conf
mkdir -p /home/docker/redis-cluster
在redis-cluster目录下创建redis79,redis80,redis81文件夹
mkdir /home/docker/redis-cluster/redis79 \
/home/docker/redis-cluster/redis80 \
/home/docker/redis-cluster/redis81 \
redis79,redis80,redis81 创建redis.conf 文件
# redis监听端口
port 6379
# 开启集群
cluster-enabled yes
# 集群配置文件
cluster-config-file nodes.conf
# 集群节点多少时间未响应视为该节点丢失
cluster-node-timeout 5000
appendonly yes
以下为详细配置内容
bind:指定服务器监听的IP地址,默认为127.0.0.1(本地回环地址)。
port:指定服务器监听的端口,默认为6379。
cluster-enabled:指定是否开启集群模式,默认为no。
cluster-config-file:指定集群配置文件的路径,默认为nodes.conf。
cluster-node-timeout:指定集群节点之间通信的超时时间,默认为15000毫秒。
cluster-announce-ip:指定集群节点之间通信时使用的IP地址,默认为当前节点的IP地址。
cluster-announce-port:指定集群节点之间通信时使用的端口,默认为当前节点的端口。
cluster-announce-bus-port:指定集群节点之间通信时使用的总线端口,默认为0。
cluster-require-full-coverage:指定是否要求集群中的所有槽位都有节点,默认为yes。
cluster-migration-barrier:指定集群迁移时的最小延迟时间,默认为1毫秒。
cluster-slave-validity-factor:指定从节点失效的时间因子,默认为10。
cluster-allow-reads-when-down:指定当主节点不可用时是否允许从节点进行读操作,默认为yes。
cluster-announce-ttl:指定集群节点之间通信时的TTL(生存时间),默认为10。
cluster-node-timeout:指定集群节点之间通信的超时时间,默认为15000毫秒。
cluster-require-full-coverage:指定是否要求集群中的所有槽位都有节点,默认为yes。
docker-compose.yml 编写
version : '3.8'
services:
redis79:
container_name: redis79
image: redis
ports:
- "10.XX.XX.14:6379:6379"
network_mode: "host"
volumes:
- ./redis-cluster/redis79/redis.conf:/home/docker/redis-cluster/redis79/redis.conf
- ./redis-cluster/redis79/data:/data
command: redis-server /home/docker/redis-cluster/redis79/redis.conf
redis80:
container_name: redis80
image: redis
ports:
- "XX.XX.14:6380:6380"
network_mode: "host"
volumes:
- ./redis-cluster/redis80/redis.conf:/home/docker/redis-cluster/redis80/redis.conf
- ./redis-cluster/redis80/data:/data
command: redis-server /home/docker/redis-cluster/redis80/redis.conf
redis81:
container_name: redis81
image: redis
ports:
- "10.xx.xx.15:6381:6381"
network_mode: "host"
volumes:
- ./redis-cluster/redis81/redis.conf:/home/docker/redis-cluster/redis81/redis.conf
- ./redis-cluster/redis81/data:/data
command: redis-server /home/docker/redis-cluster/redis81/redis.conf
启动容器
docker-compose up -d redis79 redis80 redis81
docker-compose ps --查看容器是否启动
集群处理
进入容器
docker exec -it redis79 bash
进入容器输入开启集群命令
redis-cli --cluster create 10.xx.xx.14:6379 10.xx.xx.14:6380 10.xx.xx.14:6381 10.xx.xx.15:63![在这里插入图片描述](https://img-blog.csdnimg.cn/3192b52e54ce4650b77b6e5e75a8d507.png)
79 10.xx.xx.15:6380 10.xx.xx.15:6381 --cluster-replicas 1
注:每个Redis集群中的节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如6379,还有一个额外的端口(通过在这个端口号上加10000)作为数据端口,例如:redis的端口为6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379。16379端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。
若无反应,或出现以下情况,则端口未开放
出现以下内容,则为成功
测试
连接节点
redis-cli -c -h 10.xx.xx.14 -p 6379
插入值
10.xx.xx.14:6379> set test "hello redis"
10.xx.xx.14:6380> get test
"hello redis"