docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > 使用Docker部署Redis集群

三台机器使用Docker部署Redis集群方式

作者:weixin_43053507

这篇文章主要介绍了三台机器使用Docker部署Redis集群方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

三台机器使用Docker部署Redis集群

我们这里采用Docker在三台服务器上面进行Redis集群的搭建,它方便快捷、容易上手。

1.集群原理

在Redis集群中,所以的节点彼此关联,节点内部通过二进制协议优化传输速度和带宽。当一个节点挂掉后,集群超过半数的节点检查失效时该节点才会被认为挂掉。所以基于以上的情况,节点的数量一般都是奇数。一般为了保证安全性,每个节点由一个备份节点。所以最小的集群主节点的个数最少为3,从节点的个数也为3.这样一个集群最少需要6个节点。在做集群规划的时候特别需要注意这点。

Redis集群中内置了16384个哈希槽,当需要在Redis集群中存放一个key/value键值对的时候,redis会有一个算法,先把key使用CRC16算法计算一个结果,然后把结果对16384求余数,这样每个key都会对于一个编号在0-16383之间的哈希槽,redis会根据节点数量大致的均衡的将哈希槽映射到不同的节点。需要注意的是每个哈希槽存储的数据个数不做限制。

2.集群规划

三台宿主机的IP和redis节点规划:

宿主机器IPredis节点规划redis节点规划
172.15.1.11172.15.1.11:7801172.15.1.11:7804
172.15.1.12172.15.1.12:7802172.15.1.12:7805
172.15.1.13172.15.1.13:7800172.15.1.13:7803

3.集群部署

集群的部署采用Linux Shell脚本的方式,步骤如下

A、创建模板文件

登录三台机器,在home目录下创建redis-cluster文件夹,编写文件redis-cluster.tmpl,文件的作用是用来创建Redis配置文件的模板文件。

port ${PORT}
protected-mode no
cluster-enabled yes
cluster-config-file redis.conf
cluster-node-timeout 5000
cluster-announce-ip 172.15.1.11  #另外两台ip分别为172.15.1.12、172.15.1.13
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes

B、自定义网络

所有节点在一个网络中,方便通信。

在Docker中创建网络。(三台机器在docker swarm集群,创建overlay网络)

docker network create -d overlay --attachable redis_net

C、创建配置生成脚本

在三台机器/home/redis-cluster下生成conf和data目录,并生成配置信息。

这里编写一个Linux Shell脚本createFilePath.sh。

注意要进行授权,否则脚本运行。

for port in 7801 7804  #另外两台的port分别修改为7802 7805、7800 7803
do
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done

给大家解读一下脚本内容,for循环2次,每次循环存储变量到port变量。然后循环创建目录,命令是mkdir -p ./{port}/conf\,意思是在当前目录下面以端口后为目录名,下面创建子目录conf.后面的\是连接符,表示连接后面的语句。

PORT=${port} envsubst < ./redis-cluster.tmpl >意思是将循环变量port的值复制给PORT,envsubst 是赋值给文件redis-cluster.tmpl.然后将该文件复制到端口号目录\conf文件夹中,名字是redis.conf; mkdir -p ./${port}/data; 表示继续创建在端口目录\data目录。

D、执行创建配置生成脚本

授权createFilePath.sh。让该文件具备可执行权限,并执行该文件

chmod +x ./createFilePath.sh
./createFilePath.sh

在三台机器共生成6个文件夹,从7800到7805,每个文件夹下包含data和conf文件夹,同时conf里面有redis.conf配置文件。

E、创建容器生成脚本

在三台机器编写创建Redis容器的脚本createRedisContainer.sh。

current_dir=`pwd`
for port in 7801 7804  #另外两台的port分别修改为7802 7805、7800 7803
do
docker run -dit -p ${port}:${port} -p 1${port}:1${port} \
--privileged=true -v $current_dir/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \
--privileged=true -v $current_dir/${port}/data:/data \
--restart always --name redis-${port} --net redis_net \
--sysctl net.core.somaxconn=1024 redis:5.0.5 redis-server /usr/local/etc/redis/redis.conf
done

F、执行容器生成脚本

授权createFilePath.sh。让该文件具备可执行权限,并执行该文件

chmod +x ./createRedisContainer.sh
./createRedisContainer.sh

在三台机器共生成6个容器,redis-7800到redis-7805,

使用命令来确认:

docker ps -a|grep redis-780

G、配置redis集群

任意进入一个节点,并启动集群。注意redis容器启动,并不代表集群启动。

docker exec -it redis-7801 bash
redis-cli --cluster create 172.15.1.13:7800 172.15.1.11:7801 172.15.1.12:7802 172.15.1.13:7803 172.15.1.11:7804 172.15.1.12:7805 --cluster-replicas 

至此集群搭建完毕。

4.集群检测

验证集群状态,进入容器内部,执行

docker exec -it redis-7801 bash
redis-cli -c -p 7801
info replication
cluster nodes
cluster info

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文