Ansible ile Trino Cluster Kurulumu

Ansible ile Trino: Kolayca Dağıtım Yapın!

Modern veri analiz araçlarından biri olan Trino, dağıtılmış sorgulama yetenekleri ile büyük veri kümeleri üzerinde performanslı işlemler sunar. Bu yazımızda, Ansible kullanarak Trino’yu bir koordinatör ve üç worker mimarisiyle nasıl kuracağınızı göstereceğim.

Yazımızda Neler Yapacağız?

Bu yazıda, Ansible’ı kullanarak sanal makineler üzerinde otomasyon yapacağız. Aşağıdaki adımları takip edeceğiz:

  1. Sanal Makineleri Kurma: Her bir sunucuyu oluşturacak ve yapılandıracağız.
  2. Statik IP Atama: Sunuculara sabit IP adresleri atayarak, bağlantılarımızı güvence altına alacağız.
  3. Ansible Kurulumu ve Yapılandırması: Koordinatör makinemizde Ansible’ı kuracak ve makineleri birbirine bağlamak için gerekli yapılandırmaları yapacağız.
  4. Bağlantı Testi: Ansible ile makineler arası bağlantıyı test edeceğiz.
  5. Trino Kurulumu: 1 koordinatör ve 3 worker node ile Trino kurulumu yapacağız. Trino’nun doğru şekilde çalışması için gerekli yapılandırmaları gerçekleştireceğiz

Başlayalım!

1. Sanal Makine Kurulumu

İlk adımda, sanal makinelerimizi oluşturacağız. Bu makineler, üzerinde uygulamalarımızı çalıştıracağımız ortamlar olacak, o yüzden doğru yapılandırmaları yapmamız çok önemli.

Hypervisor Seçimi

Sanal makineleri oluşturmak için bir hypervisor kullanmamız gerekiyor. Bu amaçla, VirtualBox, KVM veya VMware gibi araçlardan birini tercih edebilirsiniz. Ben bu yazıda VirtualBox üzerinden anlatacağım, ancak diğer araçlar da benzer şekilde çalışacaktır.

1.1 Sanal Makine Oluşturma

Sanal makinemizi oluşturduktan sonra, RAM miktarı, CPU sayısı ve disk boyutunu belirleyeceğiz. Genelde küçük projeler için 2 GB RAM, 1 CPU ve 20 GB disk yeterli olacaktır. Ancak, yükümlülüğünüz olan projeye göre bu değerleri arttırabilirsiniz.

Sonra, Rock Linux ISO dosyasını sanal makineye bağlayarak kurulum işlemini başlatıyoruz. Kurulum sırasında dil, klavye düzeni, ağ ayarları gibi temel yapılandırmalar yapılacak.

1.2 Rocky Linux Kurulumu

Kurulum sihirbazı sizi adım adım yönlendirecektir. Dil ve klavye düzeni seçiminin ardından, ağ ayarlarını da yapmayı unutmayın. Kurulum tamamlandığında, sistemi başlatıp kullanıma hazır hale getirebilirsiniz.

2. Statik IP Atama

Sanal makineler genellikle DHCP ile dinamik IP alır, ancak sabit bir IP adresi atamak, makinelerinizin her zaman aynı adres üzerinden erişilmesini sağlar. Bu, özellikle otomasyon ve ağ yönetimi için önemli.

2.1 Network Ayarlarını Düzenleme

Rock Linux’ta, statik IP ayarlarını yapmak için /etc/network/interfaces dosyasını açıyoruz. Bu dosya üzerinde aşağıdaki gibi bir yapılandırma yapmamız yeterli olacak:

auto eth0
iface eth0 inet static
    address 192.168.1.10
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 8.8.8.8 8.8.4.4

Burada, eth0 arayüzünü statik IP’ye ayarlıyoruz. address kısmında kendi belirlediğiniz IP’yi ayarlıyoruz. Örneğin, koordinatör makinesine 192.168.1.100, worker makinelerine ise 192.168.1.101, 192.168.1.102 gibi IP’ler verebilirsiniz. Bu IP’ler, makineler arasında sürekli bir bağlantı sağlar. Netmask ve gateway kısmını ise ağınızın yapılandırmasına uygun şekilde ayarlıyorsunuz.

2.2 Ağı Yeniden Başlatma

sudo systemctl restart networking

Bu komutla yapılan ayarların geçerli olmasını sağlıyoruz.

2.3 Bağlantıyı Test Etme

Yapılandırmanın doğru çalışıp çalışmadığını test etmek için ping komutunu kullanarak statik IP’yi kontrol edebilirsiniz:

ping 192.168.1.10

Eğer doğru şekilde yapılandırılmışsa, ping başarıyla çalışacak ve IP’niz doğru bir şekilde atanmış olacaktır.

3. SSH Bağlantısını Sağlama: ssh-copy-id Komutu

Ansible’ın çalışabilmesi için her bir makineye SSH ile bağlanabilmemiz gerekiyor. Ancak Ansible, her çalıştırdığı komut için her defasında şifre sormadan bağlanabilmelidir. Bunun için SSH anahtarlarını kullanacağız.

3.1 SSH Anahtarı Oluşturma

Öncelikle, Ansible kontrol makinesinde bir SSH anahtar çifti oluşturmanız gerekir:

ssh-keygen -t rsa

Bu komut, genellikle ~/.ssh/id_rsa ve ~/.ssh/id_rsa.pub dosyaları ile bir özel anahtar ve bir genel anahtar oluşturur.

3.2 Anahtarı Kopyalama: ssh-copy-id

Anahtar çiftini oluşturduktan sonra, ssh-copy-id komutunu kullanarak, kontrol makinenizdeki genel anahtarı diğer makinelerdeki ~/.ssh/authorized_keys dosyasına kopyalarız. Bu işlem, şifre sormadan SSH bağlantısı kurmamızı sağlar.

Örnek olarak, koordinatör ve worker makinelerine SSH anahtarımızı kopyalayalım:

ssh-copy-id worker1@192.168.1.101
ssh-copy-id worker2@192.168.1.102
ssh-copy-id worker3@192.168.1.103

Bu komut, kontrol makinesindeki genel SSH anahtarını belirttiğiniz IP adreslerine sahip makinelerin authorized_keys dosyasına ekler. Artık bu makinelerle şifre sormadan SSH bağlantısı kurabilirsiniz.

4. Ansible Yükleme

Şimdi, Ansible‘ı kurarak sanal makinelerimizi yönetmeye başlayacağız. Ansible, bizim için oldukça önemli bir araç çünkü otomatikleştirilmiş görevler ve yazılım dağıtımı yapmamızı sağlıyor.

4.1 Ansible Kurulumu

Koordinatör makinemizde Ansible’ı kuracağız. Bunun için, aşağıdaki komutları takip edelim:

sudo dnf install -y epel-release
sudo dnf install -y ansible

4.2 Envanter Dosyasını Oluşturma

Envanter dosyası, Ansible’ın hangi makineleri hedef alacağını belirtir. Ansible yapılandırmasında, makinelerin IP adreslerini ve hangi gruba ait olduklarını tanımlarız. /etc/ansible/hosts dosyasına aşağıdaki bilgileri ekleyelim:

# Koordinatör Makinesi
[coordinator]
coordinator1 ansible_host=192.168.1.100 ansible_user=root

# Worker makineleri
[workers]
worker1 ansible_host=192.168.1.101 ansible_user=worker1 
worker2 ansible_host=192.168.1.102 ansible_user=worker2
worker3 ansible_host=192.168.1.103 ansible_user=worker3

Bu dosyada, coordinator grubu koordinatör makinemizi, workers grubu ise worker makinelerimizi temsil ediyor.

4.3 Ansible Bağlantısını Test Edin

Ansible’ın worker’larla iletişim kurabildiğini test edelim:

ansible all -m ping

Her bir worker için şu şekilde bir çıktı almalısınız:

worker1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
worker2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
worker3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

5. Trino Kurulumu Ansible ile Nasıl Yapılır?

Trino’nun kurulumu, genellikle birden fazla sunucuya (koordinatör ve işçiler) ihtiyaç duyar. Trino’yu Ansible kullanarak 1 koordinatör ve 3 işçi sanal makinesi (VM) üzerinde kurmak için izlemeniz gereken adımları ve bir Ansible playbook’u örneğini bulacaksınız.

5.1 Sanal Makina ve Ağ Yapılandırması

Sanal Makinelerin Hazırlanması

  • Koordinatör (coordinator): Bu sanal makine, Trino’nun merkezi yöneticisi olacak ve gelen sorguları işçi makinelerine yönlendirecek.
  • İşçiler (workers): Bu makineler, Trino’nun paralel olarak sorguları işlediği makineler olacak.

Her bir sanal makineye statik (sabit) IP adresleri atadık. Bu, Ansible ile otomatik kurulum yapmayı kolaylaştıracaktır.

  • Koordinatör VM için IP: 192.168.1.100
  • İşçiler için IP’ler: 192.168.1.101, 192.168.1.102, 192.168.1.103

5.2 Ansible Playbook Yazma

Trino’yu kuracak bir Ansible playbook yazacağız. Bu playbook, Trino’nun hem koordinatör hem de işçi makinelerine kurulmasını sağlayacak.

Ansible playbook dosyasını Ansible kontrol makinenizde (Ansible yüklü olan sistemde) oluşturmanız gerekiyor. Genellikle, bu dosya Ansible projelerinde belirli bir düzen içerisinde tutulur. Bir yol şu şekilde olabilir:

Proje Klasörü: Bir proje klasörü oluşturun, örneğin trino-setup.

mkdir ~/trino-setup
cd ~/trino-setup

install_trino.yml Playbook’u:

---
- name: Install and Configure Trino 464
  hosts: all
  become: true

  tasks:
    #Java 23'ü yüklüyoruz
    - name: Install Java 23
      dnf:
        name: java-23-openjdk
        state: present

    
    - name: Install required dependencies
      dnf:
        name: 
          - wget
          - curl
        state: present

    
    - name: Download Trino 464
      get_url:
        url: "https://repo1.maven.org/maven2/io/trino/trino-server/464/trino-server-464.tar.gz"
        dest: "/tmp/trino-server-464.tar.gz"

    
    - name: Extract Trino 464
      unarchive:
        src: "/tmp/trino-server-464.tar.gz"
        dest: "/opt/"
        remote_src: yes

    
    - name: Create Trino configuration directory
      file:
        path: "/opt/trino-server-464/etc"
        state: directory
        mode: "0755"

    
    - name: Configure Trino coordinator
      when: inventory_hostname == "192.168.1.100"
      copy:
        src: "config/coordinator.properties"
        dest: "/opt/trino-server-464/etc/coordinator.properties"

    
    - name: Configure Trino worker
      when: inventory_hostname in groups['workers']
      copy:
        src: "config/worker.properties"
        dest: "/opt/trino-server-464/etc/worker.properties"

    
    - name: Create Trino systemd service file
      copy:
        dest: "/etc/systemd/system/trino.service"
        content: |
          [Unit]
          Description=Trino Server
          After=network.target

          [Service]
          User=root
          Group=root
          ExecStart=/opt/trino-server-464/bin/launcher start
          ExecStop=/opt/trino-server-464/bin/launcher stop
          Restart=always
          WorkingDirectory=/opt/trino-server-464
          LimitNOFILE=65536

          [Install]
          WantedBy=multi-user.target

    
    - name: Reload systemd daemon
      systemd:
        daemon_reload: yes

    
    - name: Start and enable Trino service
      systemd:
        name: trino
        state: started
        enabled: yes

Playbook’u proje klasörünün kök dizinine kayıt edelim.

5.3 Koordinatör ve İşçi Yapılandırmaları

Playbook’ta kullanılan coordinator.properties ve worker.properties gibi yapılandırma dosyalarını saklamak için bir config klasörü oluşturalım.

mkdir config

Koordinatör Yapılandırması (coordinator.properties): Bu dosya, koordinatör VM üzerinde Trino’nun nasıl çalışacağına dair ayarları içerir.

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB

İşçi Yapılandırması (worker.properties): İşçi makinelerinde çalışacak Trino’nun yapılandırma dosyasının içeriği:

coordinator=false
discovery.uri=http://192.168.1.100:8080
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB

coordinator.properties ve worker.properties’i  config dizinine kayıt edelim.

Dizin Yapısının Son Hali:

~/trino-setup/
├── config/
│   ├── coordinator.properties
│   ├── worker.properties
├── install_trino.yml

5.4 Trino’yu Başlatma

Ansible playbook’u, hem koordinatör hem de işçi makinelerine gerekli yapılandırma dosyalarını kopyalayacak ve Trino’yu başlatacaktır.

Trino’yu kurmak ve yapılandırmak için aşağıdaki komutla playbook’u çalıştıralım:

ansible-playbook -i /etc/ansible/hosts /home/bengisu/trino-setup/install_trino.yml -b -K

Bu komut, Trino’yu koordinatör ve işçi makinelerine kuracak ve yapılandıracaktır.

5.5 Trino’nun Çalışıp Çalışmadığını Kontrol Etme

Kurulum tamamlandıktan sonra, Trino’nun düzgün çalışıp çalışmadığını kontrol etmek için aşağıdaki komutları kullanabilirsiniz.

Koordinatörün durumu:

curl http://192.168.1.100:8080

Bir işçinin durumu:

curl http://192.168.1.101:8080

Eğer her şey doğru yapılandırılmışsa, Trino’nun ana sayfasını görmelisiniz.

6. Sonuç

Trino’yu Ansible ile kurmak, veri işleme ve sorgulama süreçlerinizi gerçekten daha hızlı ve verimli hale getirebilir. Ansible sayesinde her şey otomatikleşiyor ve kurulum süreci çok daha kolaylaşıyor. Eğer Trino kurulumunu başarıyla tamamladıysanız, büyük veri analizlerinizdeki hız farkını hissedeceksiniz. Yazıyı takip ederek adımları başarıyla geçtiniz, ama eğer herhangi bir noktada takılırsanız, yorumlar kısmında sorularınızı sorabilirsiniz, yardımcı olmaktan memnuniyet duyarım 🙂

 

Yazar Hakkında
Toplam 2 yazı
Bengisu Bostancı
Bengisu Bostancı
Bilgisayar Mühendisliği öğrencisiyim ve veri dünyasına büyük bir tutku duyuyorum. Özellikle veri mühendisliği, veri tabanları, Docker, Python ve SQL konularında hem öğrenmeyi hem de öğrendiklerimi paylaşmayı seviyorum. Şu anda, veri altyapılarının tasarımı, optimize edilmesi ve yönetimi üzerine çalışmalar yapıyorum.Blog yazılarımda, veri mühendisliğinin temellerinden ileri seviye pratiklere, Python ve SQL ile veri işlemeden Docker gibi araçlarla platform yapılandırmaya kadar çeşitli konularda içerikler sunmayı hedefliyorum. Amacım, veri mühendisliği alanına ilgi duyanlar için anlaşılır ve faydalı içerikler hazırlayarak bu alana katkı sağlamak.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara