docker實現redis主從複製
一、概覽
- 主庫:192.168.3.13:6380
- 從庫一:192.168.3.14:6381
- 從庫二:192.168.3.14:6382
2、開放上以埠
- 檢視所有開啟的埠: firewall-cmd --zone=public --list-ports
- 分別新增以上埠:firewall-cmd --zone=public --add-port=6380/tcp --permanent
- 重新整理防火牆:firewall-cmd --reload
二、安裝master庫
1、安裝映象
docker pull redis:6.2.5
2、新建目錄
mkdir -p /home/apps/redis-master/{conf,data}
3、建立/修改配置檔案
cd /home/apps/redis-master/conf
wget http://download.redis.io/redis-stable/redis.conf
-- 修改配置檔案,參考第5步
vim redis.conf
4、建立並啟動
docker run \
-d \
--name redis-master \
--restart=always \
--privileged=true \
-p 6380:6379 \
-v /home/apps/redis-master/conf/redis.conf:/etc/redis/redis.conf \
-v /home/apps/redis-master/data:/data \
redis:6.2.5 \
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 命令換行 |
5、修改redis.conf配置
命令 | 功能 |
---|---|
appendonly yes | 啟動Redis持久化功能 |
protected-mode no | 關閉protected-mode模式,此時外部網路可以直接訪問 (docker貌似自動開啟了) |
bind 0.0.0.0 | 註釋掉,設定所有IP都可以訪問 (docker貌似自動開啟了) |
requirepass 密碼 | 設定密碼 |
dir ./ | 輸入本地redis資料庫存放資料夾 |
三、安裝slave從庫
- 參考上面的建法,新建redis-slave-01、redis-slave-02
-- 新建目錄
mkdir -p /home/apps/redis-slave-01/{conf,data}
mkdir -p /home/apps/redis-slave-02/{conf,data}
--從主庫那裡複製配置檔案
# cp /home/apps/redis-master/conf/redis.conf /home/apps/redis-slave-01/conf/
# cp /home/apps/redis-master/conf/redis.conf /home/apps/redis-slave-02/conf/
-- 修改從庫配置
vim /home/apps/redis-slave-01/conf/redis.conf
# 配置連線主庫資訊
replicaof 192.168.3.13 6380
# 從機只讀模式預設是開啟的:
replica-read-only yes
# 配置主庫密碼
masterauth 123456
-- 啟動slave1
docker run -d --name redis-slave-01 --restart=always --privileged=true -p 6381:6379 -v /home/apps/redis-slave-01/conf/redis.conf:/etc/redis/redis.conf -v /home/apps/redis-slave-01/data:/data redis:6.2.5 redis-server /etc/redis/redis.conf
-- 啟動slave2
docker run -d --name redis-slave-02 --restart=always --privileged=true -p 6382:6379 -v /home/apps/redis-slave-02/conf/redis.conf:/etc/redis/redis.conf -v /home/apps/redis-slave-02/data:/data redis:6.2.5 redis-server /etc/redis/redis.conf
--檢視redis主從配置
# 進入容器
docker exec -it redis-slave-01 /bin/bash
# 連線redis
redis-cli -h 127.0.0.1 -p 6379 -a 123456
# 檢視主從配置
info replication
# Replication
role:slave
master_host:192.168.3.13
master_port:6380
master_link_status:up
四、錯誤分析
在從庫中出現:master_link_status:down
- 防火牆問題
- 密碼問題