ansible一键化部署es集群,环境linux7,版本elasticsearch-7.17.5-linux-x86_64.tar.gz
5、剧本执行后,主机节点会重启,重新连接后生效,9200端口大概3分钟之内启动(看服务的快慢),为了仿制有锁,在剧本重启节点后,看下“使用说明”,删掉rm -rf /oldboyedu/data/es7/* /oldboyedu/logs/es7/* /tmp/* 并重启systemctl restart es7。- name: 创建目录 /elk-ansible-hosts/roles/{es-
#注声明原手动部署来源于老男孩,为了完成用ansible一键化二进制部署,也写了如下playbook剧本,剧本可反复执行,如下需要注意几点:
(懒的复制代码的小伙伴可以直接使用我上传的文件,然后scp到自己的主机,然后改改。。)
1、本剧本适合用于测试阶段部署,并不适用于生产环境,因为在执行剧本时,我多次清空/oldboyedu/data/es7/* /oldboyedu/logs/es7/* /tmp/*目录下的文件,为了二次部署方便。
2、已经在es目录中有数据的小伙伴,尽量不要使用我的初始化脚本,会把数据清赶紧,如果必要请备份。
3、剧本中有很多命令是我用shell或command模块来执行的,有些命令没有使用变量,后期改路径的小伙伴请注意使用,(后续会更新剧本)。
4、###禁止生产环境使用,禁止,禁止,禁止(产生数据丢失后果概不负责)
5、剧本执行后,主机节点会重启,重新连接后生效,9200端口大概3分钟之内启动(看服务的快慢),为了仿制有锁,在剧本重启节点后,看下“使用说明”,删掉rm -rf /oldboyedu/data/es7/* /oldboyedu/logs/es7/* /tmp/* 并重启systemctl restart es7
使用前安装说明:
本节点是linux7的环境,确保节点(101主节点)配置/etc/hosts
#这是我的节点配置的(可修改)
192.168.31.101 elk101.oldboyedu.com
192.168.31.102 elk102.oldboyedu.com
192.168.31.103 elk103.oldboyedu.com
确定关闭防火墙以及selinux
sudo sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config && sudo setenforce 0
systemctl stop firewalld
systemctl disable firewalld
每个主机节点要求最低配置:
2C 核cup 4G 内存 50G硬盘
创建目录:
mkdir /elk-ansible-hosts && cd /elk-ansible-hosts
##配置ansible inventory
[root@elk101 elk-ansible-hosts]# cat inventory[es_nodes]
192.168.31.101 ansible_user=root ansible_password=123456
192.168.31.102 ansible_user=root ansible_password=123456
192.168.31.103 ansible_user=root ansible_password=123456[es_nodes:vars]
es_ip=192.168.31.101
es_user=oldboyedu
es_uid=2023
es_version=7.17.5
es_cluster_name=oldboyedu-linux85-binary
es_data_dir=/oldboyedu/data/es7
es_logs_dir=/oldboyedu/logs/es7
es_softwares_dir=/oldboyedu/softwares/es7
es_config_dir=/oldboyedu/softwares/es7/elasticsearch-{{ es_version }}/config
es_nodes_list=["elk101.oldboyedu.com","elk102.oldboyedu.com","elk103.oldboyedu.com"]
###password根据自己主机的密码进行定义,我这里是123456,用户是root(建议使用root部署,权限够高。)
vim 初始化脚本init.yml
- name: 删除/oldboyedu目录下的所有文件和目录(警告:只适合重新安装es,目录下里面的数据全部清空)
hosts: all # 替换为你的目标主机组
tasks:
- name: 删除/oldboyedu目录下的所有文件和目录(警告:只适合重新安装es,目录下里面的数据全部清空)
ansible.builtin.command: rm -rf /oldboyedu/*
args:
warn: false # 禁止Ansible显示关于使用shell/command的警告
- name: 在所有节点创建用户 oldboyedu
hosts: all # 在所有节点执行
become: yes # 使用sudo权限
tasks:
- name: 创建用户 oldboyedu
user:
name: oldboyedu # 用户名
state: present # 确保用户存在
create_home: yes # 创建用户主目录`
- name: 创建ansible阶梯目录结构
hosts: localhost # 在本地执行
tasks:
- name: 创建目录 /elk-ansible-hosts/roles/{es-install,es-config,es-optimize,es-service}/tasks
file:
path: "{{ item }}"
state: directory # 确保是目录
owner: "oldboyedu" # 设置所有者(替换为实际用户)
group: "oldboyedu" # 设置所属组(替换为实际组)
mode: "0755" # 设置权限
with_items:
- "/elk-ansible-hosts/roles/es-install/tasks"
- "/elk-ansible-hosts/roles/es-config/tasks"
- "/elk-ansible-hosts/roles/es-config/templates"
- "/elk-ansible-hosts/roles/es-optimize/tasks"
- "/elk-ansible-hosts/roles/es-service/tasks"
- "/elk-ansible-hosts/roles/es-service/templates"- name: 创建es安装目录结构
hosts: all # 所有节点执行
tasks:
- name: 创建目录 install -d /oldboyedu/{data,logs,softwares}/es7 -o oldboyedu -g oldboyedu
file:
path: "{{ item }}"
state: directory # 确保是目录
owner: "oldboyedu" # 设置所有者(替换为实际用户)
group: "oldboyedu" # 设置所属组(替换为实际组)
mode: "0777" # 设置权限
with_items:
- "/oldboyedu/data/es7"
- "/oldboyedu/logs/es7"
- "/oldboyedu/softwares/es7"
- "/oldboyedu"- name: 拷贝hosts文件
hosts: all # 指定主机
become: yes
tasks:
- name: 拷贝hosts文件
copy:
src: "/etc/hosts" # 源路径
dest: "/etc/" # 目标路径
when: inventory_hostname != "node1"- name: 拷贝elasticsearch-7.17.5-linux-x86_64.tar.gz包到所有节点上
hosts: all
become: yes
tasks:
- name: Copy compressed package to nodes
copy:
src: /opt/elasticsearch-7.17.5-linux-x86_64.tar.gz # 控制机上的源文件路径
dest: /opt/ # 目标节点上的目标路径
mode: 0755 # 设置文件权限- name: 所有节点yum安装rsync
hosts: all
become: yes # 使用特权权限(sudo)
tasks:
- name: Install rsync using yum
yum:
name: rsync
state: present
register: install_result # 注册安装结果- name: Check if rsync installation succeeded
debug:
msg: "rsync installed successfully"
when: install_result is succeeded # 如果安装成功,输出成功信息- name: Handle rsync installation failure
debug:
msg: "Failed to install rsync. Please check the yum repository or network connection."
when: install_result is failed # 如果安装失败,输出错误信息
- name: 修改参数 vm.max_map_count
hosts: all
become: yes
tasks:
- name: Create /etc/sysctl.d/es.conf
copy:
dest: /etc/sysctl.d/es.conf
content: |
vm.max_map_count=524288
owner: root
group: root
mode: 0755- name: 重新加载/etc/sysctl.d/es.conf
sysctl:
name: vm.max_map_count
value: 524288
state: present
reload: yes # 立即生效
部署playbook.yml
- name: 调用模块
hosts: es_nodes
become: yes
roles:
- es-install
- es-config
- es-optimize
- es-service
#- common
tasks:
- name: 所有节点重启
reboot:
msg: "Reboot initiated by Ansible for Elasticsearch deployment"
connect_timeout: 5
reboot_timeout: 600
pre_reboot_delay: 0
post_reboot_delay: 30
roles: - es-install模块剧本说明:
路径:/elk-ansible-hosts/roles/es-install/tasks
文件: /elk-ansible-hosts/roles/es-install/tasks/main.yml
- name: 解压Elasticsearch安装包
unarchive:
src: "/opt/elasticsearch-{{ es_version }}-linux-x86_64.tar.gz" # 源路径:本地/opt目录下的包
dest: "{{ es_softwares_dir }}" # 目标路径:解压到指定目录
remote_src: no # 从本地路径解压
- name: 设置解压后目录的所有者和权限
file:
path: "/oldboyedu/softwares/es7/elasticsearch-7.17.5"
owner: oldboyedu
group: oldboyedu
mode: '0777'
recurse: yes # 递归更改目录和文件的权限
roles: - es-config模块剧本说明:
路径:/elk-ansible-hosts/roles/es-config/tasks
文件: /elk-ansible-hosts/roles/es-config/tasks/main.yml
- name: Configure elasticsearch.yml
template:
src: elasticsearch.yml.j2
dest: "{{ es_config_dir }}/elasticsearch.yml"
owner: "{{ es_user }}"
group: "{{ es_user }}"- name: Sync configuration to all nodes
copy:
src: "{{ es_config_dir }}/elasticsearch.yml"
dest: "{{ es_config_dir }}/elasticsearch.yml"
#when: inventory_hostname != "192.168.31.101" # 排除自身
roles: - es-config模块剧本说明:
路径: /elk-ansible-hosts/roles/es-config/templates
文件: /elk-ansible-hosts/roles/es-config/templates/elasticsearch.yml.j2
cluster.name: {{ es_cluster_name }}
path.data: {{ es_data_dir }}
path.logs: {{ es_logs_dir }}
network.host: 0.0.0.0
discovery.seed_hosts: {{ es_nodes_list }}
cluster.initial_master_nodes: {{ es_nodes_list }}
node.max_local_storage_nodes: 2
roles: - es-optimize模块剧本说明
路径:/elk-ansible-hosts/roles/es-optimize/tasks
文件: /elk-ansible-hosts/roles/es-optimize/tasks/main.yml
- name: Set file descriptor limits # 任务名称:设置文件描述符限制
lineinfile:
path: /etc/security/limits.d/es7.conf # 目标文件路径
line: "{{ item }}" # 要写入的行内容
create: yes # 如果文件不存在,则创建文件
loop: # 循环写入多行内容
- "* soft nofile 65535" # 设置软限制(soft limit)为 65535
- "* hard nofile 131070" # 设置硬限制(hard limit)为 131070
- "* hard nproc 8192" # 设置进程数硬限制为 8192- name: Set kernel parameter vm.max_map_count # 任务名称:设置内核参数 vm.max_map_count
sysctl:
name: vm.max_map_count # 内核参数名称
value: 524288 # 设置参数值为 524288
state: present # 确保参数存在
reload: yes # 立即生效(相当于执行 sysctl -p)
roles: -es-service模块剧本说明
路径:/elk-ansible-hosts/roles/es-service/tasks
文件: /elk-ansible-hosts/roles/es-service/tasks/main.yml
- name: Create systemd service file # 调用 es7.service.j2 模板文件,生成 systemd 服务配置文件
template:
src: es7.service.j2 # 模板文件路径
dest: /usr/lib/systemd/system/es7.service # 生成的 systemd 服务文件路径
owner: root # 文件所属用户
group: root # 文件所属用户组
mode: 0777 # 文件权限(777)- name: Reload systemd daemon # 重新加载 systemd 配置,使新服务文件生效
systemd:
daemon_reload: yes # 执行 systemctl daemon-reload- name: Enable and start ES service # 启用并启动 Elasticsearch 服务
systemd:
name: es7 # 服务名称
state: started # 确保服务处于运行状态
enabled: yes # 设置服务开机自启动
roles: -es-service
路径:/elk-ansible-hosts/roles/es-service/templates
文件: /elk-ansible-hosts/roles/es-service/templates/es7.service.j2
[Unit]
Description=oldboyedu linux85 es7
After=network.target[Service]
Type=simple
ExecStart=/oldboyedu/softwares/es7/elasticsearch-7.17.5/bin/elasticsearch
User=oldboyedu
LimitNOFILE=131070[Install]
WantedBy=multi-user.target
执行命令ansible-playbook -i inventory init.yml playbook.yml
#节点重启后重新连接
执行命令:
rm -rf /oldboyedu/data/es7/* /oldboyedu/logs/es7/* /tmp/*
systemctl restart es7
##查看状态
curl 192.168.31.101:9200/_cat/nodes

状态正常,部署完毕
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)