《Linux运维实战:Centos7.6基于ansible一键离线部署redis6.2.8容器版之cluster集群》

一、部署背景

由于业务系统的特殊性,我们需要针对不同的客户环境部署redis cluster集群,由于大都数用户都是专网环境,无法使用外网,为了更便捷,高效的部署,针对业务系统的特性,我这边编写了基于ansible自动化工具, 一键远程离线部署redis cluster容器版集群,当然也会编写二进制版本,敬请期待吧!

说明:如果有兴趣,可以从工具下载中获取下载链接,此工具可帮助你快速了解一个自动化部署工具是如何编写的?


二、功能简介

1、支持 1台主机 一键远程部署redis cluster伪集群(三主三从)。
2、支持 2台主机 一键远程部署redis cluster 分布式集群(三主三从)。
3、支持 3台主机 一键远程部署redis cluster 分布式集群(三主三从)。
4、支持 4台主机 一键远程部署redis cluster 分布式集群(三主三从)。
5、支持 5台主机 一键远程部署redis cluster 分布式集群(三主三从)。
6、支持 6台主机 一键远程部署redis cluster 分布式集群(三主三从)。
7、支持一键部署所有节点或单个redis实例部署、启动、停止、重启、检查、移除等功能。
8、 支持数据目录、日志目录、端口、集群密码等参数的灵活配置
9、 支持数据目录、日志目录、配置文件等持久化

说明:由于redis cluster集群是三主三从模式,所以最多6台服务器即可。


三、工具下载

基于ansible一键离线部署redis6.2.8容器版cluster集群工具


四、工具说明

目录结构如下:
在这里插入图片描述

目录说明如下:

#1、ansible目录:存放ansible工具rpm包目录,可一键安装ansible
#2、cluster目录:存放hosts文件和config.yml文件目录,主要配置服务器信息及redis cluster集群配置信息
#3、example目录:存放hosts文件和config.yml模板文件
#4、images目录:存放redis cluster集群镜像文件
#5、op.sh:redis cluster集群部署的主控脚本
#6、pkgs:存放sshpass和nc命令的rpm包文件
#7、playbooks:redis cluster集群部署的剧本文件
#8、roles目录:redis cluster集群部署的角色文件

op.sh主控脚本参数如下:
在这里插入图片描述
说明:根据部署redis cluster集群的主机数量,选择不同的部署模式,例如,主机数量为6台,则选择node6。

其中代码行数:3910行,使用shell语言+jinja2语言。
在这里插入图片描述


五、部署要求

1、建议提前关闭好防火墙和selinux。
2、redis cluste集群是基于docker和docker-compose工具, 所以redis cluster集群主机上提前安装好docker和docker-compose工具。


六、部署步骤

说明:根据主机数量,请选择一台主机作为主控端,其它主机作为受控端,如果服务器数量为1台,则即可为主控端,又可为受控端。主控端需提前安装好ansible工具。这里为了避免麻烦,特意写了一个离线的ansible部署脚本,可实现一键部署ansible。脚本已经集成到该工具中,开箱即用,非常方便!
《Linux运维实战:Centos7.6基于ansible一键离线部署redis6.2.8容器版之cluster集群》_第1张图片

由于文章篇幅有限,这里就只介绍,在单台主机模式下,如果使用ansible工具实现redis-cluster集群的一键容器化部署?


1、生成单台主机的hosts文件和config.yml文件

[root@localhost redis-cluster]# ./op.sh new node1
2023-01-11 10:17:22 DEBUG generate custom cluster files in /opt/pkgs/redis-cluster/cluster/node1
2023-01-11 10:17:22 DEBUG cluster node1: files successfully created.
2023-01-11 10:17:22 INFO next steps 1: to config '/opt/pkgs/redis-cluster/cluster/node1/hosts'
2023-01-11 10:17:22 INFO next steps 2: to config '/opt/pkgs/redis-cluster/cluster/node1/config.yml'

2、编辑hosts文件
注意:base_dir变量无需修改,这个变量是自动生成的,只需修改服务器ip地址、ssh端口、账号密码等信息即可。

# 服务名称:redis cluster集群
# 服务器支持: <最多支持6台服务器>
# 网络环境要求:<适用于企业或单位内网环境\互联网环境>
# 说明:根据实际服务器数量进行部署规划,如不清楚,建议咨询公司运维工程师
# 部署类型:单台主机部署redis cluster集群
[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 cluster集群一键部署工具包workspace),不修改
base_dir="/opt/pkgs/redis-cluster"

3、编辑config.yml

注意:端口不冲突情况下,建议不要修改端口,一般情况下,只需修改MAX_SPACE_DIR和REDIS_HOST这两个变量。

# 使用1台服务器部署redis cluster集群

# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录
MAX_SPACE_DIR: "/data"

# role:redis
# redis工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
REDIS_WORK_DIR: "{{ MAX_SPACE_DIR }}/pkgs/redis-cluster"

# redis数据存放根目录,建议选择当前磁盘分区最大空间下目录,默认不修改
REDIS_DATA_DIR: "{{ MAX_SPACE_DIR }}/basic-data/redis-cluster"

# 宿主机内网ip地址,根据实际情况填写
REDIS_HOST: "192.168.1.191"

# redis cluster集群之实例1所在主机内网ip地址及映射宿主机端口,默认不修改
# 其中7001端口是客户端通信端口,17001端口是数据端口,用于集群总线,主要目的是用于节点的失败侦测、配置更新、故障转移授权等等
# # 集群总线端口(客户端通信端口 + 10000)
REDIS_NODE1_HOST: "{{ REDIS_HOST }}" 
REDIS_NODE1_PORT: "7001"
REDIS_NODE1_ANNOUNCE_BUS_PORT: "17001"

# redis cluster集群之实例2所在主机内网ip地址及映射宿主机端口,默认不修改
# 其中7002端口是客户端通信端口,17002端口是数据端口,用于集群总线,主要目的是用于节点的失败侦测、配置更新、故障转移授权等等
# # 集群总线端口(客户端通信端口 + 10000)
REDIS_NODE2_HOST: "{{ REDIS_HOST }}" 
REDIS_NODE2_PORT: "7002"
REDIS_NODE2_ANNOUNCE_BUS_PORT: "17002"

# redis cluster集群之实例3所在主机内网ip地址及映射宿主机端口,默认不修改
# 其中7003端口是客户端通信端口,17003端口是数据端口,用于集群总线,主要目的是用于节点的失败侦测、配置更新、故障转移授权等等
# # 集群总线端口(客户端通信端口 + 10000)
REDIS_NODE3_HOST: "{{ REDIS_HOST }}" 
REDIS_NODE3_PORT: "7003"
REDIS_NODE3_ANNOUNCE_BUS_PORT: "17003"

# redis cluster集群之实例4所在主机内网ip地址及映射宿主机端口,默认不修改
# 其中7004端口是客户端通信端口,17004端口是数据端口,用于集群总线,主要目的是用于节点的失败侦测、配置更新、故障转移授权等等
# # 集群总线端口(客户端通信端口 + 10000)
REDIS_NODE4_HOST: "{{ REDIS_HOST }}" 
REDIS_NODE4_PORT: "7004"
REDIS_NODE4_ANNOUNCE_BUS_PORT: "17004"

# redis cluster集群之实例5所在主机内网ip地址及映射宿主机端口,默认不修改
# 其中7005端口是客户端通信端口,17005端口是数据端口,用于集群总线,主要目的是用于节点的失败侦测、配置更新、故障转移授权等等
# # 集群总线端口(客户端通信端口 + 10000)
REDIS_NODE5_HOST: "{{ REDIS_HOST }}" 
REDIS_NODE5_PORT: "7005"
REDIS_NODE5_ANNOUNCE_BUS_PORT: "17005"

# redis cluster集群之实例6所在主机内网ip地址及映射宿主机端口,默认不修改
# 其中7006端口是客户端通信端口,17006端口是数据端口,用于集群总线,主要目的是用于节点的失败侦测、配置更新、故障转移授权等等
# # 集群总线端口(客户端通信端口 + 10000)
REDIS_NODE6_HOST: "{{ REDIS_HOST }}" 
REDIS_NODE6_PORT: "7006"
REDIS_NODE6_ANNOUNCE_BUS_PORT: "17006"

# redis cluster集群密码,默认不修改
REDIS_PASSWORD: "AhspHJ2l0ychcves"

4、执行部署操作

说明:如果不清楚部署操作命令,可使用其帮助命令,如下所示
在这里插入图片描述

一键部署服务

#方式一:一键部署所有节点
[root@localhost redis-cluster]# ./op.sh setup node1 all

#方式二:单个节点依次部署
[root@localhost redis-cluster]# ./op.sh setup node1 01 
[root@localhost redis-cluster]# ./op.sh setup node1 02 
[root@localhost redis-cluster]# ./op.sh setup node1 03 
[root@localhost redis-cluster]# ./op.sh setup node1 04 
[root@localhost redis-cluster]# ./op.sh setup node1 05 
[root@localhost redis-cluster]# ./op.sh setup node1 06 

一键部署结果,如下图所示:
《Linux运维实战:Centos7.6基于ansible一键离线部署redis6.2.8容器版之cluster集群》_第2张图片

查看集群节点信息,如下图所示:
在这里插入图片描述


总结:使用ansible自动化工具一键部署redis cluster集群,效率确实非常高,全程部署2分钟就完全搞定了,对于一些需要多次部署的场景,自动化确实很重要,可以极大的提高整个部署效率,我觉得对于运维来说,一定要有高度的自动化意识,当然这只是单个服务模块的自动化部署,如果是把整个业务系统,编写成一键自动化部署工具的化,这可能是一个非常的工程,当然,后期有机会我也会进行分享整个业务系统的一键部署是如果设计及编写的。


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

你可能感兴趣的:(《Linux运维实战总结》,ansible,redis-cluster部署)