{"id":1145,"date":"2020-07-09T01:31:40","date_gmt":"2020-07-08T16:31:40","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1145"},"modified":"2020-07-11T00:39:14","modified_gmt":"2020-07-10T15:39:14","slug":"elasticsearch-zero-downtime-restart-with-ansible","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1145","title":{"rendered":"Elasticsearch rolling restart with Ansible"},"content":{"rendered":"<h1>Elasticsearch rolling restart with Ansible<\/h1>\n<p><code>Ansible<\/code> \uc744 \uc774\uc6a9\ud55c \ubb34\uc911\ub2e8 ES \ud074\ub7ec\uc2a4\ud130 \uc7ac\uc2dc\uc791\uc744 \uc124\uba85\ud569\ub2c8\ub2e4.<\/p>\n<h2>\ud30c\uc77c \uc0dd\uc131<\/h2>\n<pre><code class=\"language-bash\">mkdir inventory<\/code><\/pre>\n<pre><code class=\"language-bash\">vi inventory\/hosts\n\n[myelasticsearch]\nES01 ansible_ssh_host=127.0.0.1 ansible_user=elk\nES02 ansible_ssh_host=127.0.0.2 ansible_user=elk\nES03 ansible_ssh_host=127.0.0.3 ansible_user=elk\n\n[myelasticsearch:vars]\nansible_python_interpreter=\/usr\/bin\/python3<\/code><\/pre>\n<pre><code class=\"language-bash\">mkdir playbooks<\/code><\/pre>\n<pre><code class=\"language-bash\">vi playbooks\/task.yml\n\n---\n- name: do rolling restart of ES nodes\n  hosts: ES01\n  serial: 1\n  tasks:\n    - name: disable cluster routing\n      shell: &quot;curl -XPUT localhost:9200\/_cluster\/settings -H &#039;Content-Type: application\/json&#039; -d &#039;{\\&quot;transient\\&quot; : {\\&quot;cluster.routing.allocation.enable\\&quot; : \\&quot;none\\&quot; }}&#039;&quot;\n      args:\n        warn: false\n      register: result\n      until: result.stdout.find(&#039;&quot;acknowledged&quot;&#039;) != -1\n      retries: 200\n      delay: 3\n      changed_when: result.stdout.find(&#039;&quot;acknowledged&quot;:true&#039;) != -1\n\n    - name: do restart\n      become: yes\n      service: name=elasticsearch state=restarted\n\n    - name: wait for node to restart\n      shell: curl -I -s -m 2 http:\/\/localhost:9200 | head -n 1\n      args:\n        warn: false\n      register: result\n      until: result.stdout == &quot;HTTP\/1.1 200 OK&quot;\n      retries: 200\n      delay: 3\n\n    - name: enable cluster routing\n      shell: &quot;curl -XPUT localhost:9200\/_cluster\/settings -H &#039;Content-Type: application\/json&#039; -d &#039;{\\&quot;transient\\&quot; : {\\&quot;cluster.routing.allocation.enable\\&quot; : \\&quot;all\\&quot; }}&#039;&quot;\n      args:\n        warn: false\n      register: result\n      until: result.stdout.find(&#039;&quot;acknowledged&quot;&#039;) != -1\n      retries: 200\n      delay: 3\n      changed_when: result.stdout.find(&#039;&quot;acknowledged&quot;:true&#039;) != -1\n\n    - name: wait for cluster to stabilize\n      shell: curl -s -m 2 localhost:9200\/_cat\/health | cut -d &#039; &#039; -f 4\n      args:\n        warn: false\n      register: result\n      until: result.stdout.find(&quot;green&quot;) != -1\n      retries: 200\n      delay: 30<\/code><\/pre>\n<h2>\uc2e4\ud589<\/h2>\n<p>\uc811\uc18d\ud574\uc57c \ud558\ub294 elk \uacc4\uc815\uc740 sudo \uc774\uc6a9\uad8c\ud55c\uc774 \uc788\uc5b4\uc57c \ud558\uace0 \ub610 \ube44\ubc00\ubc88\ud638 \uc785\ub825\uc5c6\uc774 sudo \ub97c \uc774\uc6a9\ud560 \uc218 \uc788\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<pre><code class=\"language-bash\">ansible-playbook playbooks\/task.yml -i .\/inventory\/hosts<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Elasticsearch rolling restart with Ansible Ansible \uc744 \uc774\uc6a9\ud55c \ubb34\uc911\ub2e8 ES \ud074\ub7ec\uc2a4\ud130 \uc7ac\uc2dc\uc791\uc744 \uc124\uba85\ud569\ub2c8\ub2e4. \ud30c\uc77c \uc0dd\uc131 mkdir inventory vi inventory\/hosts [myelasticsearch] ES01 ansible_ssh_host=127.0.0.1 ansible_user=elk ES02 ansible_ssh_host=127.0.0.2 ansible_user=elk ES03 ansible_ssh_host=127.0.0.3 ansible_user=elk [myelasticsearch:vars] ansible_python_interpreter=\/usr\/bin\/python3 mkdir playbooks vi playbooks\/task.yml &#8212; &#8211; name: do rolling restart of ES nodes hosts: ES01 serial: 1 tasks: &#8211; name: disable cluster routing shell:\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=1145\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1145","post","type-post","status-publish","format-standard","hentry","category-elasticsearch"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1145","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1145"}],"version-history":[{"count":6,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1145\/revisions"}],"predecessor-version":[{"id":1160,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/1145\/revisions\/1160"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1145"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1145"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1145"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}