commit
This commit is contained in:
102
elasticsearch-revert.yml
Normal file
102
elasticsearch-revert.yml
Normal file
@ -0,0 +1,102 @@
|
||||
---
|
||||
- name: Uninstall and Revert Elasticsearch Configuration
|
||||
hosts: elasticsearch_hosts
|
||||
become: true
|
||||
vars:
|
||||
# Set this to 'false' if you want to keep Java (OpenJDK) installed on the system
|
||||
# because other applications might be using it.
|
||||
remove_java: true
|
||||
|
||||
tasks:
|
||||
- name: "BLOCK: Stop and Remove Elasticsearch Service"
|
||||
block:
|
||||
- name: Stop and disable Elasticsearch service
|
||||
ansible.builtin.systemd:
|
||||
name: elasticsearch
|
||||
state: stopped
|
||||
enabled: false
|
||||
ignore_errors: true # Ignore errors if the service doesn't exist
|
||||
|
||||
- name: Purge Elasticsearch package and its config files
|
||||
ansible.builtin.apt:
|
||||
name: elasticsearch
|
||||
state: absent
|
||||
autoremove: true
|
||||
purge: true
|
||||
ignore_errors: true # Ignore errors if the package isn't installed
|
||||
|
||||
- name: "BLOCK: Clean Up Elasticsearch Files and Directories"
|
||||
block:
|
||||
# --- MODIFIED SECTION START ---
|
||||
- name: Find all contents within the /var/lib/elasticsearch mountpoint
|
||||
ansible.builtin.find:
|
||||
paths: /var/lib/elasticsearch
|
||||
hidden: true
|
||||
register: contents_to_delete
|
||||
|
||||
- name: Delete all contents found within the mountpoint (leaving the mountpoint itself)
|
||||
ansible.builtin.file:
|
||||
path: "{{ item.path }}"
|
||||
state: absent
|
||||
loop: "{{ contents_to_delete.files | sort(attribute='path', reverse=true) }}"
|
||||
loop_control:
|
||||
label: "{{ item.path }}"
|
||||
# --- MODIFIED SECTION END ---
|
||||
|
||||
- name: Remove Elasticsearch log directory
|
||||
ansible.builtin.file:
|
||||
path: /var/log/elasticsearch
|
||||
state: absent
|
||||
|
||||
- name: Remove Elasticsearch config directory (just in case purge missed it)
|
||||
ansible.builtin.file:
|
||||
path: /etc/elasticsearch
|
||||
state: absent
|
||||
|
||||
- name: "BLOCK: Remove APT Repository and GPG Key"
|
||||
block:
|
||||
- name: Remove Elasticsearch APT repository
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb https://artifacts.elastic.co/packages/9.x/apt stable main"
|
||||
state: absent
|
||||
filename: elastic-9.x
|
||||
|
||||
- name: Remove Elasticsearch GPG key
|
||||
ansible.builtin.file:
|
||||
path: /etc/apt/trusted.gpg.d/elasticsearch.gpg
|
||||
state: absent
|
||||
|
||||
- name: "BLOCK: Revert System Tuning"
|
||||
block:
|
||||
- name: Revert vm.max_map_count setting
|
||||
ansible.posix.sysctl:
|
||||
name: vm.max_map_count
|
||||
state: absent
|
||||
reload: true
|
||||
|
||||
- name: Remove Elasticsearch user memory limit
|
||||
community.general.pam_limits:
|
||||
domain: "elasticsearch"
|
||||
limit_type: "-"
|
||||
limit_item: "memlock"
|
||||
state: absent
|
||||
|
||||
- name: Remove Elasticsearch user file descriptor limit
|
||||
community.general.pam_limits:
|
||||
domain: "elasticsearch"
|
||||
limit_type: "-"
|
||||
limit_item: "nofile"
|
||||
state: absent
|
||||
|
||||
- name: "BLOCK: (Optional) Uninstall Java"
|
||||
block:
|
||||
- name: Uninstall OpenJDK package
|
||||
ansible.builtin.apt:
|
||||
name: openjdk-21-jdk
|
||||
state: absent
|
||||
autoremove: true
|
||||
when: remove_java
|
||||
|
||||
- name: Final APT cache update
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
128
elasticsearch.yml
Normal file
128
elasticsearch.yml
Normal file
@ -0,0 +1,128 @@
|
||||
---
|
||||
- name: Install and Configure Elasticsearch 9
|
||||
hosts: elasticsearch # Target your hosts here (e.g., from your inventory file)
|
||||
become: true
|
||||
vars:
|
||||
# UPDATED: Set to a specific version 9 release for predictable deployments.
|
||||
es_version: "9.0.0" # Change to the specific ES9 version you want to deploy
|
||||
es_cluster_name: "cluster-v9"
|
||||
es_node_name: "{{ ansible_hostname }}"
|
||||
es_network_host: "{{ ansible_default_ipv4.address }}" # Binds to the primary private IP
|
||||
es_heap_size: "{{ (ansible_memtotal_mb * 0.5) | int }}m" # Use 50% of total RAM. For 32GB RAM, this sets ~16GB.
|
||||
|
||||
# --- For multi-node clusters, override these in your inventory ---
|
||||
es_seed_hosts: ["{{ es_network_host }}"]
|
||||
es_initial_master_nodes: ["{{ es_node_name }}"]
|
||||
|
||||
tasks:
|
||||
- name: "BLOCK: System Preparation"
|
||||
block:
|
||||
- name: Update APT package cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
cache_valid_time: 3600
|
||||
|
||||
- name: Install prerequisite packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- apt-transport-https
|
||||
- ca-certificates
|
||||
- gnupg
|
||||
# UPDATED: Elasticsearch 9 requires Java 21+
|
||||
- openjdk-21-jdk
|
||||
state: present
|
||||
|
||||
- name: "BLOCK: System Tuning for Elasticsearch"
|
||||
block:
|
||||
- name: Set vm.max_map_count for Elasticsearch
|
||||
ansible.posix.sysctl:
|
||||
name: vm.max_map_count
|
||||
value: "262144"
|
||||
state: present
|
||||
reload: true
|
||||
|
||||
- name: Set Elasticsearch user memory limit
|
||||
community.general.pam_limits:
|
||||
domain: "elasticsearch"
|
||||
limit_type: "-"
|
||||
limit_item: "memlock"
|
||||
value: "unlimited"
|
||||
comment: "Allow memory locking"
|
||||
|
||||
- name: Set Elasticsearch user file descriptor limit
|
||||
community.general.pam_limits:
|
||||
domain: "elasticsearch"
|
||||
limit_type: "-"
|
||||
limit_item: "nofile"
|
||||
value: "65536"
|
||||
comment: "Set max open files"
|
||||
|
||||
- name: "BLOCK: Install Elasticsearch"
|
||||
block:
|
||||
- name: Download Elasticsearch GPG key
|
||||
ansible.builtin.get_url:
|
||||
url: "https://artifacts.elastic.co/GPG-KEY-elasticsearch"
|
||||
dest: "/tmp/GPG-KEY-elasticsearch"
|
||||
mode: '0644'
|
||||
|
||||
- name: De-armor the GPG key
|
||||
ansible.builtin.command:
|
||||
cmd: "gpg --dearmor -o /etc/apt/trusted.gpg.d/elasticsearch.gpg /tmp/GPG-KEY-elasticsearch"
|
||||
creates: "/etc/apt/trusted.gpg.d/elasticsearch.gpg"
|
||||
|
||||
- name: Add Elasticsearch 9.x APT repository
|
||||
# UPDATED: Repository path changed from 8.x to 9.x
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb https://artifacts.elastic.co/packages/9.x/apt stable main"
|
||||
state: present
|
||||
filename: elastic-9.x
|
||||
|
||||
- name: Install Elasticsearch package
|
||||
ansible.builtin.apt:
|
||||
name: "elasticsearch={{ es_version }}"
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: "BLOCK: Configure Elasticsearch"
|
||||
block:
|
||||
- name: Configure elasticsearch.yml
|
||||
ansible.builtin.template:
|
||||
src: templates/elasticsearch.yml.j2
|
||||
dest: /etc/elasticsearch/elasticsearch.yml
|
||||
owner: root
|
||||
group: elasticsearch
|
||||
mode: '0660'
|
||||
notify: Restart Elasticsearch
|
||||
|
||||
- name: Configure JVM heap size
|
||||
ansible.builtin.template:
|
||||
src: templates/jvm.options.j2
|
||||
dest: /etc/elasticsearch/jvm.options.d/heap_size.options
|
||||
owner: root
|
||||
group: root
|
||||
mode: '0644'
|
||||
notify: Restart Elasticsearch
|
||||
|
||||
- name: Flush handlers to apply config changes before starting the service
|
||||
ansible.builtin.meta: flush_handlers
|
||||
|
||||
- name: Enable and ensure Elasticsearch service is started
|
||||
ansible.builtin.systemd:
|
||||
name: elasticsearch
|
||||
state: started
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
|
||||
- name: Wait for Elasticsearch to start up on port 9200
|
||||
ansible.builtin.wait_for:
|
||||
host: "{{ es_network_host }}"
|
||||
port: 9200
|
||||
delay: 10
|
||||
timeout: 120
|
||||
delegate_to: localhost
|
||||
|
||||
handlers:
|
||||
- name: Restart Elasticsearch
|
||||
ansible.builtin.systemd:
|
||||
name: elasticsearch
|
||||
state: restarted
|
||||
47
templates/elasticsearch.yml.j2
Normal file
47
templates/elasticsearch.yml.j2
Normal file
@ -0,0 +1,47 @@
|
||||
# ======================== Elasticsearch Configuration =========================
|
||||
# ANSIBLE MANAGED FILE: Do not edit directly. Changes will be overwritten.
|
||||
#
|
||||
# ---------------------------------- Cluster -----------------------------------
|
||||
cluster.name: "{{ es_cluster_name }}"
|
||||
|
||||
# ------------------------------------ Node ------------------------------------
|
||||
node.name: "{{ es_node_name }}"
|
||||
|
||||
# ----------------------------------- Paths ------------------------------------
|
||||
path.data: /var/lib/elasticsearch
|
||||
path.logs: /var/log/elasticsearch
|
||||
|
||||
# ----------------------------------- Memory -----------------------------------
|
||||
# Lock the memory on startup to prevent the OS from swapping it out.
|
||||
bootstrap.memory_lock: true
|
||||
|
||||
# ---------------------------------- Network -----------------------------------
|
||||
# Bind to the host's private IP address for cluster communication.
|
||||
network.host: "{{ es_network_host }}"
|
||||
http.port: 9200
|
||||
|
||||
# --------------------------------- Discovery ----------------------------------
|
||||
# A list of hosts to contact to discover the cluster.
|
||||
discovery.seed_hosts: {{ es_seed_hosts | to_json }}
|
||||
|
||||
# Bootstrap the cluster using an initial set of master-eligible nodes.
|
||||
cluster.initial_master_nodes: {{ es_initial_master_nodes | to_json }}
|
||||
|
||||
# ---------------------------------- Security ----------------------------------
|
||||
# Security features are enabled by default on Elasticsearch 8.0+
|
||||
# On first start, a password for the 'elastic' user and a Kibana enrollment
|
||||
# token will be generated in the output of the 'elasticsearch' service.
|
||||
# You can also generate them manually later.
|
||||
xpack.security.enabled: true
|
||||
xpack.security.enrollment.enabled: true
|
||||
|
||||
# These settings configure TLS for HTTP and transport (inter-node) layers.
|
||||
# Elasticsearch automatically generates these certificates on first startup.
|
||||
xpack.security.http.ssl:
|
||||
enabled: true
|
||||
keystore.path: certs/http.p12
|
||||
xpack.security.transport.ssl:
|
||||
enabled: true
|
||||
verification_mode: certificate
|
||||
keystore.path: certs/transport.p12
|
||||
truststore.path: certs/transport.p12
|
||||
5
templates/jvm.options.j2
Normal file
5
templates/jvm.options.j2
Normal file
@ -0,0 +1,5 @@
|
||||
# ANSIBLE MANAGED FILE: Sets the JVM heap size for Elasticsearch.
|
||||
# Set initial and maximum heap size to the same value to avoid
|
||||
# pauses due to heap resizing at runtime.
|
||||
-Xms{{ es_heap_size }}
|
||||
-Xmx{{ es_heap_size }}
|
||||
Reference in New Issue
Block a user