1. 程式人生 > 其它 >docker搭建redis主從複製

docker搭建redis主從複製

1、安裝映象

docker pull redis:6.2.6

2、新建目錄

D:\redis-data\node1

5、修改mast 的 redis.conf配置

命令 功能
appendonly yes 啟動Redis持久化功能
protected-mode no 關閉protected-mode模式,此時外部網路可以直接訪問 
bind 0.0.0.0 註釋掉,設定所有IP都可以訪問 
requirepass 密碼 設定密碼
dir ./ 輸入本地redis資料庫存放資料夾

6、建立並啟動

docker run -d --name redis-master --restart=always --privileged=true -p 6379:6379 -v /d/redis-data/node1/redis.conf:/etc/redis/redis.conf -v /d/redis-data/node1:/data redis:6.2.6 redis-server /etc/redis/redis.conf

命令 描述
-d 後臺執行
--restart=always 重啟docker時,自動啟動相關容器
--privileged=true 以特權方式啟動容器,解決報錯問題(Permission denied)
--appendonly yes redis持久化
redis-server /etc/redis/redis.conf Redis 容器中設定 redis-server 每次啟動讀取 /etc/redis/redis.conf 這個配置為準
\ shell 命令換行

7、設定網路

 

 docker network connect newwork redis-master

8、安裝slave從庫

複製主庫的配置檔案,然後修改以下項

# 配置連線主庫資訊 replicaof 172.19.0.2 6379

此處是主庫的網路ip地址,通過 docker inspect

docker inspect redis-master

 

 

 

# 從機只讀模式預設是開啟的: replica-read-only yes

# 配置主庫密碼 masterauth 123456

執行

docker run -d --name redis-slave-01 --restart=always --privileged=true -p 6380:6379 -v /d/redis-data/node2/redis.conf:/etc/redis/redis.conf redis:6.2.6 redis-server /etc/redis/redis.conf

# 進入容器 docker exec -it redis-slave-01 /bin/bash # 連線redis redis-cli -h 127.0.0.1 -p 6379 -a 123456 # 檢視主從配置 info replication

 

 為up表示連線主庫成功

失敗及原因

1、docker run時,docker run repository name must be lowercase.
解決:-v /C/Program Files/Docker/redis/data:/redis/data 路徑存在空格,使用"“包裹有空格的部分:-v /C/”Program Files”/Docker/redis/data:/redis/data
2、can’t open config file ‘/etc/redis/redis-6379.con’: No such file or directory
3、注意dir: 快照檔案在容器中的存放目錄,要與掛載目錄一致
4、不要在配置檔案寫daemonize yes,會與docker run衝突,想後臺執行只可以在docker run 里加上-d
5、Error condition on socket for SYNC: Connection refused
slaveof寫的不對,master的ip不是127.0.0.1,去master控制檯
cat /etc/hosts,下面的才是master的ip
6、Failed trying to load the MASTER synchronization DB from disk
取消data掛載,即取消-v D:\docker\redis\data:/redis/data的掛載,還要註釋slave.conf中dir的路徑
7、如何在windows登入容器內redis客戶端檢視redis資訊
解決:開啟Windows PowerShell,docker exec -it 07de9938cf17 redis-cli -p 埠號,(07de9938cf17是容器id)登入用auth 123,(123是redis密碼),執行info replication,檢視role:master
感謝:https://blog.csdn.net/qq_33067315/article/details/114995533
8、redis master重啟後無法同步
在master的conf裡也加上masterauth 123(123是master密碼,當master成為slave也需要masterauth)

匯出映象:docker save -o image-id,輸出位置在命令列所在路徑

 

來源:https://www.cnblogs.com/lvlinguang/p/15120440.html

https://blog.csdn.net/hu_mingwei/article/details/119299018