三台机器使用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节点规划:
宿主机器IP | redis节点规划 | redis节点规划 |
---|---|---|
172.15.1.11 | 172.15.1.11:7801 | 172.15.1.11:7804 |
172.15.1.12 | 172.15.1.12:7802 | 172.15.1.12:7805 |
172.15.1.13 | 172.15.1.13:7800 | 172.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
port ${PORT}: 是自定义端口号
protected-mode no:是关闭保护模式,否则可能造成无法通过公网访问。
cluster-enabled yes:启动集群。必须配置为yes
cluster-config-file redis.conf:集群节点配置文件的名字,一般我们都会取名redis.conf
cluster-node-timeout 5000:超时时间,单位是毫秒
cluster-announce-ip 172.15.1.11:集群宿主机IP
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
docker run -dit -p ${port}: ${port} -p 1${port}:1${port},意思是启动容器.-d表示后台启动;-i 表示开启交互模式。-t表示伪终端。这三个参数可以简写成-dit。${port}: ${port}表示把宿主机端口映射到容器端口。1${port}:1${port} 表示把宿主机和容器的总线端口映射。
–privileged=true -v $current_dir/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf,privileged意思是授权,-v表示容器挂载,把宿主机/home/redis-cluster/${port}/conf/目录下的redis.conf文件挂载到容器内部的/usr/local/etc/redis的目录中,在容器内部的配置文件名为redis.conf。
–privileged=true -v $current_dir/${port}/data:/data,同样授权将宿主机data目录挂载到容器的data目录。
–restart always:表示Docker重启时,容器自动重启。
–name redis-${port} 表示容器的自定的容器名字是redis-端口号
–net redis_net:表示容器工作的网络是redis_net
–sysctl net.core.somaxconn=1024表示修改somaxconn的值,内核大小为1024M,一把来说负载很大的程序的时候,往往由于内存不够,会启动失败。
redis:5.0.5表示镜像的版本。至此容器创建完毕。
redis-server /usr/local/etc/redis/redis.conf表示启动Redis服务端。必须指定配置文件。
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
三台机器使用Docker部署Redis集群相关推荐
- 手把手教你实现 Docker 部署 Redis 集群
作者:我为什么要写这个 cnblogs.com/cxbhakim/p/9151720.html 摘要 接触docker以来,似乎养成了一种习惯,安装什么应用软件都想往docker方向做,今天就想来尝试 ...
- 2万字好文!手把手教你实现 Docker 部署 Redis 集群
点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 Life is not ...
- docker部署redis集群实现动态扩缩容
目录 思考 分布式存储的解决方案 哈希取余分区 一致性哈希算法分区 哈希槽分区 采用哈希槽分区 部署三主三从(docker) 准备工作 创建3主3从redis实例 进入容器中,构建主从关系 主从容错切 ...
- docker部署redis集群_Docker部署Redis集群----第九节(docker-redis哨兵集群“轮询分流”篇实例一)...
到此,我们的 Redis 哨兵集群就结束了,本篇章是第九篇章,也是使用集群方式的实例一来实现php的轮询分流. 1.准备工作: 在我们上一篇章实现redis 哨兵集群的基础上开始,在服务器上部署php ...
- docker部署redis集群_Docker部署Redis集群----第六节(docker-redis-sentinel集群的机制)...
通过前面的三个篇章的认知学习与实践,相信大家搭建自己的docker redis主从应该是没有任何问题了.普通的主从复制到此就结束了,下面我们要来分析讲解,普通主从复制的升级版"哨兵集群&qu ...
- 【Linux部署】借助Docker部署Redis集群(Docker网卡创建+6个Redis集群搭建shell脚本)
话不多说,直接上代码- # 创建桥接 网卡 docker network create redis --subnet 172.38.0.0/16 # 查看所有 网卡 docker network ls ...
- Centos6.6部署Redis集群
Centos6.6部署Redis集群 1 环境准备 1 环境安装redis 1 安装ruby 2 配置redis主从环境 3 部署redis sentinel服务器 5 集群使用 13 当前集群环境说 ...
- docker 完成 redis集群搭建
[Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...
- k8s部署redis集群
K8S部署Redis Cluster集群 kubernetes部署单节点redis: https://www.cnblogs.com/zisefeizhu/p/14282299.html Redis ...
最新文章
- Linux设备中文件系统位置,【linux之设备,分区,文件系统】
- 搜索专题: HDU1428漫步校园
- RabbitMQ操作代码封装
- 对于全连接层的理解 全连接层的推导
- Linux C语言操作MySQL
- php 7.0 特性,PHP 7.3比PHP 7.0快22% 即将进入特性冻结阶段
- 用mysql语句备份_MySql常用备份及恢复语句
- c 陷阱与缺陷 摘录
- python爬虫练习2:取道指成分股数据
- 什么是telemetry
- 网络管理维护(SNMP、RMON)期末考试大纲总结
- java之空指针异常处理
- 统计学中数据分析方法汇总
- c语言求斐波那契数列n项以及前n项和
- VREP(Coppeliarobotics)仿真介绍
- Dependency check配置Mysql数据库存储nvd数据
- 极限中0除以常数_干货分享高数 | 极限的计算
- 织梦DedeCMS华丽蓝色后台管理界面模板
- (正则表达式三行) 假设有一段英文,其中有单词中间的字母i误写为I,请编写程序进行纠正。
- 5分钟了解搜索引擎Lucene的原理