安裝Docker
參考:https://blog.csdn.net/yan_dk/article/details/89427641
安裝Docker-Compose
Docker-Compose簡介
Compose是Docker的服務編排工具,主要用來構建基於Docker的複雜應用,Compose 通過一個配置文件來管理多個Docker容器,非常適合組合使用多個容器進行開發的場景。
Docker-Compose是編排容器的。例如,你有一個php鏡像,一個mysql鏡像,一個nginx鏡像,分別構建生成了3個容器。如果沒有Docker-Compose,那麼每次啓動的時候,你需要敲各個容器的啓動參數,環境變量,容器命名,指定不同容器的鏈接參數等等一系列的操作,相當繁瑣。而用了docker-compose之後,你就可以把這些命令一次性寫在docker-composer.yml文件中,以後每次啓動這一整個環境(含3個容器)的時候,你只要敲一個docker-composer up命令就ok了。
開始安裝Docker-Compose
參見:Docker-Compose安裝及使用 https://blog.csdn.net/yan_dk/article/details/89810207
Redis集羣原理
Redis集羣節點規劃
容器名稱 |
容器IP地址 |
映射端口號 |
服務運行模式 |
Redis-master |
172.50.0.2 |
6391-> 6379 |
master |
Redis-master2 |
172.50.0.3 |
6392-> 6379 |
master |
Redis-master3 |
172.50.0.4 |
6393 -> 6379 |
master |
redis-slave |
172.30.0.2 |
6394 -> 6379 |
Slave |
redis-slave2 |
172.30.0.3 |
6395 -> 6379 |
Slave |
redis-slave3 |
172.30.0.4 |
6396 -> 6379 |
Slave |
集羣環境預裝
安裝目錄結構
新建腳本文件Dockfile
FROM centos:latest
MAINTAINER yuyan "[email protected]"
RUN groupadd -r redis && useradd -r -g redis redis
RUN yum -y update && yum -y install epel-release \
&& yum -y install redis && yum -y install wget \
&& yum -y install net-tools \
&& yum -y install ruby && yum -y install rubygems
RUN wget https://rubygems.org/downloads/redis-3.3.5.gem && gem install -l ./redis-3.3.5.gem \
&& rm -f redis-3.3.5.gem
COPY ./config/redis-trib.rb /usr/bin
COPY ./config/redis.sh /usr/bin
RUN mkdir -p /config && chmod 775 /usr/bin/redis.sh
新建腳本文件docker-compose.yaml
version: "3.6"
services:
redis-master1:
image: redis-cluster
container_name: redis-master1
working_dir: /config
environment:
- PORT=6391
ports:
- "6391:6379"
- "16391:16391"
stdin_open: true
networks:
redis-master:
ipv4_address: 172.50.0.2
tty: true
privileged: true
volumes: ["/usr/docker/redis-cluster/config:/config"]
entrypoint:
- /bin/bash
# - redis.sh
redis-master2:
image: redis-cluster
working_dir: /config
container_name: redis-master2
environment:
- PORT=6392
networks:
redis-master:
ipv4_address: 172.50.0.3
ports:
- "6392:6379"
- "16392:16392"
stdin_open: true
tty: true
privileged: true
volumes: ["/usr/docker/redis-cluster/config:/config"]
entrypoint:
- /bin/bash
# - redis.sh
redis-master3:
image: redis-cluster
container_name: redis-master3
working_dir: /config
environment:
- PORT=6393
networks:
redis-master:
ipv4_address: 172.50.0.4
ports:
- "6393:6379"
- "16393:16393"
stdin_open: true
tty: true
privileged: true
volumes: ["/usr/docker/redis-cluster/config:/config"]
entrypoint:
- /bin/bash
# - redis.sh
redis-slave1:
image: redis-cluster
container_name: redis-slave1
working_dir: /config
environment:
- PORT=6394
networks:
redis-slave:
ipv4_address: 172.30.0.2
ports:
- "6394:6379"
- "16394:16394"
stdin_open: true
tty: true
privileged: true
volumes: ["/usr/docker/redis-cluster/config:/config"]
entrypoint:
- /bin/bash
#- redis.sh
redis-slave2:
image: redis-cluster
working_dir: /config
container_name: redis-slave2
environment:
- PORT=6395
ports:
- "6395:6379"
- "16395:16395"
stdin_open: true
networks:
redis-slave:
ipv4_address: 172.30.0.3
tty: true
privileged: true
volumes: ["/usr/docker/redis-cluster/config:/config"]
entrypoint:
- /bin/bash
#- redis.sh
redis-salve3:
image: redis-cluster
container_name: redis-slave3
working_dir: /config
environment:
- PORT=6396
ports:
- "6396:6379"
- "16396:16396"
stdin_open: true
networks:
redis-slave:
ipv4_address: 172.30.0.4
tty: true
privileged: true
volumes: ["/usr/docker/redis-cluster/config:/config"]
entrypoint:
- /bin/bash
#- redis.sh
networks:
redis-master:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.50.0.0/16
redis-slave:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.30.0.0/16
redis-test:
external:
name: mynetwork
集羣節點配置
配置文件目錄結構
注:其中redis-3.3.5.gem爲redis的ruby支持軟件、redis-trib.rb爲redis-ruby腳本工具、redis.sh爲啓動redis服務器腳本。參考如下腳本,並做相應修改。
#修改爲守護模式
#daemonize yes
#設置進程鎖文件
pidfile /redis/redis.pid
#端口
port 6379
#客戶端超時時間
timeout 300
#日誌級別
loglevel debug
#日誌文件位置
logfile /redis/log-docker_redis.log
#設置數據庫的數量,默認數據庫爲0,可以使用SELECT <dbid>命令在連接上指定數據庫id
databases 8
##指定在多長時間內,有多少次更新操作,就將數據同步到數據文件,可以多個條件配合
#save <seconds> <changes>
#Redis默認配置文件中提供了三個條件:
save 900 1
save 300 10
save 60 10000
#指定存儲至本地數據庫時是否壓縮數據,默認爲yes,Redis採用LZF壓縮,如果爲了節省CPU時間,
#可以關閉該#選項,但會導致數據庫文件變的巨大
rdbcompression yes
#指定本地數據庫文件名
dbfilename dump.rdb
#指定本地數據庫路徑
dir /redis/db/
#指定是否在每次更新操作後進行日誌記錄,Redis在默認情況下是異步的把數據寫入磁盤,如果不開啓,可能
#會在斷電時導致一段時間內的數據丟失。因爲 redis本身同步數據文件是按上面save條件來同步的,所以有
#的數據會在一段時間內只存在於內存中
appendonly no
#指定更新日誌條件,共有3個可選值:
#no:表示等操作系統進行數據緩存同步到磁盤(快)
#always:表示每次更新操作後手動調用fsync()將數據寫到磁盤(慢,安全)
#everysec:表示每秒同步一次(折衷,默認值)
appendfsync everysec
#redis配置外網訪問:
protected-mode no
#配置密碼
requirepass root
配置文件nodes-xx.conf修改點如下:
#節點端口
port 6379
#開啓集羣模式
cluster-enabled yes
#節點超時時間,單位毫秒
cluster-node-timeout 15000
#集羣內部配置文件
cluster-config-file "nodes-6379.conf"
注:紅字標識,根據實際情況修改名稱。上述redis訪問需要根據配置開放相應端口,如6391,6392...,若外網訪問需要配置相應的安全組規則,開放相應端口,才能訪問。
生成redis集羣
# cd redis-cluster
# docker-compose -p redis-cluster up -d
# docker ps
Redis集羣配置成功。
集羣節點啓動
本節應當可以通過docker-compose.yaml配置自動啓動redis.sh,但這裏還是報錯,還是需要手工進入容器啓動。
持續完善,待續...