深圳华强北做网站,网站系统找不到指定的文件,无忧建站网,随州网站优化前言 安装Portainer 实践-基于Portainer安装redis-sentinel部署 Spring Boot集成Redis Sentinel 前言
本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。
安装Portainer
编写docker-compose文件
Portainer部署的步骤比较简单#xff0c;我们还是以… 前言 安装Portainer 实践-基于Portainer安装redis-sentinel部署 Spring Boot集成Redis Sentinel 前言
本篇文章笔者推荐一个笔者最常用的docker图形化管理工具——Portainer。
安装Portainer
编写docker-compose文件
Portainer部署的步骤比较简单我们还是以docker-compose文件的形式完成Portainer的安装首先我们需要需要编写的名为portainer.yml的文件内容如下
version: 3
services:portainer:image: portainer/portainer:latestcontainer_name: portainerports:- 9000:9000volumes:- /app/portainer/data:/data- /var/run/docker.sock:/var/run/docker.sock完成后我们将这个文件上传到我们的服务器即。
初始化并配置容器
将配置文件上传之后我们就可以尝试启动了为了方便查看服务是否可以正常启动我们还先以前台运行的方式启动到达portainer.yml文件位置键入前台启动命令
docker-compose -f portainer.yml up当控制台没有输出错误并显示正常启动后我们分开服务器的9000端口浏览器输入服务器ip:9000即可进入Portainer初始化界面它会要求我们配置用户名密码: 完成账户密码初始化之后我们点击local进行服务器本地容器管理 图片
此时我们就会看到local中docker的基本信息了 图片
在步入local我们就可以按需管理容器、镜像、网络等配置信息。我们不妨点击containers查看我们服务器中当前运行的docker容器。 图片
可以看到我们docker中容器的运行情况由于portainer涉及操作很多笔者这里就不一一演示了感兴趣的读者可以自行查阅portainer官方文档 “ https://www.portainer.io/take-5 图片
到上述步骤我们已经可以确定portainer安装基本成功了,我们可以回到服务器将portainer后台启动正式使用portainer了。
docker-compose -f portainer.yml up -d实践-基于Portainer安装redis-sentinel部署
介绍
读完上述的介绍可能读者们对Portainer还没有一个比较清晰的了解所以笔者在这里就基于一个redis-sentinel的部署介绍一下Portainer的日常操作步骤。
首先我们来介绍一下本次部署架构我们会基于一台服务器完成一主二从三个哨兵的部署架构最终效果是: 当主节点更新数据之后从节点数据也会进行同步。 当我们将主节点手动停止之后哨兵就会选举出新的master继续进行工作。 图片
安装步骤
主从复制部署
首先我们先进性主从结构的部署我们还是基于docker-compose创建一个名为redis-cluster.yml的文件配置一下主从信息配置内容如下笔者已将配置的含义都一一注释读者可自行参考修改。需要注意以下两点:
安全起见建议读者尽可能不要使用6379作为对外暴露的端口号就算使用6379也尽可能设置一个安全的密码避免被人下挖矿程序。
当读者复制下面的文件在服务器启动时可能会报各种语法错误所以笔者推荐的yaml格式化在地址读者完成配置后可以将配置粘贴到这个网站完成自动格式化。这样可以避免启动时报一些没必要的错误
version: 3
services:# 主节点master:image: redis# 主节点名称container_name: redis-master# 设置redis登录密码、从节点连接主节点的密码command: redis-server --requirepass xxxx--masterauth xxxxports:# 对外暴露端口号为16379- 16379:6379# 从节点slave1:image: rediscontainer_name: redis-slave-1ports:# 对外暴露端口号为16380- 16380:6379# 启动redis 从属于容器名为 redis-master的redis端口号为容器端口号而不是对外映射端口号设置连接密码连接主节点的密码command: redis-server --slaveof redis-master 6379 --requirepass xxxx--masterauth xxxxx# 从节点2slave2:image: rediscontainer_name: redis-slave-2ports:- 16381:6379command: redis-server --slaveof redis-master 6379 --requirepass xxxxx --masterauth xxxxx完成后我们即可将配置上传到服务器并启动:
docker-compose -f redis-cluster.yml up启动完成后就可以在portainer中看到一主二从出现在containers列表中 以master为例我们不妨点击log查看master节点的运行情况 从输出可以看到master没有输出任何错误说明master正常运行了。 在确认每个容器都能正常启动之后我们不妨尝试在master节点写入一些数据测试一下主从节点同步功能是否正常。
在没有portainer之前我们进入docker容器内容用的都是使用docker exec -it 容器id bash/sh命令有了portainer之后我们进入容器的操作就变得非常简单了。
回到容器列表点击redis-master进入容器管理界面 点击console进入容器终端连接界面 点击connect连接进入容器 然后我们就进入的容器内部,尝试使用redis-cli认证并设置一个kv值。 完成上述步骤后我们到达从节点的容器内部查阅数据可以发现主节点数据确实同步过来了自此我们主从复制部署基本完成。 创建redis-sentinel专用网络驱动
为了确保redis-sentinel可以统一管理且和其他容器隔离我们在部署sentinel之前需要基于Portainer创建一个自定义的brige网络。
什么是brige网络呢?其实docker容器中有以下几种网络驱动类型不同的网络驱动类型可以使得容器和宿主机有着不同的网络关联: host: 使用docker宿主机网络 bridge: 该网络支持在同一个宿主机上的各个容器实例之间的通信。bridge网络是一个独立的网络空间在网络空间内部的各个容器实例能够直接通信。 none: 是一个完全隔离的自治网络甚至与Docker宿主机的网络都不通必须手工配置网卡后才能够使用。加入到该网络的容器实例往往要在后续设置中加入到其他的第三方网络。 overlay 该类型的网络适用于Docker宿主机集群中的各个独立的容器实例之间通信。 macvlan 该类型的网络适用于容器实例需要与宿主机的MAC地址直接通信无需端口映射也无需NAT容器实例的eth0直接与宿主机的物理网卡通信。容器实例可以被赋予公共IP并从宿主机外部直接访问。
所以我们这里就希望创建一个名为redis-sentinel的bridge网络将主从和哨兵节点关联起来并且和docker中的其他容器隔离开: 所以我们按照点击network选择add network进行自定义网络创建 输入名称为redis-sentinel,其余默认然后直接点击 然后直接点击create the network 然后我们就可以在network列表中看到我们配置的network自此网络redis专用桥接网络配置完成。 重点来了我们的redis主从节点现在都处于默认的网络驱动中我们必须手动将其配置到redis-sentinel网络中当然有了portainer这种操作也不会很难。
我们只需要点击容器列表找到我们的主动节点容器然后分别进入他们的管理列表最下方找到network选项在network列表中找到redis-sentinel选择join network即可。 创建哨兵
接下来就可以配置哨兵节点了首先自然是创建一个名为redis-sentinel.yml的docker-compose文件配置3个哨兵:
version: 3
services:sentinel1:image: redis# 容器名称container_name: redis-sentinel-1ports:# 端口映射- 26379:26379# 启动redis哨兵command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:# 哨兵1的sentinel.conf和宿主文件位置映射- /app/cloud/redis/sentinel/sentinel1.conf:/usr/local/etc/redis/sentinel.confsentinel2:image: rediscontainer_name: redis-sentinel-2ports:- 26380:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- /app/cloud/redis/sentinel/sentinel2.conf:/usr/local/etc/redis/sentinel.confsentinel3:image: rediscontainer_name: redis-sentinel-3ports:- 26381:26379command: redis-sentinel /usr/local/etc/redis/sentinel.confvolumes:- /app/cloud/redis/sentinel/sentinel3.conf:/usr/local/etc/redis/sentinel.conf
# 重点将3个哨兵加入到redis-sentinel和主从节点建立联系
networks:default:external:name: redis-sentinel从配置文件中可以看出笔者将哨兵文件和宿主文件进行关联所以我们需要按照上面配置在app/cloud/redis/sentinel/文件夹下创建3个哨兵的配置文件sentinel.conf。
哨兵1的配置文件如下其余哨兵配置同理只需按需修改ip和端口号即可:
port 26379
dir /tmp
# master节点在bridge网络中的ip值
sentinel monitor redis-master 172.20.0.2 6379 2
# master节点密码
sentinel auth-pass redis-master xxxxx
sentinel down-after-milliseconds redis-master 30000
sentinel parallel-syncs redis-master 1
sentinel failover-timeout redis-master 180000
sentinel deny-scripts-reconfig yes可以看到笔者将master节点命名为redis-master然后网络配置为172.20.0.2这个值是从哪里来的呢很简单我们点击redis-master即redis主节点那个容器管理界面到达最下方就可以在ip address一栏看到master节点的容器ip地址因为哨兵节点和主从节点都处于redis-sentinel这个网络中所以170.20.0.x这个网络是互通的在bridge模式下配置这个ip地址是完全没有问题的。 完成上述步骤后我们就可以将哨兵启动
docker-compose -f redis-sentinel.yml up此时我们点击任意一个哨兵节点都可以看到哨兵的状态信息自此哨兵也部署完成了 测试可用性
此时我们就可以测试哨兵是否正常工作了我们的测试用例很简单我们将master关闭掉查看哨兵是否会选举出新的master顶上。
在测试前我们首先进入master容器输入info replication查看master容器中的redis是否为主节点 再查看另外两个几点是否身份是否确属从节点。
从节点1: 从节点2: 我们通过portainer图形界面将redis-master关闭。 点入任意一个哨兵日志可以看到它监控到主节点下线并快速选举出一个新的节点作为master上线 我们根据ip地址172.20.0.3定位到是slave2这个redis我们进入容器查看其身份确实变为master。 自此我们的redis-sentinel部署完成了。