在docker中部署redis主從配置


環境說明:

  • 阿里雲服務器
  • Ubuntu 16.04
  • docker

最終生成目錄如下:

root@iZ282zj76jqZ:/docker/redis# tree
.
├── redis6379
│   ├── appendonly.aof
│   ├── dump.rdb
│   ├── red2.so
│   └── redis.conf
├── redis6380
│   ├── appendonly.aof
│   ├── dump.rdb
│   └── redis.conf
├── redis6381
│   ├── appendonly.aof
│   ├── dump.rdb
│   └── redis.conf
├── redis6382
│   ├── appendonly.aof
│   ├── dump.rdb
│   └── redis.conf
├── redis.conf
├── sentinel
│   └── sentinel.conf
└── sentinel.conf

 

1、拉取Redis鏡像

docker pull redis

 

 

2、配置Redis啟動配置文件,此處我創建一個專用目錄,存放Redis相關數據及配置

mkdir /docker/redis

在此目錄下下載服務啟動配置文件

wget http://download.redis.io/redis-stable/redis.conf

下載后,進入文件修改下面3個參數(在非編輯狀態下,采用 /bind 來搜索字符串位置 )

vim  /docker/redis/redis.conf 
# 修改下面三個配置參數 #bind
127.0.0.1 #如果bind選項為空的話,則允許所有來自於可用網絡接口的連接 protected-mode no #保護模式,若為yes,只允許本地客戶端連接 appendonly yes #開啟后,Redis會把每次寫入的數據在接收后都寫入 appendonly.aof 文件,每次啟動時Redis都會先把這個文件的數據讀入內存里

 

 

3、在此目錄下新建Master(redis6379)文件夾,並復制上述conf文件至文件夾中, Master的 conf 文件路徑為

/docker/redis/redis6379/redis.conf

 

 

4、利用 conf 創建 Master 容器

# --restart always (docker啟動時,本鏡像也自動啟動) 
# --name 容器名為 redis-6379
# -p 映射本地端口 6379 至容器端口 6379
# -v 綁定Master目錄 /docker/redis/redis6379 映射至 docker 中的 /data
# -d 后台運行容器,並返回容器ID
# 指定鏡像 redis
# 利用 conf 啟動服務 redis-server /data/redis.conf

docker run --restart always --name redis-6379 -p 6379:6379 -v /docker/redis/redis6379:/data -d redis redis-server /data/redis.conf

 

 

5、查看容器啟動情況

root@iZ282zj76jqZ:/docker/redis/redis6379# docker ps |grep redis-6379
792067d225e6        redis               "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:6379->6379/tcp              redis-6379

查看 Master 容器的IP,用於配置 Salve 中的參數

# 查看 Master 容器 IP,
# docker inspect redis-6379 查看 NetworkSettings 配置中 IPAdress docker inspect
--format='{{.NetworkSettings.IPAddress}}' redis-6379 # 192.168.0.3

 

 

6、創建 Salve 文件夾(redis6380 、redis6381 、 redis6382),復制上述 redis.conf 文件分別至三個夾中,平修改配置

vim  /docker/redis/redis.conf 

# 修改下面四個配置參數
#bind 127.0.0.1        #如果bind選項為空的話,則允許所有來自於可用網絡接口的連接
protected-mode no      #保護模式,若為yes,只允許本地客戶端連接
appendonly yes         #開啟后,Redis會把每次寫入的數據在接收后都寫入 appendonly.aof 文件,每次啟動時Redis都會先把這個文件的數據讀入內存里

# replicaof <master ip> <master port> replicaof 192.168.0.3 6379 #Redis主機(Master)IP 端口

啟動三個 Salve 服務

docker run --restart always --name redis-6380 -p 6380:6379 -v /docker/redis/redis6380:/data -d redis redis-server /data/redis.conf docker run --restart always --name redis-6381 -p 6381:6379 -v /docker/redis/redis6381:/data -d redis redis-server /data/redis.conf docker run --restart always --name redis-6382 -p 6382:6379 -v /docker/redis/redis6382:/data -d redis redis-server /data/redis.conf

 

 

7、查看容器服務

root@iZ282zj76jqZ:/docker/redis# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
43488a8c668c        redis               "docker-entrypoint.s…"   3 seconds ago       Up 1 second         0.0.0.0:6382->6379/tcp              redis-6382
ca3caaa77f4a        redis               "docker-entrypoint.s…"   2 hours ago         Up About an hour    0.0.0.0:6381->6379/tcp              redis-6381
792067d225e6        redis               "docker-entrypoint.s…"   2 hours ago         Up 2 hours          0.0.0.0:6379->6379/tcp              redis-6379
979318c633be        redis               "docker-entrypoint.s…"   2 hours ago         Up About an hour    0.0.0.0:6380->6379/tcp              redis-6380

1)進入 Master 容器操作 Redis 

root@iZ282zj76jqZ:/docker/redis# docker exec -it redis-6379 redis-cli info replication
# Replication
role:master
connected_slaves:3
slave0:ip=192.168.0.4,port=6379,state=online,offset=812,lag=0
slave1:ip=192.168.0.5,port=6379,state=online,offset=812,lag=0
slave2:ip=192.168.0.6,port=6379,state=online,offset=812,lag=0
master_replid:97bf611eb2ac66774c98f9e1d6303906de0e72ca
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:812
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:812

2)進入Salve 容器操作Redis

root@iZ282zj76jqZ:/docker/redis# docker exec -it redis-6380 redis-cli info replication
# Replication
role:slave
master_host:192.168.0.3
master_port:6379
master_link_status:up
master_last_io_seconds_ago:2
master_sync_in_progress:0
slave_repl_offset:742
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:97bf611eb2ac66774c98f9e1d6303906de0e72ca
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:742
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:742

 

 

8、也可以直接用docker命令操作Redis

# -it 為容器重新分配一個偽輸入終端,以交互模式運行容器
# 容器名 redis-6379
# redis-cli set  Key Value 
docker exec -it redis-6379 redis-cli set name tomkluas

 

 

9、設置哨兵,配置哨兵文件

創建 sentinel.conf 配置文件
# 主節點信息,格式:sentinel <master-name> <ip> <redis-port> <quorum>;
# <master-name> 自定義主節點名稱;
# <ip> <redis-port> 主節點的ip和端口;
# <quorum> 多少個主節點檢測到主節點有問題就進行故障轉移
sentinel monitor mygroup 192.168.0.3 6379 1
port 26379

然后在啟動一個容器監聽服務 (應該啟動3個哨兵,此處為一個,其他同樣啟動)  

docker run --restart always --name sentinel-0 -p 26379:26379 -v /docker/redis/sentinel0:/data -d redis redis-sentinel /data/sentinel.conf
root@iZ282zj76jqZ:/docker/redis# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
9ef307e6254b        redis               "docker-entrypoint.s…"   5 seconds ago       Up 3 seconds        6379/tcp, 0.0.0.0:26379->26379/tcp   sentinel-1
root@iZ282zj76jqZ:/docker/redis# docker logs sentinel-0
1:X 12 Apr 2020 12:53:47.120 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:X 12 Apr 2020 12:53:47.120 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:X 12 Apr 2020 12:53:47.120 # Configuration loaded
1:X 12 Apr 2020 12:53:47.121 * Running mode=sentinel, port=26379.
1:X 12 Apr 2020 12:53:47.121 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:X 12 Apr 2020 12:53:47.123 # Sentinel ID is 35ac9959501bbaf6fd40743be0b62e8af6547fec
1:X 12 Apr 2020 12:53:47.123 # +monitor master mygroup 192.168.0.3 6379 quorum 1
1:X 12 Apr 2020 12:53:47.124 * +slave slave 192.168.0.4:6379 192.168.0.4 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:53:47.133 * +slave slave 192.168.0.5:6379 192.168.0.5 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:53:47.135 * +slave slave 192.168.0.6:6379 192.168.0.6 6379 @ mygroup 192.168.0.3 6379

 

 

10、測試哨兵監聽, 主動停止Master

docker stop redis-6379

查看新的集群情況

root@iZ282zj76jqZ:/docker/redis# docker exec -it redis-6382 redis-cli info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.0.5,port=6379,state=online,offset=22842,lag=0
slave1:ip=192.168.0.4,port=6379,state=online,offset=22706,lag=0
master_replid:9f4af9b24738305e99aa3fe6b8062e3cabb531f9
master_replid2:97bf611eb2ac66774c98f9e1d6303906de0e72ca
master_repl_offset:22842
second_repl_offset:16152
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:393
repl_backlog_histlen:22450

 

查看哨兵log

root@iZ282zj76jqZ:/docker/redis# docker logs sentinel-0
1:X 12 Apr 2020 12:53:47.120 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1:X 12 Apr 2020 12:53:47.120 # Redis version=5.0.8, bits=64, commit=00000000, modified=0, pid=1, just started
1:X 12 Apr 2020 12:53:47.120 # Configuration loaded
1:X 12 Apr 2020 12:53:47.121 * Running mode=sentinel, port=26379.
1:X 12 Apr 2020 12:53:47.121 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
1:X 12 Apr 2020 12:53:47.123 # Sentinel ID is 35ac9959501bbaf6fd40743be0b62e8af6547fec
1:X 12 Apr 2020 12:53:47.123 # +monitor master mygroup 192.168.0.3 6379 quorum 1
1:X 12 Apr 2020 12:53:47.124 * +slave slave 192.168.0.4:6379 192.168.0.4 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:53:47.133 * +slave slave 192.168.0.5:6379 192.168.0.5 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:53:47.135 * +slave slave 192.168.0.6:6379 192.168.0.6 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.477 # +sdown master mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.477 # +odown master mygroup 192.168.0.3 6379 #quorum 1/1
1:X 12 Apr 2020 12:57:52.477 # +new-epoch 1
1:X 12 Apr 2020 12:57:52.477 # +try-failover master mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.498 # +vote-for-leader 35ac9959501bbaf6fd40743be0b62e8af6547fec 1
1:X 12 Apr 2020 12:57:52.498 # +elected-leader master mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.498 # +failover-state-select-slave master mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.582 # +selected-slave slave 192.168.0.6:6379 192.168.0.6 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.582 * +failover-state-send-slaveof-noone slave 192.168.0.6:6379 192.168.0.6 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:52.648 * +failover-state-wait-promotion slave 192.168.0.6:6379 192.168.0.6 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:53.321 # +promoted-slave slave 192.168.0.6:6379 192.168.0.6 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:53.321 # +failover-state-reconf-slaves master mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:53.368 * +slave-reconf-sent slave 192.168.0.5:6379 192.168.0.5 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:54.365 * +slave-reconf-inprog slave 192.168.0.5:6379 192.168.0.5 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:54.365 * +slave-reconf-done slave 192.168.0.5:6379 192.168.0.5 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:54.418 * +slave-reconf-sent slave 192.168.0.4:6379 192.168.0.4 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:55.399 * +slave-reconf-inprog slave 192.168.0.4:6379 192.168.0.4 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:55.399 * +slave-reconf-done slave 192.168.0.4:6379 192.168.0.4 6379 @ mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:55.488 # +failover-end master mygroup 192.168.0.3 6379
1:X 12 Apr 2020 12:57:55.488 # +switch-master mygroup 192.168.0.3 6379 192.168.0.6 6379 # 切換Master
1:X 12 Apr 2020 12:57:55.489 * +slave slave 192.168.0.5:6379 192.168.0.5 6379 @ mygroup 192.168.0.6 6379
1:X 12 Apr 2020 12:57:55.489 * +slave slave 192.168.0.4:6379 192.168.0.4 6379 @ mygroup 192.168.0.6 6379
1:X 12 Apr 2020 12:57:55.489 * +slave slave 192.168.0.3:6379 192.168.0.3 6379 @ mygroup 192.168.0.6 6379
1:X 12 Apr 2020 12:58:25.545 # +sdown slave 192.168.0.3:6379 192.168.0.3 6379 @ mygroup 192.168.0.6 6379
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM