(全棧學習實踐)4、docker搭建redis主從實踐

前面mysql容器重建後須要從新運行 change master to 命令綁定關聯,8.0須要命令行下生效。
redis首先想到用官方的,沒想到進去各個基本shell命令沒法使用,因此先棄了。此次因爲官方沒有提供基本的配置文件,解壓redis-5.0.5.tar.gz複製 主配置redis.conf、哨兵配置sentinel.conf 到當前目錄,如:/root/tmp/dk/redis。mysql

一、製做配置文件

搜索修改git

# master服務器 redis.conf:
- # requirepass foobared
+ requirepass 123456
- dir ./             # 持久化數據目錄
+ dir /data
- appendonly no      # 開啓aof
+ appendonly yes
- bind 127.0.0.1     # 容許外網ip訪問
+ bind 0.0.0.0

// 從服務器:主+額外 redis.conf:
// remote_host:本身的內網、外網地址
- # replicaof <masterip> <masterport>  
+ replicaof remote_host 6379
- # masterauth <master-password>
+ masterauth 123456

二、啓動容器

# 建立容器運行
[]:~/tmp/dk/redis# docker run --name rm \
    -p 6379:6379 --restart=always -v \
    /root/tmp/dk/redis/data:/data -v \
    /root/tmp/dk/redis/redis.conf:/etc/redis/redis.conf \
    -d cffycls/redis5:1.6 redis-server /etc/redis/redis.conf
[]:~/tmp/dk/redis# docker run --name rs \
    -p 6381:6379 --restart=always -v \
    /root/tmp/dk/redis_slave/data:/data -v \
    /root/tmp/dk/redis_slave/redis.conf:/etc/redis/redis.conf \
    -d cffycls/redis5:1.6 redis-server /etc/redis/redis.conf

鏡像是redis5.0.5編譯的,直接啓動後就是主從同步的,不須要向mysql同樣進行配置(這裏起始數據不一致時:修改到當前最終配置,重啓即同步無缺)。直接同步成功,在master、slave查看關係 info replication均有對方信息。github

三、其餘狀況

a.百度replicaof

"master-slave 架構的描述改成 master-replica,SLAVEOF 提供別名 REPLICAOF,因此仍然可使用 SLAVEOF"。redis

b.是否要守護進程

這裏是通過屢次測試,發現:容器重啓,redis也會正常啓動。daemonize no 注意保持是 no,不然會報錯:
Error response from daemon: Container xx is restarting, wait until the container is running
可知容器內的守護進程與docker自己有衝突,保持默認的 daemonize no 正常,不要先入爲主的修改參數,考慮與主機安裝的不一樣。sql

c.bind地址是否要修改

已經設置過密碼,因此protected-mode保持默認值。docker

  • protected-mode yes #關閉保護模式,使外網能訪問
  • protected-mode no #開啓protected-mode保護模式,需配置bind ip或者設置訪問密碼

這裏是通過屢次修改配置重啓測試,得知master-slave:127.0.0.1-127.0.0.1能夠訪問,但單主從關係沒有創建;0.0.0.0-127.0.0.1正常,反正是推薦0.0.0.0-0.0.0.0。shell

同mysql同樣,須要重啓加載配置的,使用 docker restart rm rs 重啓方式。哨兵的配置於此相似,略過。
這裏基於以前redis的Dockerfile修改完善,推送到 cffycls/redis5:1.6 官方公共雲上了。服務器

相關文章
相關標籤/搜索