还在用单机版?教你用Docker+Redis搭建主从复制多实例

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

转载声明:转载请注明出处,本技术博客是本人原创文章

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 还在用单机版?教你用Docker+Redis搭建主从复制多实例

0. 目标

本地搭建三个redis实例(一主两备),实现效果:主实例插入数据备实例可以复制同步过去。

1. 安装和运行docker

docker安装步骤省略,大家可以从官网下载并安装。

检查docker是否运行成功:


docker info

出现回显表示运行成功,可以做下一步操作了。

2. 拉取redis镜像文件

执行以下命令默认拉取tag为latest的官方redis镜像


docker pull redis

3. 准备好redis配置文件redis.conf

下载链接:

https://pan.baidu.com/s/14tWHtk3mch3e3VlT9TYX1A  密码:q3uk

拷贝为3三份,如:redis01.conf, redis02.conf, redis03.conf

打开所有的配置文件,修改如下配置项:

  • 注释只监听本地选项,可以远程连接。#bind 127.0.0.1
  • 关闭保护模式 protected-mode no
  • 打开AOF持久化开关 appendonly yes
  • 4. 启动redis实例

    
    # 实例1
    docker run -p 6381:6379 --name redis-server-01 -v /your/path/redis/conf/redis01.conf:/etc/redis/redis.conf -v /your/path/redis/data01:/data -d redis redis-server /etc/redis/redis.conf
    # 实例2
    docker run -p 6382:6379 --name redis-server-02 -v /your/path/redis/redis/conf/redis02.conf:/etc/redis/redis.conf -v /your/path/redis/data02:/data -d redis redis-server /etc/redis/redis.conf
    # 实例3
    docker run -p 6383:6379 --name redis-server-03 -v /your/path/redis/conf/redis03.conf:/etc/redis/redis.conf -v /your/path/redis/data03:/data -d redis redis-server /etc/redis/redis.conf
    

    对以上命令简单解释:

  • 参数-p 6381:6379,6381表示宿主机端口,6379表示容器实例端口,意思是将容器实例端口映射到宿主机端口。
  • 参数--name redis-server-01,给容器实例命名。
  • 参数-v /your/path/redis/conf/redis01.conf:/etc/redis/redis.conf,冒号前是宿主机配置文件路径,冒号后是容器的配置文件路径,意思是将容器实例的配置路径映射到宿主机的路径。
  • 参数-v /your/path/redis/data01:/data,如上面意思相同。
  • 选项-d表示以后台形式运行实例。
  • 参数redis-server /etc/redis/redis.conf表示执行redis-server命令, /etc/redis/redis.conf表示以该配置文件启动redis实例,注意配置文件必须为redis-server命令的第一个参数。
  • 5. 配置主从复制集群

    检查实例运行状态:

    
    docker ps
    

    回显有三个redis实例即为正常。查询实例1:redis-server-01 运行的内部ip

    
    docker inspect redis-server-01
    

    通过回显可以看到:”IPAddress”: “172.17.0.4” 我们将实例1规划为主,另外两个实例自然为备了,通过将主的ip和port配置在备的配置文件中即可实现主从复制的效果。

    修改redis02.conf和redis03.conf配置文件,找到replicaof选项(redis5.0之前是slaveof),修改为:

    
    replicaof 172.17.0.4 6379
    

    修改完毕,重启实例2和实例3:

    
    docker restart redis-server-02
    docker restart redis-server-03
    

    检查实例1的状态是否为主,并且挂载两个备实例:

    
    docker exec -it redis-server-01 redis-cli
    127.0.0.1:6379 info
    

    回显如下表示主从复制配置成功:

    
    # Replication
    role:master
    connected_slaves:2
    slave0:ip=172.17.0.3,port=6379,state=online,offset=84,lag=1
    slave1:ip=172.17.0.2,port=6379,state=online,offset=84,lag=1
    

    6. 测试主从复制效果

    连接redis实例1插入一条记录:

    
    docker exec -it redis-server-01 redis-cli # 连接实例1
    127.0.0.1:6379 set name ray  # 插入一条数据
    OK  # 插入成功
    

    连接redis实例2和实例3查看是否复制成功:

    
    docker exec -it redis-server-02 redis-cli # 连接实例2
    127.0.0.1:6379 get name
    "ray"   # 可以查到,表明从实例已经将主实例的数据同步过来了
    

    总结:搭建Redis主从复制实例需要有一点docker的基础,如果你对docker比较熟悉了,那搭建过程实在太容易了。没有docker基础,只要按照上面的命令逐个运行也可以100%成功哦。

    精彩推荐

    还在用单机版?教你用Docker+Redis搭建主从复制多实例

    原文始发于微信公众号(Java笔记虾):还在用单机版?教你用Docker+Redis搭建主从复制多实例

    本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

    转载声明:转载请注明出处,本技术博客是本人原创文章

    本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

    原文链接:blog.ouyangsihai.cn >> 还在用单机版?教你用Docker+Redis搭建主从复制多实例


     上一篇
    卧槽!Intellij IDEA中竟然有这么多炫酷的插件,啪啪啪~ 卧槽!Intellij IDEA中竟然有这么多炫酷的插件,啪啪啪~
    1、日晒主题 Solarized Themes 推荐指数:☆☆☆ 推荐理由:在梳理别人的代码的时候, 能够很清晰的看到依赖调用时序 4、mybatis插件集合  :MyBatis Log Plugi
    下一篇 
    啪啪打脸!领导说——try-catch要放在循环体外! 啪啪打脸!领导说——try-catch要放在循环体外!
    **来源:Java中文社群     ** 今天给大家带来的是关于 try-catch 应该放在循环体外,还是放在循环体内的文章,我们将从性能和业务场景分析这两个方面来回答此问题。 很多人对 try-catch 有一定的误解,比如我们经常会把