本文将使用 redis cluster模式来构建一个redis集群
redis cluster 会按照hash槽来分布存储数据,主节点将会有3个,并且自带主从,所以3个主节点还会有3个从节点
redis.conf 配置文件参考,这里是 6.2 版本
https://raw.githubusercontent.com/antirez/redis/6.2/redis.conf
这里会在一台宿主机上使用6个docker容器来构建
- 创建6个文件夹,来分别保存了不同配置的 redis.conf
redis.conf 中需要修改以下几个内容
- 90行左右的 port 6379 的端口,每个要不一样
- 1385行左右的 cluster-enabled yes
- 75行左右的 bind * -::* 允许所有地址连接
- 454行左右的 dir /data 这里要配置成你本地的路径
- 1393行左右的 cluster-config-file nodes-6379.conf
cluster-config-file <filename>:请注意,尽管有此选项的名称,但这不是用户可编辑的配置文件,而是Redis群集节点每次发生更改时自动保留群集配置(基本上为状态)的文件,以便能够 在启动时重新读取它。 该文件列出了群集中其他节点,它们的状态,持久变量等等。 由于某些消息的接收,通常会将此文件重写并刷新到磁盘上。
核心配置文件是
bind * -::*
port 6379
dir /data
cluster-enabled yes
cluster-config-file nodes-6379.conf
appendonly yes
appendfsync always
daemonize yes
然后使用 docker-compose.yml 创建集群
version: "3.4"
x-image:
&default-image
redis:latest
x-restart:
&default-restart
always
x-command:
&default-command
redis-server /etc/redis/redis.conf
x-netmode:
&default-netmode
host
services:
redis1:
image: *default-image
restart: *default-restart
container_name: redis6-m1
command: *default-command
volumes:
- ./6379/data:/data
- ./6379/redis.conf:/etc/redis/redis.conf
network_mode: *default-netmode
redis2:
image: *default-image
restart: *default-restart
container_name: redis6-m2
command: *default-command
volumes:
- ./6380/data:/data
- ./6380/redis.conf:/etc/redis/redis.conf
network_mode: *default-netmode
redis3:
image: *default-image
restart: *default-restart
container_name: redis6-m3
command: *default-command
volumes:
- ./6381/data:/data
- ./6381/redis.conf:/etc/redis/redis.conf
network_mode: *default-netmode
redis4:
image: *default-image
restart: *default-restart
container_name: redis6-s1
command: *default-command
volumes:
- ./6382/data:/data
- ./6382/redis.conf:/etc/redis/redis.conf
network_mode: *default-netmode
redis5:
image: *default-image
restart: *default-restart
container_name: redis6-s2
command: *default-command
volumes:
- ./6383/data:/data
- ./6383/redis.conf:/etc/redis/redis.conf
network_mode: *default-netmode
redis6:
image: *default-image
restart: *default-restart
container_name: redis6-s3
command: *default-command
volumes:
- ./6384/data:/data
- ./6384/redis.conf:/etc/redis/redis.conf
network_mode: *default-netmode
创建并初始化集群
redis-cli --cluster-replicas 1 --cluster create 192.168.194.189:6379 192.168.194.189:6380 192.168.194.189:6381 192.168.194.189:6382 192.168.194.189:6383 192.168.194.189:6384