redis cluster

本文将使用 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容器来构建

  1. 创建6个文件夹,来分别保存了不同配置的 redis.conf

redis.conf 中需要修改以下几个内容

  1. 90行左右的 port 6379 的端口,每个要不一样
  2. 1385行左右的 cluster-enabled yes
  3. 75行左右的 bind * -::* 允许所有地址连接
  4. 454行左右的 dir /data 这里要配置成你本地的路径
  5. 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
Send a Message