使用Docker Compose搭建Redis主从集群

本文介绍了如何在单个虚拟机上利用docker和docker-compose设置一个Redis主从集群,包括创建配置文件,修改端口,启动服务,并通过inforeplication命令验证主从节点的同步状态。主节点用于写操作,从节点用于读操作。
摘要由CSDN通过智能技术生成

一、本次环境使用到了docker、docker-compose、redis

二、我们搭建的主从集群结构如图:

共包含三个节点,一个主节点,两个从节点。

这里我们会在同一台虚拟机中开启3个redis实例,模拟主从集群,信息如下:

IPPORT角色
192.168.60.1296379master
192.168.60.1296380slave
192.168.60.1296381slave

 三、准备实例和配置

要在同一台虚拟机开启3个实例,必须准备三份不同的配置文件和目录,配置文件所在目录也就是工作目录。

1)创建目录

我们创建三个文件夹,名字分别叫master、slave1、slave2:

# 创建三个目录
mkdir -p /redis/redis-node/master
mkdir -p /redis/redis-node/slave1
mkdir -p /redis/redis-node/slave2

如图:

2)因为docker启动redis是默认没有配置文件的。我们可以去github下载对应版本的redis.conf配置文件,配置文件内容:这是花费20分钟清除所有注释后的配置文件,建议去直接下载。

bind 0.0.0.0
protected-mode no
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
always-show-logo no
set-proc-title yes
proc-title-template "{title} {listen-addr} {server-mode}"
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
rdb-del-sync-files no
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-diskless-load disabled
repl-disable-tcp-nodelay no
replica-priority 100
acllog-max-len 128
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
lazyfree-lazy-user-del no
lazyfree-lazy-user-flush no
oom-score-adj no
oom-score-adj-values 0 200 800
disable-thp yes
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
jemalloc-bg-thread yes

3)将我们下载好的redis.conf配置文件分别复制到 master slave1 slave2 这三个文件

cp redis.conf /redis/redis-node/master
cp redis.conf /redis/redis-node/slave1
cp redis.conf /redis/redis-node/slave2

4)修改redis.conf一下配置文件

# 修改复制好的这三个配置文件,只需要修改一下配置即可
# 三个配置文件要修改的除了端口(port),其他部分一样
bind 0.0.0.0  
protected-mode no
# 三个结点端口分别改成6379(主) 6380(从) 6381(从) 
port 6379   
logfile "6379.log"
 
# 注意三个节点的redis.conf配置文件都需要修改,

5)在redis-node文件下创docker-compose.yml文件

6编写docker-compose.yml 文件

version: "3.0"      # docker-compose的版本号
 
networks:     #网络配置    
  redis-sentinel-1:
    driver: bridge
 
services:           #所有服务的入口  固定写法
  redis-master:     #自定义服务名
    image: redis:6.2.7           #我们所需要运行的镜像,没有的话,会自定为我们下载
    container_name: redis-master  #镜像运行后的容器名,自定义
    ports:
      - 6379:6379           #宿主机的6379映射容器内部的6379端口
    volumes:                #目录挂载分号 : 右边代表容器内部的目录,分号左边表示宿主机的目录,
      - /redis/redis-node/master/redis.conf:/etc/redis/redis.conf
      - /redis/redis-node/master/data:/data
    command: bash -c "redis-server /etc/redis/redis.conf"  #容器启动后,运行的命令
    networks:
      - redis-sentinel-1
   redis-slave-1:
    image: redis:6.2.7
    container_name: redis-slave-1
    ports:
      - 6380:6380
    volumes:
      - /redis/redis-node/slave1/redis.conf:/etc/redis/redis.conf
      - /redis/redis-node/slave1/data:/data
    # 从主节点同步数据到从节点   
    command: bash -c "redis-server /etc/redis/redis.conf  --slaveof 47.94.85.176 6379"
    depends_on:
      - redis-master
    networks:
      - redis-sentinel-1
 
  redis-slave-2:
    image: redis:6.2.7
    container_name: redis-slave-2
    ports:
      - 6381:6381
    volumes:
      - /redis/redis-node/slave2/redis.conf:/etc/redis/redis.conf
      - /redis/redis-node/slave2/data:/data
    command: bash -c "redis-server /etc/redis/redis.conf --slaveof 47.94.85.176 6379"
    depends_on:
      - redis-master
    networks:
      - redis-sentinel-1

7)使用docker-compose up -d启动文件

 

四、测试

 1,查看节点信息(执行info replication查看节点信息)

1)6379主节点信息

2)6380、6381从节点信息 

 

 2.进行读写操作

1)主节点

2)从节点

 我们可以发现从节点同步了上面主节点添加的数据,同时发现主节点可以进行查询和添加的操作,从节点只能进行查询的操作,进行添加的操作会给出“你没有写入权限”的提示。

五、总结

通过以上的步骤,我们就使用docker-compose搭建了一主两从的redis主从复制的结构,主机用来写,从机用来读。想详细了解其中原理的同学可以去研究研究,主从之间是如何进行建立连接的,全量复制和增量复制又是怎么回事,这种结构有什么优缺点,后面的哨兵模式又是怎么回事?集群如何搭建等等。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值