使用Ansible-playbook安装ES集群
使用Ansible-playbook安装ES集群
目录结构
[root@ansible local]# tree elasticsearch/
elasticsearch/
├── ansible.cfg
├── conf
│ ├── elasticsearch.service.j2
│ └── elasticsearch.yml.j2
├── elasticsearch_hosts
├── packages
│ └── elasticsearch-7.5.0-linux-x86_64.tar.gz
├── Readme.txt
├── tasks
│ ├── init.yaml
│ ├── install_elasticsearch.yaml
│ ├── main.yaml
│ ├── off_firewalld.yaml
│ └── off_selinux.yaml
├── test.yal
├── test.yaml
└── vars
playbook文件
[root@ansible tasks]# cat off_firewalld.yaml
- name: stop firewalld
service:
name: firewalld
state: stopped
enabled: no
[root@ansible tasks]# cat off_selinux.yaml
- name: stop
lineinfile:
path: /etc/selinux/config
regexp: '^SELINUX='
line: SELINUX=disabled
[root@ansible tasks]# cat init.yaml
---
- name: "set security config"
shell: |
echo "* soft nproc 655350" >> /etc/security/limits.conf
echo "* hard nproc 655350" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
echo "* hard memlock unlimited" >> /etc/security/limits.conf
become: yes
- name: "add sysctl config"
shell: |
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
sysctl -p
become: yes
[root@ansible tasks]# cat install_elasticsearch.yaml
- name: "user is elasticsearch exist"
stat:
path: "/home/{{ elasticsearch_start_user }}"
register: user_check
- name: "create elasticsearch group"
group: name=es gid=9200
become: yes
when: not user_check.stat.exists
- name: "add elasticsearch user"
user:
name: "{{ elasticsearch_start_user }}"
uid: 9200
group: "{{ elasticsearch_start_user }}"
become: yes
when: not user_check.stat.exists
- name: "copy {{ elasticsearch_packages }}.tar.gz"
copy:
src: "/usr/local/elasticsearch/packages/{{ elasticsearch_packages }}.tar.gz"
dest: /usr/local/
- name: "unzip {{ elasticsearch_packages }}.tar.gz to /usr/local/"
unarchive:
src: "/usr/local/{{ elasticsearch_packages}}.tar.gz"
dest: /usr/local/
remote_src: yes
- name: "link file to {{ elasticsearch_packages }}"
file:
src: "/usr/local/{{ elasticsearch_packages.split('-')[0] }}-{{ elasticsearch_packages.split('-')[1] }}"
path: "{{ elasticsearch_install_dir }}"
state: link
- name: "set env"
copy:
content: "export PATH=/usr/local/elasticsearch/bin:$PATH"
dest: /etc/profile.d/elasticsearch.sh
- name: "mkdir {{ elasticsearch_data_dir }} and {{ elasticsearch_log_dir }}"
file:
path: "{{ item }}"
state: directory
mode: '0755'
become: yes
with_items:
- "{{ elasticsearch_data_dir }}"
- "{{ elasticsearch_log_dir }}"
- name: "chown {{ elasticsearch_data_dir }} and {{ elasticsearch_log_dir }} and /usr/local/{{ elasticsearch_packages.split('-')[0] }}-{{ elasticsearch_packages.split('-')[1] }}"
file:
path: "{{ item }}"
owner: "{{ elasticsearch_start_user }}"
group: "{{ elasticsearch_start_user }}"
recurse: yes
become: yes
with_items:
- "{{ elasticsearch_data_dir }}"
- "{{ elasticsearch_log_dir }}"
- "/usr/local/{{ elasticsearch_packages.split('-')[0] }}-{{ elasticsearch_packages.split('-')[1] }}"
- name: "copy elasticsearch conf"
template:
src: /usr/local/elasticsearch/conf/elasticsearch.yml.j2
dest: "{{ elasticsearch_install_dir }}/config/elasticsearch.yml"
owner: "{{ elasticsearch_start_user }}"
- name: "copy elasticsearch conf"
template:
src: /usr/local/elasticsearch/conf/elasticsearch.service.j2
dest: "/usr/lib/systemd/system/elasticsearch.service"
- name: "start elasticsearch"
service:
name: elasticsearch
state: started
enabled: yes
[root@ansible tasks]# cat main.yaml
- hosts: all
gather_facts: yes
vars_files:
- /usr/local/elasticsearch/vars/vars_elasticsearch.yaml
tasks:
- include: off_firewalld.yaml
- include: off_selinux.yaml
- include: init.yaml
- include: install_elasticsearch.yaml
Jinjia2模板文件
[root@ansible elasticsearch]# cat conf/elasticsearch.yml.j2
cluster.name: {{ cluster_name }}
node.name: {{ node_name }}
path.data: {{ elasticsearch_data_dir }}
path.logs: {{ elasticsearch_log_dir }}
network.host: {{ ansible_default_ipv4.address }}
http.port: {{ http_port }}
discovery.seed_hosts: {{ discocery_seed_hosts }}
cluster.initial_master_nodes: {{ cluster_initial_master_nodes }}
[root@ansible elasticsearch]# cat conf/elasticsearch.service.j2
[Unit]
Description=elasticsearch
After=network.target
[Service]
Type=simple
ExecStart={{ elasticsearch_install_dir }}/bin/elasticsearch
User=es
LimitNOFILE=131070
[Install]
WantedBy=multi-user.target
Vars文件
[root@ansible elasticsearch]# cat vars/vars_elasticsearch.yaml
---
elasticsearch_start_user: es
elasticsearch_packages: elasticsearch-7.5.0-linux-x86_64
elasticsearch_data_dir: /data/es/data
elasticsearch_log_dir: /data/es/log
elasticsearch_install_dir: /usr/local/elasticsearch
#elasticsearch.yaml
cluster_name: hello
http_port: 9200
discocery_seed_hosts: '["192.168.80.188","192.168.80.199"]'
cluster_initial_master_nodes: '["node-01", "node-02"]'
Inventory文件
[root@ansible elasticsearch]# cat elasticsearch_hosts
[elasticsearch]
192.168.80.188 node_name=node-01
192.168.80.189 node_name=node-02
[elasticsearch:vars]
ansible_ssh_user=root
ansible_ssh_pass=123
使用准备
更改vars文件中的一下部分
discocery_seed_hosts: '["192.168.80.188","192.168.80.199"]'
cluster_initial_master_nodes: '["node-01", "node-02"]'
添加要部署的节点IP,节点名称(对应hosts文件中的node_name变量)
执行playbook
[root@ansible elasticsearch]# cd /usr/local/elasticsearch
[root@ansible elasticsearch]# ansible-playbook -i elasticsearch_hosts tasks/main.yaml