美文网首页
Redis主从复制(基于docker)的配置和实现原理

Redis主从复制(基于docker)的配置和实现原理

作者: 张清柏 | 来源:发表于2020-07-14 14:48 被阅读0次
    • 这篇文章难度很低,但是我为什么还是记录下来呢?因为网络上的技术文章写的相当xxxxxx,作为一个新手,可能要绕很大一个弯子

    • 按照惯例,先贴一份redis配置文件,此处附链接了,为了避免说不是原创 ,redis配置文件

    • 使用docker下载redis镜像
      docker pull redis

    • 创建配置文件
      1.在我的家目录创建redis目录/home/guofu/redis

    2.进入redis目录,先从官网拷贝一份配置文件下来wget http://download.redis.io/redis-stable/redis.conf,然后复制2份

    guofu@guofu-Inspiron-3558 redis $ ls
    command  redis1.conf  redis2.conf  redis.conf
    

    3.使用redis.conf作为主服务器配置文件,主要修改以下内容

    #关闭保护模式
    protected-mode no
    #使用默认端口6379
    port 6379
    #允许后台运行
    daemonize yes
    #可改可不改,如果是在一台机器上面运行,必须修改
    pidfile /var/run/redis_6379.pid
    #日志文件,自定义
    logfile "/var/log/redis/redis_6379.log"
    
    • 启动一个redis实例吧,先看一下启动命令我再解释
    #创建实例
    guofu@guofu-Inspiron-3558 redis $ docker run --rm -d -p 16379:6379 --name mredis  \
    > -v /home/guofu/redis:/conf  \
    > -v  /home/guofu/redis/log/redis:/var/log/redis  \
    > -v /home/guofu/redis/data:/data \
    > redis  
    a1072b562eb6a3e0478d9fc4bccfd322f749a75d50462206fbdcd79abc4efb6b
    guofu@guofu-Inspiron-3558 redis $ docker ps -a 
    CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                      PORTS                                                                                                    NAMES
    a1072b562eb6        redis                    "docker-entrypoint.s…"   18 seconds ago      Up 15 seconds               0.0.0.0:16379->6379/tcp     
    
    • 命令解释
      参数:
      --rm 在容器终止运行后自动删除容器文件
      -d 后台运行
      -p 6379:6379 端口映射(本机6379端口映射容器6379端口)
      --name myredis 容器别名
      -v /etc/app/redis/conf:/conf 目录映射(本机redis配置文件目录)
      -v /etc/app/redis/data:/data 目录映射(本机redis数据目录)
      redis-server /conf/redis.conf --appendonly yes 在容器运行命令,并打开数据持久化
    • 看看这些挂载目录,宿主机都要存在哦,没有的话就创建
    • 进入容器启动redis服务,指定配置文件
    guofu@guofu-Inspiron-3558 redis $ docker exec -it a1072b562eb6 bash 
    root@a1072b562eb6:/data# /usr/local/bin/redis-server  /conf/redis.conf 
    
    #连接一下客户端
    root@a1072b562eb6:/data# /usr/local/bin/redis-cli                      
    127.0.0.1:6379> info
    #现在主从配置如下
    # Replication
    role:master
    connected_slaves:0
    master_replid:3167f202ef2507ed27172915040114d994d3069d
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:0
    second_repl_offset:-1
    repl_backlog_active:0
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:0
    repl_backlog_histlen:0
    
    #执行一条命令
    127.0.0.1:6379> set name jimi 
    OK
    
    
    • 关闭客户端链接,查看一下本容器的ip
    root@a1072b562eb6:/data# cat /etc/hosts
    127.0.0.1   localhost
    ::1 localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    #下面这个就是ip啦,记住这个ip
    172.17.0.2  a1072b562eb6
    
    • 主服务器创建完毕,退出,快捷键 ctrl+p+q;

    • 修改redis1.conf作为从服务器配置文件,主要修改以下内容

    #关闭保护模式
    protected-mode no
    #使用端口6371
    port 6371
    #允许后台运行
    daemonize yes
    #可改可不改,如果是在一台机器上面运行,必须修改
    pidfile /var/run/redis_6371.pid
    #日志文件,自定义
    logfile "/var/log/redis/redis_6371.log"
    #开启从服务模式 ,对应主的ip和端口
    replicaof 172.17.0.2 6379
    
    • 启动redis1.conf
    guofu@guofu-Inspiron-3558 bin $  docker run --rm -d -p 16371:6371 --name sredis1  \
    > -v /home/guofu/redis:/conf  \
    > -v  /home/guofu/redis/log/redis:/var/log/redis  \
    > -v /home/guofu/redis/data1:/data \
    > redis  
    b85b72c43c835946410ff56c82c821825031e276f2ed2f5d20bcb305ac92715a
    
    #进入容器配置
    guofu@guofu-Inspiron-3558 bin $ docker exec -it b85b72c43c835946410ff56c82c821 bash 
    root@b85b72c43c83:/data# /usr/local/bin/redis-server /conf/redis1.conf 
    root@b85b72c43c83:/data# /usr/local/bin/redis-cli -h 127.0.0.1 -p 6371 
    127.0.0.1:6371> info
    #主从信息如下
    # Replication
    role:slave
    master_host:172.17.0.2
    master_port:6379
    master_link_status:up
    #获取主服务器刚才设置的name;
    127.0.0.1:6371> get name
    "jimi"
    
    • 相同方法启动redis2.conf,不细说,此处说一下如何查看容器内的进程
    guofu@guofu-Inspiron-3558 redis $ docker top sredis2
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    999                 11447               11415               0                   20:51               ?                   00:00:00            redis-server *:6379
    root                11539               11415               0                   20:51               pts/0               00:00:00            bash
    root                11580               11447               0                   20:52               ?                   00:00:00            /usr/local/bin/redis-server 127.0.0.1:6371
    
    • redis2.conf启动效果如下
    # Replication
    role:slave
    master_host:172.17.0.2
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:6
    master_sync_in_progress:0
    slave_repl_offset:1148
    slave_priority:100
    
    127.0.0.1:6372> get name
    "jimi"
    
    
    • 至此,三台redis部署已经完毕

    相关文章

      网友评论

          本文标题:Redis主从复制(基于docker)的配置和实现原理

          本文链接:https://www.haomeiwen.com/subject/pfysqktx.html