【无标题】

使用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

执行结果

在这里插入图片描述

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值