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:
- Sanal Makineleri Kurma: Her bir sunucuyu oluşturacak ve yapılandıracağız.
- Statik IP Atama: Sunuculara sabit IP adresleri atayarak, bağlantılarımızı güvence altına alacağız.
- Ansible Kurulumu ve Yapılandırması: Koordinatör makinemizde Ansible’ı kuracak ve makineleri birbirine bağlamak için gerekli yapılandırmaları yapacağız.
- Bağlantı Testi: Ansible ile makineler arası bağlantıyı test edeceğiz.
- 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 🙂