一、安裝docker
yum update ---> 執行以下命令:添加yum倉庫,使用阿里雲的源
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安裝最新版docker:yum install -y docker-ce
啓動:systemctl start docker.service
查看版本:docker version
設置開機自啓:systemctl enable docker
二、安裝redis ,修改配置文件
1.創建文件夾,下載redis 安裝源文件,解壓
mkdir /usr/local/redis_docker
cd /usr/local/redis_docker
wget http://download.redis.io/releases/redis-4.0.1.tar.gz
tar -xzf redis-4.0.1.tar.gz
2.安裝gcc
yum install -y gcc-c++
3.編譯
make
#如果報錯,可以嘗試:make MALLOC=libc
4.修改配置文件redis.conf
#ip綁定
# bind 0.0.0.0
# 0.0.0.0爲不綁定ip
#設置密碼
requirepass 123456789
#主從複製的驗證密碼
masterauth 123456789
#日誌文件
logfile “/usr/local/redis/logs/redis-server.log”
#開啓集羣配置
cluster-enabled yes
#集羣配置文件
cluster-config-file nodes-6379.conf
#集羣超時時間
cluster-node-timeout 15000
三、創建集羣基礎鏡像
- 創建Dockerfile 文件,內容如下:
# 指定基礎鏡像
FROM centos:7
#鏡像作者
MAINTAINER kiwis "[email protected]"
#定義路徑的環境變量
ENV REDIS_HOME /usr/local
#將Dockerfile同級目錄下的redis-4.0.1.tar.gz複製到鏡像的根目錄
ADD redis-4.0.1.tar.gz /
#創建安裝目錄,根據環境變量信息,實際的創建目錄爲:/usr/local/redis
RUN mkdir -p $REDIS_HOME/redis
#創建日誌保存目錄
RUN mkdir -p $REDIS_HOME/redis/logs
#將Dockerfile同級目錄下redis-4.0.1中的redis配置文件拷貝到容器的/usr/local/redis目錄中
ADD redis.conf $REDIS_HOME/redis/
#更新鏡像的yum
RUN yum -y update
#安裝gcc相關編譯工具
RUN yum install -y gcc make
#指定工作目錄
WORKDIR /redis-4.0.1
#執行編譯
RUN make
#進行安裝,指定安裝路徑
RUN make PREFIX=$REDIS_HOME/redis/ install
#移動安裝後的redis-cli 等文件到/redis 目錄下
RUN mv $REDIS_HOME/redis/bin/* $REDIS_HOME/redis/
#移動到上一級
WORKDIR /
#刪除解壓文件
RUN rm -rf /redis-4.0.1
#刪除多於的工具
RUN yum remove -y gcc make
#添加數據卷
#/usr/local/redis/logs/redis-server.log
#此目錄需要和redis.conf中logfile一致
VOLUME ["/usr/local/redis/logs"]
#暴露6379的端口
EXPOSE 6379
2.編譯生成基礎鏡像
docker build -t kiwis/redis-cluster .
四、創建redis 集羣節點鏡像
1.創建Dockerfile 文件
FROM kiwis/redis-cluster:latest
MAINTAINER kiwis "[email protected]"
ENTRYPOINT ["/usr/local/redis/redis-server", "/usr/local/redis/redis.conf"]
2.編譯生成節點鏡像
docker build -t kiwis/redis-node .
3.查看鏡像目錄
4.啓動各個節點容器
docker run -d --name redis-node-7001 -p 7001:6379 kiwis/redis-node
docker run -d --name redis-node-7002 -p 7002:6379 kiwis/redis-node
docker run -d --name redis-node-7003 -p 7003:6379 kiwis/redis-node
docker run -d --name redis-node-7004 -p 7004:6379 kiwis/redis-node
docker run -d --name redis-node-7005 -p 7005:6379 kiwis/redis-node
docker run -d --name redis-node-7006 -p 7006:6379 kiwis/redis-node
5.查看宿主機與容器ip的對應關係
宿主機 | 容器 |
---|---|
192.168.11.203:7001 | 172.17.0.2:6379 |
192.168.11.203:7002 | 172.17.0.3:6379 |
192.168.11.203:7003 | 172.17.0.4:6379 |
192.168.11.203:7004 | 172.17.0.5:6379 |
192.168.11.203:7005 | 172.17.0.6:6379 |
192.168.11.203:7006 | 172.17.0.7:6379 |
五、配置節點
1.任意進入一個redis
redis-cli -p 7001
auth 123456789
若提示無redis-cli 命令,複製一下
cp /usr/local/redis/redis-cli /usr/bin/redis-cli
2.添加節點
CLUSTER MEET 172.17.0.3 6379
CLUSTER MEET 172.17.0.4 6379
CLUSTER MEET 172.17.0.5 6379
CLUSTER MEET 172.17.0.6 6379
CLUSTER MEET 172.17.0.7 6379
3.查看節點信息
cluster nodes
查看集羣狀態
cluster info
此時集羣不可用,因爲沒有配置糟點。
4.配置糟點
創建 addslots.sh 文件,配置糟點到3臺主,內容如下
#!/bin/bash
#將0-5461的槽點配置在172.17.0.2:6379(宿主機127.0.0.1:7001)的redis上
n=0
for ((i=n;i<=5461;i++))
do
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7001 -a Bendian001002! CLUSTER ADDSLOTS $i
done
#將5462-10922的槽點配置在172.17.0.3:6379(宿主機127.0.0.1:7002)的redis上
n=5462
for ((i=n;i<=10922;i++))
do
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7002 -a Bendian001002! CLUSTER ADDSLOTS $i
done
#將10923-16383的槽點配置在172.17.0.4:6379(宿主機127.0.0.1:7003)的redis上
n=10923
for ((i=n;i<=16383;i++))
do
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7003 -a Bendian001002! CLUSTER ADDSLOTS $i
done
執行shell腳本
sh addslots.sh
此時,3主可用。
5.主從高可用,配置3主3從,主掛從自動切換,保證集羣正常
創建addSlaveNodes.sh 文件,在從節點中添加主節點id
#CLUSTER REPLICATE後面跟的是172.17.0.5:6379的集羣ID
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7004 -a 123456789 CLUSTER REPLICATE bf43cd766b947a2ee728a17747fb77241e887197
#CLUSTER REPLICATE後面跟的是172.17.0.6:6379的集羣ID
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7005 -a 123456789 CLUSTER REPLICATE ac002bdef8ca9d5fbc21e5a9f2a718faf0c5cdf2
#CLUSTER REPLICATE後面跟的是172.17.0.7:6379的集羣ID
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7006 -a 123456789 CLUSTER REPLICATE 8b26bfb03986b91c22f2fce780bcf5692e0a5a6d
查看結果
六、高可用測試:略
完美結束!