美文网首页
Ansible部署系列:(八)安装Elasticsearch

Ansible部署系列:(八)安装Elasticsearch

作者: Anson_1f2a | 来源:发表于2021-06-11 11:35 被阅读0次

    8. 安装Elasticsearch

    8.1. 说明

    用于语料检索的服务器,使用到ik分词器插件。目录下的yml脚本支持集群搭建,但目前只使用了一个节点,安装在192.168.0.129这台机,以后可拓展。

    8.2. yml脚本

    ---
    - hosts: elasticsearchservers
      remote_user: root
      vars_files:
        - ../vars.yml
    
      tasks:
        - name: mkdir jdk directory  #创建安装目录
          file: path={{ INSTALL_DIR }} state=directory mode=0755
          
        - name: Create es group
          group: name=elastic state=present
    
        - name: Create es user
          user: name=elastic group=elastic
    
        - name: copy and unzip es
          unarchive:
            src: "{{ PLAYBOOK_DIR }}/files/elasticsearch-7.6.2-linux-x86_64.tar.gz"
            dest: "{{ INSTALL_DIR }}"
    
        - name: copy and unzip ik analysis
          copy:
            src: "{{ PLAYBOOK_DIR }}/files/elasticsearch-analysis-ik-7.6.2"
            dest: "{{ INSTALL_DIR }}/elasticsearch-7.6.2/plugins"
    
        - name: mkdir ditectory for logs data
          file:
            dest: "{{ ES_LOGS_PATH }}"
            mode: 0755
            state: directory
            owner: elastic
            group: elastic
    
        - name: mkdir ditectory for es data
          file:
            dest: "{{ ES_DATA_PATH }}"
            mode: 0755
            state: directory
            owner: elastic
            group: elastic
    
        - name: change owner and group
          file:
            path: "{{ INSTALL_DIR }}/elasticsearch-7.6.2"
            owner: elastic
            group: elastic
            recurse: yes
    
        - name: make elastic permission
          file:
            path: "{{ INSTALL_DIR }}/elasticsearch-7.6.2"
            mode: "a+x"
            recurse: yes
    
        - name: update limits.conf
          lineinfile:
            dest: /etc/security/limits.conf
            insertafter: "{{ item.position }}"
            line: "{{ item.value }}"
            state: present
          with_items:
            - { position: EOF, value: "* soft nofile 65535" }
            - { position: EOF, value: "* hard nofile 65535" }
    
        - name: install configuration file for es
          template:
            src: "{{ PLAYBOOK_DIR }}/elasticsearch/templates/elasticsearch.yml.j2"
            dest: "{{ INSTALL_DIR }}/elasticsearch-7.6.2/config/elasticsearch.yml"
    
        - name: Copy service script
          template:
            src: "{{ PLAYBOOK_DIR }}/elasticsearch/templates/elasticsearch.service.j2"
            dest: /usr/lib/systemd/system/elasticsearch.service
            owner: root
            group: root
            mode: "u=rw,g=r,o=r"
    
        - name: reload systemctl
          shell: systemctl daemon-reload
    
        - name: source env
          shell: source ~/.bashrc
    
        - name: firewarld add 9200
          firewalld:
            port: 9200/tcp
            permanent: true
            immediate: true
            zone: public
            state: enabled
        - name: firewarld add 9300
          firewalld:
            port: 9300/tcp
            permanent: true
            immediate: true
            zone: public
            state: enabled
    
        - name: cert util
          shell: "{{ INSTALL_DIR }}/elasticsearch-7.6.2/bin/elasticsearch-certutil cert -out config/elastic-certificates.p12 -pass \"\""
          run_once: true
    
        - name: change certificate owner and group
          file:
            path: "{{ INSTALL_DIR }}/elasticsearch-7.6.2/config/elastic-certificates.p12"
            owner: elastic
            group: elastic
          run_once: true
    
        - name: start es
          service:
            name: elasticsearch.service
            state: started
          run_once: true
          tags:
            - start elasticsearch
    

    7.3. j2模板配置

    7.3.1 elasticsearch.yml.j2

    节点配置文件

    # ======================== Elasticsearch Configuration =========================
    #
    # NOTE: Elasticsearch comes with reasonable defaults for most settings.
    #       Before you set out to tweak and tune the configuration, make sure you
    #       understand what are you trying to accomplish and the consequences.
    #
    # The primary way of configuring a node is via this file. This template lists
    # the most important settings you may want to configure for a production cluster.
    #
    # Please consult the documentation for further information on configuration options:
    # https://www.elastic.co/guide/en/elasticsearch/reference/index.html
    #
    # ---------------------------------- Cluster -----------------------------------
    #
    # Use a descriptive name for your cluster:
    #
    cluster.name: {{ ES_CLUSTER_NAME }}
    #
    # ------------------------------------ Node ------------------------------------
    #
    # Use a descriptive name for the node:
    #
    node.name: {{ es_node_name }}
    node.master: {{ es_node_master }}
    #
    # Add custom attributes to the node:
    #
    #node.rack: r1
    #
    # ----------------------------------- Paths ------------------------------------
    #
    # Path to directory where to store the data (separate multiple locations by comma):
    #
    path.data: {{ ES_DATA_PATH }}
    #
    # Path to log files:
    #
    path.logs: {{ ES_LOGS_PATH }}
    #
    # ----------------------------------- Memory -----------------------------------
    #
    # Lock the memory on startup:
    #
    #bootstrap.memory_lock: true
    #
    # Make sure that the heap size is set to about half the memory available
    # on the system and that the owner of the process is allowed to use this
    # limit.
    #
    # Elasticsearch performs poorly when the system is swapping the memory.
    #
    # ---------------------------------- Network -----------------------------------
    #
    # Set the bind address to a specific IP (IPv4 or IPv6):
    #
    network.host: {{ ansible_default_ipv4.address }}
    #
    # Set a custom port for HTTP:
    #
    http.port: 9200
    transport.tcp.port: 9300
    transport.tcp.compress: true
    #
    # For more information, consult the network module documentation.
    #
    # --------------------------------- Discovery ----------------------------------
    #
    # Pass an initial list of hosts to perform discovery when this node is started:
    # The default list of hosts is ["127.0.0.1", "[::1]"]
    #
    discovery.seed_hosts: [{% set comma = joiner(",") %}
    {% for item in groups['elasticsearchservers'] -%}
        {{ comma() }}"{{ hostvars[item].ansible_default_ipv4.address }}"
    {%- endfor %}
    ]
    #
    # Bootstrap the cluster using an initial set of master-eligible nodes:
    #
    cluster.initial_master_nodes: ["{{ hostvars[groups['elasticsearchservers'][0]].ansible_default_ipv4.address }}"]
    #
    # For more information, consult the discovery and cluster formation module documentation.
    #
    # ---------------------------------- Gateway -----------------------------------
    #
    # Block initial recovery after a full cluster restart until N nodes are started:
    #
    #gateway.recover_after_nodes: 3
    #
    # For more information, consult the gateway module documentation.
    #
    # ---------------------------------- Various -----------------------------------
    #
    # Require explicit names when deleting indices:
    #
    #action.destructive_requires_name: true
    thread_pool.write.queue_size: 1000
    xpack.security.enabled: true
    xpack.monitoring.enabled: true
    xpack.monitoring.collection.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: elastic-certificates.p12
    

    需注意的是,在elasticsearch.yml这个文件里有两个属性discovery.seed_hostscluster.initial_master_nodes需要使用IP地址而不能使用域名,否则启用会找不到主节点。

    7.3.2 elasticsearch.service.j2

    [Unit]
    Description=Elasticsearch
    Documentation=http://www.elastic.co
    Wants=network-online.target
    After=network-online.target
    
    [Service]
    Environment=ES_HOME={{ INSTALL_DIR }}/elasticsearch-7.6.2/
    Environment=ES_PID_DIR={{ INSTALL_DIR }}/elasticsearch-7.6.2/
    EnvironmentFile=-/etc/sysconfig/elasticsearch
    WorkingDirectory={{ INSTALL_DIR }}/elasticsearch-7.6.2/
    
    User=elastic
    Group=elastic
    
    ExecStart={{ INSTALL_DIR }}/elasticsearch-7.6.2/bin/elasticsearch -p ${ES_PID_DIR}/elasticsearch.pid
    
    StandardOutput=journal
    StandardError=inherit
    LimitNOFILE=65536
    LimitMEMLOCK=infinity
    TimeoutStopSec=0
    KillSignal=SIGTERM
    SendSIGKILL=no
    SuccessExitStatus=143
    
    [Install]
    WantedBy=multi-user.target
    

    7.4. 运行ansible-playbook

    ansible-playbook -i /etc/ansible/hosts elasticsearch/main.yml
    

    7.5. 安装成功

    若安装成功,则能看到最后一行显示节点状态[es-1] started

    image.png

    7.6. 设置密码

    从Elasticsearch 7开始,为提高安全性,安全认证已免费开放,需要使用交互式命令进行设置密码。

    /home/tools/elasticsearch-7.6.2/bin/elasticsearch-setup-passwords interactive
    

    输入完命令后启动有点慢,然后出现以下提示,输入y,按提示输入密码即可。

    image.png

    7.7. 查看节点状态

    浏览器输入地址http://192.168.0.129:9200/,根据提示输入用户名(elastic)和密码可看到节点相关信息

    7.8. 搭建集群

    该小节为集群搭建步骤,第一个脚本是启动主节点,start.yml脚本是把生成的证书和配置复制到其他节点的同目录下,然后再启动节点。

    ---
    - hosts: elasticsearchservers
      remote_user: root
      vars_files:
        - ../vars.yml
    
      tasks:
        - name: install rsync
          yum:
            name: rsync
            state: present
        - name: copy all config files except elasticsearch.yml
          synchronize:
            src: "{{ INSTALL_DIR }}/elasticsearch-7.6.2/config"
            dest: "{{ INSTALL_DIR }}/elasticsearch-7.6.2"
            rsync_opts:
              - "--exclude=elasticsearch.yml"
          when: inventory_hostname != groups['elasticsearchservers'][0]
          
        - name: start es
          service:
            name: elasticsearch.service
            state: started
          when: inventory_hostname != groups['elasticsearchservers'][0]
          tags:
            - start elasticsearch
    

    相关文章

      网友评论

          本文标题:Ansible部署系列:(八)安装Elasticsearch

          本文链接:https://www.haomeiwen.com/subject/kttceltx.html