DevOps

Ansible Nedir? Ansible ile Elasticsearch Kurulumu

Written by Burak Yılmaz

Ansible; otomasyon işlemleri için yaygın olarak kullanılan, python temelli bir otomasyon aracıdır. Ansible sayesinde istediğiniz herhangi bir komutu aynı anda, tek bir yerden yüzlerce bilgisayarda çalıştırabilirsiniz. Düşünsenize güncelleme yapmanız gereken 300 tane bilgisayar var, bir sürü vaktinizi harcarsınız değil mi? İşte Ansible ile bunu bir defa kod olarak yazıyoruz, daha sonra tek bir komutla tüm güncellemeleri yapıyoruz. Artık 300 bilgisayar mı 3000 bilgisayar mı olduğu bizi hiç ilgilendirmiyor.

Ansible; host ve playbook dosyaları üzerinden çalışır. Host dosyası içerisinde işlem yapacağımız makineleri tutarız. Playbooklar ise karmaşık işlemleri yaptığımız yaml formatındaki dosyalardır. Playbook içerisinde host dosyasında grupladığımız 10 tane makineyi önce güncelle, ardından hepsine elasticsearch yükle tadında işlemleri yazarız.

Ansible ile tüm alt yapımızı kod olarak yazabilir(Infrastrucute as Code) ve bunu bir git reposunda saklayabiliriz. Bu sayede hatalı kurulum vs gibi işlemlerdeki hata oranını da minimize etmiş oluruz.

Benim de ansible ile çok fazla tecrübem yok açıkcası. Çalıştığım firmada ansible ile elasticsearch clusterı kurmam gerekiyordu, araştıra araştıra izleye izleye kurmayı başardım. Adım adım sizlerle beraber de kuracağız. 


Demo ortamı hazırlanması :

Öncelikle daha sonraki çalışmalarda da kullanabileceğim bir demo ortamı oluşturarak işe başladım. Bunun için kendi bilgisayarımda sanal makineler oluşturdum.

  • https://www.virtualbox.org/ adresinden virtualbox’ı indiriniz.
  • https://www.osboxes.org/centos/ adresinden son Centos sürümü yüklü hazır imajı indiriniz.(İstediğiniz başka bir os de indirebilirsiniz.)
vm clone
  • Aynı şekilde target1,target2,target3 adında 3 adet vm daha çoğaltıyoruz. Oluşturduğumuz tüm makinelerin şifresi: osboxes.org olarak set edilmiştir.
  • Son adım olarak ansible-controller makinesine ansible’ı yükleyeceğiz. ansible-controller makinesine bağlanarak, terminal üzerinden aşağıdaki komutu çalıştırmamız yeterli olacaktır.
sudo yum install ansible

Host dosyasının hazırlanması :

  • Klonladığımız tüm makinelere bağlanarak ip’lerini alıyoruz ve onu bir yere yazıyoruz.(Daha sonra localden ssh yapmak için de kullanacağız.)
ifconfig
  • Şimdi ansible-controller makinesine localden ssh yapıp, elastic kurulumu için bir klasör oluşturacağız ve host bilgilerini(daha önce ip’leri yazmıştık) tutan dosyayı hazırlayacağız.

Playbook dosyasının hazırlanması :

  • ansible-controller makinesinde içerisinde bulunduğumuz klasör(elastic-installation) içerisinde roles adında bir klasör oluşturuyoruz.
  • Ardından bu klasör içerisinde ansible-elasticsearch reposunu çekiyoruz.
mkdir roles
cd roles
git clone https://github.com/elastic/ansible-elasticsearch.git
  • elastic-installation klasörü içerisnde playbook.yml adında bir dosya oluşturup içerisine aşağıdaki yaml formatındaki kodları yazıyoruz.
- name: Install Elasticsearch Master Node
  hosts: Elasticsearch-Master-Nodes #inventory dosyasında verdiğimiz node ismi
  roles:
    - role: ansible-elasticsearch
  vars:
    es_heap_size: "1g"
    es_config:
      cluster.name: "Test-cluster"
      cluster.initial_master_nodes:
        - "Test-Master-Node"
      node.name: "Mpl-Prod-Master-Node"
      discovery.zen.ping.unicast.hosts: "172.26.83.178" #master node ip
      discovery.zen.minimum_master_nodes: 1
      http.port: 9200
      transport.tcp.port: 9300
      network.host: "0.0.0.0" #{{ansible_host}}
      node.data: false
      node.master: true
      bootstrap.memory_lock: false
    es_plugins:
      - plugin: analysis-icu

- name: Install Elasticsearch Data Nodes
  hosts: Elasticsearch-Data-Nodes #inventory dosyasında verdiğimiz node ismi
  roles:
    - role: ansible-elasticsearch
  vars:
    es_heap_size: "1g"
    es_data_dirs:
      - "/opt/elasticsearch"
    es_config:
      cluster.name: "Test-cluster"
      node.name: "Test-Data-Node"
      discovery.zen.ping.unicast.hosts: "172.26.83.178" #master node ip
      discovery.zen.minimum_master_nodes: 1
      http.port: 9200
      network.host: "0.0.0.0" #{{ansible_host}}
      transport.tcp.port: 9300
      node.data: true
      node.master: false
      bootstrap.memory_lock: false
    es_plugins:
      - plugin: analysis-icu
  • Şu an yüklemeyi başlatmak için tüm dosyalarımız hazır. Ansible host dosyasındaki makineler bağlanırken ssh kullanır. Bunu rahat yapabilmesi için aşağıdaki dosyada “host_key_checking=false” config ayarını da yapmalıyız.
sudo vi /etc/ansible/ansible.cfg

Çalıştırmamız gereken tek bir komut kaldı. Sonrasında arkanıza yaslanıp ekrandaki kayan logları okuyabilirsiniz 🙂

ansible-playbook playbook.yml -i inventory.txt

Kodları aşağıdaki repodan indirebilirsiniz :
https://github.com/kbylmz/ansible-elasticsearch/tree/master

About the author

Burak Yılmaz