Takip et

Ön Hazırlık ve Kurulum

Bu rehber, Consul’u Ubuntu 14.04 işletim sistemi üzerinde bir üretim ortamında nasıl yapılandıracağınızı ve dağıtacağınızı adım ad

Bu rehber, Consul’u Ubuntu 14.04 işletim sistemi üzerinde bir üretim ortamında nasıl yapılandıracağınızı ve dağıtacağınızı adım adım açıklamaktadır. Ubuntu 14.04 eski bir işletim sistemi olmasına rağmen, mevcut altyapılar nedeniyle bu platformda Consul’u kurma ihtiyacı duyan kullanıcılar için pratik bilgiler sunmayı amaçlamaktadır. Consul, dağıtık sistemler için hizmet keşfi, sağlık kontrolü ve anahtar-değer depolama gibi kritik işlevleri sağlayan güçlü bir araçtır.

Ön Hazırlık ve Kurulum

Consul kurulumuna başlamadan önce sisteminizde bazı temel hazırlıklar yapmanız gerekmektedir. Bu adımlar, Consul’un güvenli ve verimli bir şekilde çalışmasını sağlamak için önemlidir.

Sistem Güncellemesi ve Temel Araçların Kurulumu

Öncelikle, sisteminizin güncel olduğundan emin olun ve gerekli bazı araçları yükleyin:

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y unzip curl wget

Consul Kullanıcısı ve Dizinlerinin Oluşturulması

Güvenlik amacıyla Consul’u ayrı bir sistem kullanıcısı altında çalıştırmak en iyi pratiktir. Ayrıca, Consul’un yapılandırma dosyaları ve veri dizinleri için özel konumlar oluşturacağız.

sudo useradd --system --home /etc/consul.d --no-create-home --shell /bin/false consul
sudo mkdir -p /etc/consul.d
sudo mkdir -p /var/lib/consul
sudo chown -R consul:consul /etc/consul.d
sudo chown -R consul:consul /var/lib/consul

Consul’un İndirilmesi ve Kurulumu

Consul’u HashiCorp’un resmi web sitesinden indireceğiz. Sürüm numarasını en güncel kararlı sürümle değiştirmeniz önerilir.

# En güncel Consul sürümünü kontrol edin: https://releases.hashicorp.com/consul/
CONSUL_VERSION="1.8.0" # Örnek sürüm, güncel olanı kullanın
wget https://releases.hashicorp.com/consul/${CONSUL_VERSION}/consul_${CONSUL_VERSION}_linux_amd64.zip
unzip consul_${CONSUL_VERSION}_linux_amd64.zip
sudo mv consul /usr/local/bin/
sudo chmod +x /usr/local/bin/consul
rm consul_${CONSUL_VERSION}_linux_amd64.zip

Kurulumun başarılı olup olmadığını kontrol etmek için:

consul --version

Firewall (UFW) Ayarları

Consul, küme üyeleri ve istemcilerle iletişim kurmak için belirli portları kullanır. Güvenlik duvarınızda bu portları açmanız gerekmektedir.

  • 8300/tcp: Sunucular arası RPC trafiği (Consul server RPC)
  • 8301/tcp: Küme üyeleri arası LAN gossip (Serf LAN)
  • 8302/tcp: Küme üyeleri arası WAN gossip (Serf WAN) – birden fazla veri merkezi için
  • 8500/tcp: HTTP API ve UI
  • 8600/udp: DNS sorguları
sudo ufw allow 8300/tcp comment 'Consul Server RPC'
sudo ufw allow 8301/tcp comment 'Consul LAN Gossip'
sudo ufw allow 8302/tcp comment 'Consul WAN Gossip'
sudo ufw allow 8500/tcp comment 'Consul HTTP API and UI'
sudo ufw allow 8600/udp comment 'Consul DNS'
sudo ufw enable # Eğer UFW etkin değilse
sudo ufw status

Consul Sunucu ve İstemci Konfigürasyonu

Consul iki ana modda çalışabilir: sunucu ve istemci. Üretim ortamında genellikle birden fazla sunucu (quorum oluşturmak için) ve çok sayıda istemci (uygulamaların çalıştığı yerlerde) bulunur.

Temel Yapılandırma Dosyası

Tüm Consul yapılandırmaları /etc/consul.d/config.json dosyasında veya bu dizindeki diğer .json dosyalarında yapılır. JSON formatı kullanılır.

Consul Sunucu Yapılandırması

Bir Consul sunucusu kümenin durumunu korur ve tüm veriyi depolar. Üretim ortamında yüksek erişilebilirlik için en az 3 veya 5 sunucu kullanılması önerilir.

# /etc/consul.d/config.json (Sunucu için örnek)
{
  "datacenter": "dc1",
  "data_dir": "/var/lib/consul",
  "log_level": "INFO",
  "node_name": "consul-server-01",
  "server": true,
  "bootstrap_expect": 3,
  "bind_addr": "192.168.1.10", # Sunucunun IP adresi
  "client_addr": "127.0.0.1 192.168.1.10", # API'nin dinleyeceği adresler
  "ui": true,
  "encrypt": "YOUR_ENCRYPTION_KEY",
  "acl": {
    "enabled": true,
    "default_policy": "deny",
    "enable_token_persistence": true,
    "tokens": {
      "master": "YOUR_MASTER_ACL_TOKEN"
    }
  }
}
  • datacenter: Bu sunucunun ait olduğu veri merkezinin adı.
  • data_dir: Consul’un verilerini (RAFT logları, KV verileri vb.) depolayacağı dizin.
  • node_name: Küme içindeki bu düğümün benzersiz adı.
  • server: true: Bu düğümün bir Consul sunucusu olduğunu belirtir.
  • bootstrap_expect: Kümenin ilk başlatılması sırasında beklenen sunucu sayısı. Bu değer, küme başlatıldıktan sonra değiştirilmemelidir. Çok önemlidir! Yanlış yapılandırma veri kaybına yol açabilir.
  • bind_addr: Küme üyeleri arasındaki iletişimin gerçekleşeceği IP adresi.
  • client_addr: HTTP API, DNS ve RPC arayüzlerinin dinleyeceği adresler. Hem localhost hem de sunucunun IP’sini eklemek, diğer makinelerden erişim sağlar.
  • ui: true: Consul Web UI’sini etkinleştirir. Üretimde erişimi kısıtlamak önemlidir.
  • encrypt: Gossip trafiğini şifrelemek için kullanılan bir anahtar. consul keygen komutuyla oluşturulur.
  • acl: Erişim kontrol listelerini etkinleştirir. Üretim ortamlarında güvenlik için şiddetle tavsiye edilir.

Şifreleme anahtarı oluşturmak için:

consul keygen

ACL ana token’ı oluşturmak için:

consul acl bootstrap

Bu komut, master token’ı yalnızca ilk kez çalıştırıldığında oluşturur ve size gösterir. Bu token’ı güvenli bir yerde saklayın.

Consul İstemci Yapılandırması

Consul istemcileri, hizmetleri kaydeden, sağlık kontrolleri yapan ve sunuculara proxy görevi gören hafif düğümlerdir. Genellikle uygulama sunucularında çalışırlar.

# /etc/consul.d/config.json (İstemci için örnek)
{
  "datacenter": "dc1",
  "data_dir": "/var/lib/consul",
  "log_level": "INFO",
  "node_name": "consul-client-01",
  "server": false,
  "bind_addr": "192.168.1.20", # İstemcinin IP adresi
  "client_addr": "127.0.0.1 192.168.1.20",
  "retry_join": ["192.168.1.10", "192.168.1.11", "192.168.1.12"] # Sunucu IP'leri
}
  • server: false: Bu düğümün bir Consul istemcisi olduğunu belirtir.
  • retry_join: İstemcinin katılmaya çalışacağı Consul sunucularının IP adreslerinin bir listesi. Bu, istemcinin bir veya daha fazla sunucuya otomatik olarak katılmasını sağlar.

Consul Servisini Başlatma (Upstart ile)

Ubuntu 14.04 genellikle Upstart kullanır. Consul’u bir servis olarak başlatmak için /etc/init/consul.conf dosyasını oluşturun:

# /etc/init/consul.conf
description "Consul agent"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5

setuid consul
setgid consul

exec /usr/local/bin/consul agent -config-dir=/etc/consul.d -data-dir=/var/lib/consul

Servisi başlatın:

sudo service consul start
sudo service consul status

Logları kontrol etmek için:

tail -f /var/log/upstart/consul.log

Yüksek Erişilebilirlik ve Küme Oluşturma

Consul, yüksek erişilebilirlik sağlamak için bir RAFT konsensüs algoritması kullanır. Üretim ortamında bu, veri bütünlüğü ve hizmet sürekliliği için kritik öneme sahiptir.

Quorum Kavramı

Bir Consul kümesinde, sunucuların çoğunluğu (quorum) çalışır durumda olmalıdır. Bu, N/2 + 1 kuralıyla belirlenir. Örneğin:

  • 3 sunucu için: 2 sunucu ayakta kalmalı.
  • 5 sunucu için: 3 sunucu ayakta kalmalı.

Bu nedenle, üretimde tek bir sunucu yerine her zaman tek sayıda (3 veya 5) sunucu kullanılması önerilir.

Küme Oluşturma ve Düğümleri Katma

1. İlk Consul Sunucusunu Başlatma:

bootstrap_expect değeri 3 olarak ayarlanmış ilk sunucuyu yukarıdaki Upstart servisi ile başlatın. Bu sunucu, diğer sunucuların katılmasını bekleyecektir.

2. Diğer Sunucuları Kümenize Katma:

Diğer Consul sunucularının yapılandırma dosyalarını (bootstrap_expect değeri aynı olmalı) oluşturun ve servislerini başlatın. Ardından, ilk sunucuya katılmalarını sağlayın:

# Diğer sunucular için
sudo service consul start
consul join 192.168.1.10 # İlk sunucunun IP adresi

Veya config.json dosyasında start_join veya retry_join parametrelerini kullanarak otomatik katılmayı sağlayabilirsiniz. Üretimde retry_join tercih edilir.

# /etc/consul.d/config.json (Diğer sunucular için, retry_join ile)
{
  "datacenter": "dc1",
  "data_dir": "/var/lib/consul",
  "log_level": "INFO",
  "node_name": "consul-server-02",
  "server": true,
  "bootstrap_expect": 3,
  "bind_addr": "192.168.1.11",
  "client_addr": "127.0.0.1 192.168.1.11",
  "ui": true,
  "encrypt": "YOUR_ENCRYPTION_KEY",
  "acl": {
    "enabled": true,
    "default_policy": "deny",
    "enable_token_persistence": true,
    "tokens": {
      "master": "YOUR_MASTER_ACL_TOKEN"
    }
  },
  "retry_join": ["192.168.1.10"] # İlk sunucunun IP adresi
}

3. İstemcileri Kümenize Katma:

İstemci düğümlerini başlatın. retry_join parametresini kullanarak sunucu IP adreslerini belirtin:

# İstemciler için
sudo service consul start

Küme Durumunu Kontrol Etme

Herhangi bir Consul sunucusundan küme üyelerini listeleyebilirsiniz:

consul members

Consul sunucularının RAFT durumunu kontrol etmek için:

consul operator raft list-peers

Lideri ve takipçileri göreceksiniz. Liderin sağlıklı olduğundan emin olun.

Consul’u Yönetme ve İzleme

Üretim ortamında Consul’un sürekli izlenmesi ve yönetilmesi önemlidir.

Web Kullanıcı Arayüzü (UI)

Eğer ui: true olarak ayarlandıysa, http://:8500 adresinden Consul UI’ye erişebilirsiniz. Bu arayüz, kayıtlı hizmetleri, düğümleri ve sağlık kontrollerini görselleştirmek için kullanışlıdır.

Sağlık Kontrolleri

Consul, hizmetlerinizin durumunu izlemek için sağlık kontrolleri sunar. Bu kontrolleri hizmet tanımlarınıza ekleyerek Consul’un bir hizmetin sağlıklı olup olmadığını otomatik olarak belirlemesini sağlayabilirsiniz.

# /etc/consul.d/web.json (Örnek hizmet tanımı)
{
  "service": {
    "id": "web-service",
    "name": "web",
    "tags": ["frontend"],
    "address": "192.168.1.20",
    "port": 80,
    "check": {
      "http": "http://192.168.1.20:80/health",
      "interval": "10s",
      "timeout": "1s"
    }
  }
}

Bu dosyayı bir istemci düğümüne yerleştirdikten sonra Consul servisini yeniden başlatın veya consul reload komutunu çalıştırın. Consul, her 10 saniyede bir /health endpoint’ine HTTP isteği göndererek hizmetin durumunu kontrol edecektir.

Loglama

Consul’un loglarını düzenli olarak kontrol etmek, sorun giderme ve sistem sağlığı için hayati önem taşır. Upstart yapılandırmasında loglar genellikle /var/log/upstart/consul.log konumuna yazılır.

Yedekleme

Consul sunucularındaki data_dir içeriği düzenli olarak yedeklenmelidir. Bu, felaket durumunda kümenin kurtarılması için önemlidir. consul snapshot save ve consul snapshot restore komutları bu amaçla kullanılabilir.

consul snapshot save backup.snap
consul snapshot restore backup.snap

Sonuç ve Sıkça Sorulan Sorular

Bu rehber, Consul’u Ubuntu 14.04 üzerinde üretim ortamında kurmak ve yapılandırmak için gerekli temel adımları ve pratik bilgileri sağlamıştır. Güvenlik (şifreleme, ACL), yüksek erişilebilirlik (quorum) ve izleme gibi konulara dikkat ederek, Consul’un dağıtık altyapınız için sağlam bir temel oluşturmasını sağlayabilirsiniz. Unutmayın, üretim ortamında her zaman en güncel güvenlik yamalarını ve kararlı Consul sürümlerini kullanmanız önerilir.

Sıkça Sorulan Sorular (SSS)

Consul hangi portları kullanır?
Temel olarak 8300 (sunucu RPC), 8301 (LAN gossip), 8302 (WAN gossip), 8500 (HTTP API/UI) ve 8600 (DNS) portlarını kullanır. Güvenlik duvarınızda bu portları açmanız gerekir.
Sunucu ve istemci arasındaki fark nedir?
Consul sunucuları, kümenin durumunu korur, RAFT konsensüsünü çalıştırır ve tüm veriyi depolar. İstemciler ise hizmetleri kaydeden, sağlık kontrolleri yapan ve sunuculara proxy görevi gören hafif düğümlerdir.
bootstrap_expect neden önemlidir?
Bu parametre, bir Consul kümesinin ilk kez başlatılması sırasında beklenen sunucu sayısını belirtir. Yanlış ayarlanması, kümenin kilitlenmesine veya veri kaybına yol açabilir. Küme başlatıldıktan sonra değiştirilmemelidir.
Üretimde kaç Consul sunucusu kullanmalıyım?
Yüksek erişilebilirlik için tek sayıda sunucu kullanılması önerilir. En az 3, ideal olarak 5 sunucu, quorum kaybı riskini azaltır.
Consul’u izlemek için ne yapmalıyım?
Consul UI, consul members ve consul operator raft list-peers komutları ile küme sağlığını izleyebilirsiniz. Ayrıca logları düzenli kontrol etmek ve Prometheus/Grafana gibi araçlarla entegrasyon düşünmek önemlidir.
Ubuntu 14.04 neden bu rehberde kullanıldı?
Bu rehber, özel bir talep üzerine Ubuntu 14.04 için hazırlanmıştır. Genel olarak, yeni üretim dağıtımları için daha güncel ve desteklenen bir işletim sistemi (örneğin Ubuntu 18.04 veya 20.04) kullanılması şiddetle tavsiye edilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık