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
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.编译 ,进入解压目录
cd redis-4.0.1/
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
# 指定基础镜像
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配置文件拷贝到容器的/usr/local/redis目录中(将上一步改好的redis.conf 文件复制到这里)
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-server到容器相关的目录
#RUN mv /redis-4.0.1/src/redis-server $REDIS_HOME/redis/
#将安装好的redis/bin 文件移动到/usr/local/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
docker build -t kiwis/redis-cluster .
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 .
4.启动各个节点容器,设置容器开机自启。如果创建时未指定 --restart=always ,可通过update 命令:docker update --restart=always xxx
docker run -d --name redis-node-7001 -p 7001:6379 --restart=always kiwis/redis-node
docker run -d --name redis-node-7002 -p 7002:6379 --restart=always kiwis/redis-node
docker run -d --name redis-node-7003 -p 7003:6379 --restart=always kiwis/redis-node
docker run -d --name redis-node-7004 -p 7004:6379 --restart=always kiwis/redis-node
docker run -d --name redis-node-7005 -p 7005:6379 --restart=always kiwis/redis-node
docker run -d --name redis-node-7006 -p 7006:6379 --restart=always kiwis/redis-node
5.查看宿主机与容器ip的对应关系:
docker inspect 96668a6d6e77 2ea2c4d14b57 a5e83594ce89 a3e232638c8d ada1dd8a217c 9d1dbad7d7a2 |grep IPAddress
宿主机 | 容器 |
---|---|
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,这里进的是7001
# 若提示 -bash: redis-cli: 未找到命令,复制一下再执行 redis-cli
cp /usr/local/redis/redis-cli /usr/bin/redis-cli
redis-cli
auth 123456789
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.配置糟点
查找redis-cli 文件的位置:find / -name redis-cli
;
复制文件到脚本中指定的目录:cp /data/tools/redis_docker/redis-4.0.1/src/redis-cli /usr/local/redis/redis-cli
;
创建 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 123456789 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 123456789 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 123456789 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 25bb050a854af5336dddf4f7167ac582e91a5b90
#CLUSTER REPLICATE后面跟的是172.17.0.6:6379的集群ID
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7005 -a 123456789 CLUSTER REPLICATE 0ef8b95bd2ad1f9ae8557f844c8e28f5df8d8c13
#CLUSTER REPLICATE后面跟的是172.17.0.7:6379的集群ID
/usr/local/redis/redis-cli -h 127.0.0.1 -p 7006 -a 123456789 CLUSTER REPLICATE 74889988290fe402dca12a8a0c25719ecb3d24ef