1. 程式人生 > 其它 >docker實現redis主從複製

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

  • 防火牆問題
  • 密碼問題

五、參考網址