由于业务系统的特殊性,我们需要针对不同的客户环境部署redis 哨兵集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了基于ansible自动化工具, 一键远程离线部署redis容器版 哨兵集群,当然也会编写二进制版本,敬请期待吧!
说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?
1、支持 1台主机 一键远程部署redis 哨兵伪集群(一主二从三哨兵)。
2、支持 2台主机 一键远程部署redis 哨兵 分布式集群(一主二从三哨兵)。
3、支持 3台主机 一键远程部署redis 哨兵 分布式集群(一主二从三哨兵)。
4、支持 4台主机 一键远程部署redis 哨兵 分布式集群(一主二从三哨兵)。
5、支持 5台主机 一键远程部署redis 哨兵 分布式集群(一主二从三哨兵)。
6、支持 6台主机 一键远程部署redis 哨兵 分布式集群(一主二从三哨兵)。
7、支持一键部署所有节点或单个redis实例部署、启动、停止、重启、检查、移除等功能。
8、 支持数据目录、日志目录、端口、集群密码等参数的灵活配置。
9、 支持数据目录、日志目录、配置文件等持久化。
说明:由于redis 哨兵集群是一主二从三哨兵模式,所以最多6台服务器即可。
基于ansible一键离线部署redis6.2.8容器版哨兵集群工具
目录说明如下:
#1、ansible目录:存放ansible工具rpm包目录,可一键安装ansible
#2、cluster目录:存放hosts文件和config.yml文件目录,主要配置服务器信息及redis cluster集群配置信息
#3、example目录:存放hosts文件和config.yml模板文件
#4、images目录:存放redis 哨兵集群镜像文件
#5、op.sh:redis 哨兵集群部署的主控脚本
#6、pkgs:存放sshpass和nc命令的rpm包文件
#7、playbooks:redis 哨兵集群部署的剧本文件
#8、roles目录:redis 哨兵集群部署的角色文件
op.sh主控脚本参数如下:
说明:根据部署redis 哨兵集群的主机数量,选择不同的部署模式,例如,主机数量为6台,则选择node6。
其中代码行数:3381行,使用shell语言+jinja2语言。
1、建议提前关闭好防火墙和selinux。
2、redis cluste集群是基于docker和docker-compose工具, 所以redis 哨兵集群主机上提前安装好docker和docker-compose工具。
说明:根据主机数量,请选择一台主机作为主控端,其它主机作为受控端,如果服务器数量为1台,则即可为主控端,又可为受控端。主控端需提前安装好ansible工具。这里为了避免麻烦,特意写了一个离线的ansible部署脚本,可实现一键部署ansible。脚本已经集成到该工具中,开箱即用,非常方便!
由于文章篇幅有限,这里就只介绍,在单台主机模式下,如果使用ansible工具实现redis 哨兵集群的一键容器化部署?
1、生成单台主机的hosts文件和config.yml文件
[root@localhost redis-sentinel]# ./op.sh new node1
2023-01-12 10:08:30 DEBUG generate custom cluster files in /opt/pkgs/redis-sentinel/cluster/node1
2023-01-12 10:08:30 DEBUG cluster node1: files successfully created.
2023-01-12 10:08:30 INFO next steps 1: to config '/opt/pkgs/redis-sentinel/cluster/node1/hosts'
2023-01-12 10:08:30 INFO next steps 2: to config '/opt/pkgs/redis-sentinel/cluster/node1/config.yml'
2、编辑hosts文件
注意:base_dir变量无需修改,这个变量是自动生成的,只需修改服务器ip地址、ssh端口、账号密码等信息即可。
# 服务名称:redis sentinel集群
# 服务器支持: <最多支持6台服务器>
# 网络环境要求:<适用于企业或单位内网环境\互联网环境>
# 说明:根据实际服务器数量进行部署规划,如不清楚,建议咨询公司运维工程师
# 部署类型:单台主机部署redis sentinel集群
[all]
192.168.1.191 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7
# 为主机组指定变量,作用范围为整个主机组
[all:vars]
# Deploy Directory (redis sentinel集群一键部署工具包workspace),不修改
base_dir="/opt/pkgs/redis-sentinel"
3、编辑config.yml
注意:端口不冲突情况下,建议不要修改端口,一般情况下,只需修改MAX_SPACE_DIR和REDIS_HOST这两个变量。
# 使用1台服务器部署redis sentinel集群
# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录
MAX_SPACE_DIR: "/data"
# role:redis
# redis工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
REDIS_WORK_DIR: "{{ MAX_SPACE_DIR }}/pkgs/redis-sentinel"
# redis数据存放根目录,建议选择当前磁盘分区最大空间下目录,默认不修改
REDIS_DATA_DIR: "{{ MAX_SPACE_DIR }}/basic-data/redis-sentinel"
# 宿主机内网ip地址,根据实际情况填写
REDIS_HOST: "192.168.1.191"
# redis master实例所在主机内网ip地址及映射宿主机端口,默认不修改
REDIS_MASTER_HOST: "{{ REDIS_HOST }}"
REDIS_MASTER_PORT: "7001"
# redis slave1实例所在主机内网ip地址及映射宿主机端口,默认不修改
REDIS_SLAVE1_HOST: "{{ REDIS_HOST }}"
REDIS_SLAVE1_PORT: "7002"
# redis slave2实例所在主机内网ip地址及映射宿主机端口,默认不修改
REDIS_SLAVE2_HOST: "{{ REDIS_HOST }}"
REDIS_SLAVE2_PORT: "7003"
# redis-sentinel-1实例所在主机内网ip地址及映射宿主机端口,默认不修改
REDIS_SENTINEL1_HOST: "{{ REDIS_HOST }}"
REDIS_SENTINEL1_PORT: "7004"
# redis-sentinel-2实例所在主机内网ip地址及映射宿主机端口,默认不修改
REDIS_SENTINEL2_HOST: "{{ REDIS_HOST }}"
REDIS_SENTINEL2_PORT: "7005"
# redis-sentinel-3实例所在主机内网ip地址及映射宿主机端口,默认不修改
REDIS_SENTINEL3_HOST: "{{ REDIS_HOST }}"
REDIS_SENTINEL3_PORT: "7006"
# redis sentinel集群密码,根据实际情况修改
REDIS_PASSWORD: "AhspHJ2l0ychcves"
4、执行部署操作
一键部署服务
#方式一:一键部署所有节点
[root@localhost redis-sentinel]# ./op.sh setup node1 all
#方式二:单个节点依次部署
[root@localhost redis-sentinel]# ./op.sh setup node1 01
[root@localhost redis-sentinel]# ./op.sh setup node1 02
[root@localhost redis-sentinel]# ./op.sh setup node1 03
[root@localhost redis-sentinel]# ./op.sh setup node1 04
[root@localhost redis-sentinel]# ./op.sh setup node1 05
[root@localhost redis-sentinel]# ./op.sh setup node1 06
从如下截图中,可以看出master节点为192.168.1.191:7001,如下图所示:
关闭redis-master节点,等待一分钟,,从如下截图中,可以看出master切换为192.168.1.191:7002
说明:通过如上操作,主从切换验证成功!
总结:使用ansible自动化工具一键部署redis 哨兵集群,效率确实非常高,全程部署2分钟就完全搞定了,对于一些需要多次部署的场景,自动化确实很重要,可以极大的提高整个部署效率,我觉得对于运维来说,一定要有高度的自动化意识,当然这只是单个服务模块的自动化部署,如果是把整个业务系统,编写成一键自动化部署工具的化,这可能是一个非常的工程,当然,后期有机会我也会进行分享整个业务系统的一键部署是如果设计及编写的。
更多详细内容请参考:《Linux运维篇:Linux系统运维指南》