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çin8500/tcp: HTTP API ve UI8600/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 keygenkomutuyla 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_expectneden ö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 membersveconsul operator raft list-peerskomutları 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.
