使用docker搭建redis-cluster集群

一、安装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.编译 ,进入解压目录

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

三、创建集群基础镜像

  1. 创建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配置文件拷贝到容器的/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  .

查看镜像,如下:
在这里插入图片描述基础镜像创建成功。

四、创建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.启动各个节点容器,设置容器开机自启。如果创建时未指定 --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

使用docker搭建redis-cluster集群_第1张图片5.查看宿主机与容器ip的对应关系:
docker inspect 96668a6d6e77 2ea2c4d14b57 a5e83594ce89 a3e232638c8d ada1dd8a217c 9d1dbad7d7a2 |grep IPAddress
使用docker搭建redis-cluster集群_第2张图片

宿主机 容器
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

使用docker搭建redis-cluster集群_第3张图片
查看集群状态

cluster info

此时集群不可用,因为没有配置糟点。

4.配置糟点
查找redis-cli 文件的位置:find / -name redis-cli
使用docker搭建redis-cluster集群_第4张图片复制文件到脚本中指定的目录: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

执行结果:
使用docker搭建redis-cluster集群_第5张图片
使用docker搭建redis-cluster集群_第6张图片此时,3主可用。
使用docker搭建redis-cluster集群_第7张图片
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

执行:
在这里插入图片描述
查看结果:成功!
使用docker搭建redis-cluster集群_第8张图片

六、高可用测试:

关闭其中一个主,从替换原来的主,集群正常可用。
使用docker搭建redis-cluster集群_第9张图片完美结束!

你可能感兴趣的:(项目部署与运维)