《Linux运维实战:Centos7.6基于ansible一键离线部署elasticsearch7.6.2容器版分布式集群》

Posted 东城绝神

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Linux运维实战:Centos7.6基于ansible一键离线部署elasticsearch7.6.2容器版分布式集群》相关的知识,希望对你有一定的参考价值。

一、部署背景

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

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


二、功能简介

1、支持 1台主机 一键远程部署elasticsearchr伪集群(三节点模式)。
2、支持 2台主机 一键远程部署elasticsearchr 分布式集群(三节点模式)。
3、支持 3台主机 一键远程部署elasticsearchr 分布式集群(三节点模式)。
4、支持一键部署所有节点或单个elasticsearchr实例依次部署、启动、停止、重启、检查、移除等功能。
5、 支持数据目录、http端口、tcp端口、集群密码、集群名称、节点名称、jvm大小等参数的灵活配置
6、 支持数据目录、日志目录、插件目录、配置文件、证书文件等持久化

说明:由于elasticsearchr集群是三节点模式,所以最多3台服务器即可。


三、工具下载

基于ansible一键离线部署elasticsearch7.6.2容器版分布式集群工具


四、工具说明

目录结构如下:

目录说明如下:

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

README.txt文件内容如下:

op.sh主控脚本参数如下:

说明:根据部署elasticsearch集群的主机数量,选择不同的部署模式,例如,主机数量为3台,则选择node3。

其中代码行数:2496行,使用shell语言+jinja2语言。


五、部署要求

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


六、部署步骤

说明:根据主机数量,请选择一台主机作为主控端,其它主机作为受控端,如果服务器数量为1台,则即可为主控端,又可为受控端。主控端需提前安装好ansible工具。这里为了避免麻烦,特意写了一个离线的ansible部署脚本,可实现一键部署ansible。脚本已经集成到该工具中,开箱即用,非常方便!

由于文章篇幅有限,这里就只介绍,在3台主机上,如何使用ansible工具实现elasticsearch分布式集群的一键容器化部署?


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

[root@localhost es-tools]# ./op.sh new node3
2023-02-03 14:04:30 DEBUG generate custom cluster files in /opt/pkgs/es-tools/cluster/node3
2023-02-03 14:04:30 DEBUG cluster node3: files successfully created.
2023-02-03 14:04:30 INFO next steps 1: to config '/opt/pkgs/es-tools/cluster/node3/hosts'
2023-02-03 14:04:30 INFO next steps 2: to config '/opt/pkgs/es-tools/cluster/node3/config.yml'

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

# 服务名称:elasticsearch cluster集群
# 服务器支持: <最多支持3台服务器>
# 网络环境要求:<适用于企业或单位内网环境\\互联网环境>
# 说明:根据实际服务器数量进行部署规划,如不清楚,建议咨询公司运维工程师
# 部署类型:使用3台主机部署elasticsearch cluster集群
[es_cluster_1]
192.168.1.191 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7

[es_cluster_2]
192.168.1.192 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7

[es_cluster_3]
192.168.1.193 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=123456 ansible_python_interpreter=/usr/bin/python2.7

# 为主机组指定变量,作用范围为整个主机组
[all:vars]

# Deploy Directory (elasticsearch cluster集群一键部署工具包workspace),不修改
base_dir="/opt/pkgs/es-tools"

3、编辑config.yml

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

# 使用3台服务器部署elasticsearch cluster集群
# 宿主机最大磁盘空间分区下目录,比如说"/"分区下空间最大,就在"/"分区下创建一个data目录
MAX_SPACE_DIR: "/data"
# role:elasticsearch
# elasticsearch工作目录,主要用来存放离线镜像及其它部署相关文件,默认不修改
ES_WORK_DIR: " MAX_SPACE_DIR /pkgs/es-cluster"

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

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

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

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

# elasticsearch cluster集群之实例1所在主机内网ip地址及映射宿主机端口,端口不冲突情况下,默认不修改
# 其中9201用于外部通讯,基于http协议,程序与es的通信使用9201端口
# 其中9301用于jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9301端口进行通信。
# es最小及最大堆内存大小,不超过32g,根据实际情况修改
# 节点名称,可任意设置,例如es-node1
ES1_NODE_NAME: "es-node1"
ES1_HOST_IP: " ES_HOST_1 "
ES1_HTTP_PORT: "9201"
ES1_TCP_PORT: "9301"
ES1_MIN_MEM: "2g"
ES1_MAX_MEM: "2g"

# elasticsearch cluster集群之实例2所在主机内网ip地址及映射宿主机端口,端口不冲突情况下,默认不修改
# 其中9202用于外部通讯,基于http协议,程序与es的通信使用9202端口
# 其中9302用于jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9302端口进行通信。
# es最小及最大堆内存大小,不超过32g,根据实际情况修改
# 节点名称,可任意设置,例如es-node2
ES2_NODE_NAME: "es-node2"
ES2_HOST_IP: " ES_HOST_2 "
ES2_HTTP_PORT: "9202"
ES2_TCP_PORT: "9302"
ES2_MIN_MEM: "2g"
ES2_MAX_MEM: "2g"

# elasticsearch cluster集群之实例3所在主机内网ip地址及映射宿主机端口,端口不冲突情况下,默认不修改
# 其中9203用于外部通讯,基于http协议,程序与es的通信使用9203端口
# 其中9303用于jar之间就是通过tcp协议通信,遵循tcp协议,es集群中的节点之间也通过9303端口进行通信。
# es最小及最大堆内存大小,不超过32g,根据实际情况修改
# 节点名称,可任意设置,例如es-node3
ES3_NODE_NAME: "es-node3"
ES3_HOST_IP: "  ES_HOST_3  "
ES3_HTTP_PORT: "9203"
ES3_TCP_PORT: "9303"
ES3_MIN_MEM: "2g"
ES3_MAX_MEM: "2g"

# elasticsearch集群名称,可任意设置,例如es-cluster
ES_CLUSTER_NAME: "es-cluster"

# elasticsearch cluster集群密码,可根据实际情况修改
ES_PASSWORD: "GxsDGSKWy0PZzWX0"

4、执行部署操作

说明:如果不清楚部署操作命令,可使用其帮助命令,如下所示

一键部署服务

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

#方式二:单个节点依次部署
[root@localhost es-tools]# ./op.sh setup node3 01 
[root@localhost es-tools]# ./op.sh setup node3 02 
[root@localhost es-tools]# ./op.sh setup node3 03 

一键部署结果,如下图所示:

查看集群节点信息,如下图所示:


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


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

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

以上是关于《Linux运维实战:Centos7.6基于ansible一键离线部署elasticsearch7.6.2容器版分布式集群》的主要内容,如果未能解决你的问题,请参考以下文章

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》

《Linux运维实战:Centos7.6使用haproxy部署rabbitmq3.9.16高可用镜像模式集群》

20171109L09-02老男孩Linux运维实战培训-Lamp系列-Apache服务生产实战应用指南05-基于端口的

《Linux运维总结:Centos7.6使用yum安装rabbitmq3.9.16》

linux运维实战练习-2016年3月4日-3月19日课程作业

linux运维实战练习-2016年3月4日-3月19日课程作业