Etcd nedir? Nasıl Kurulur?
etcd, bir dağıtık sistem için güvenilir ve etkili bir anahtar-değer depolama çözümüdür. etcd, özellikle Kubernetes gibi konteyner orkestrasyon sistemleri için veri yönetimi için kullanılır.
etcd, Go dilinde yazılmış açık kaynaklı bir yazılımdır ve Raft konsensüs algoritmasını kullanır. etcd, birden fazla düğümün birbirleriyle iletişim kurarak, verilerin değiştirilmesi ve güncellenmesi gibi kritik işlemlerin gerçekleştirilmesinde tutarlılığı sağlar.
etcd, istemci uygulamaların anahtar-değer çiftleriyle çalışmasına olanak tanır ve anahtar-değer verilerini güvenli ve hızlı bir şekilde depolayabilir, okuyabilir ve yazabilir. Bu özellikler, özellikle veri bütünlüğünün önemli olduğu sistemlerde kullanım için idealdir.
ETCD Patroni İlişkisi
Patroni, PostgreSQL veritabanı sunucularının yüksek erişilebilirliği sağlamak için kullanılan bir araçtır. etcd, Patroni tarafından kullanılan bir veri depolama çözümüdür.
Patroni, birden fazla PostgreSQL sunucusu arasında otomatik failover ve yük dengeleme özellikleri sağlar. Bu, bir PostgreSQL sunucusunun çökmesi durumunda, diğer sunucuların hizmete devam etmesini sağlar ve kullanıcılara kesintisiz bir deneyim sunar. Patroni, etcd’yi, PostgreSQL sunucuları arasındaki durum bilgilerini ve yapılandırma ayarlarını depolamak için kullanır.
etcd, dağıtık sistemlerde güvenilir ve tutarlı anahtar-değer depolama çözümüdür. Patroni, PostgreSQL sunucuları arasındaki yapılandırma ayarlarının ve durum bilgilerinin depolanması ve güncellenmesi için etcd’yi kullanır. Bu sayede, bir PostgreSQL sunucusunun çökmesi durumunda, diğer sunucuların yeni bir lider seçmek için gerekli bilgilere erişebilmesi ve otomatik failover işlemlerinin sorunsuz bir şekilde gerçekleşebilmesi sağlanır.
Özetle, Patroni, PostgreSQL sunucuları arasındaki yüksek erişilebilirliği sağlamak için kullanılan bir araçtır ve etcd, Patroni tarafından kullanılan bir veri depolama çözümüdür.
ETCD KAÇ NODE OLMASI GEREKİYOR?
etcd, bir dağıtık sistem için güvenilir ve etkili bir anahtar-değer depolama çözümüdür. etcd kümesi oluştururken, kümenin boyutu önemli bir konudur. Bununla birlikte, doğru boyutlandırma, sistemin performansı ve veri bütünlüğü açısından önemlidir.
Genel olarak, etcd kümesindeki en az üç düğüm önerilir. Bu, çoğunluk oylaması ilkesi ile ilgili bir kuraldır. etcd, Raft konsensüs algoritmasını kullanır ve verilerin tutarlılığını sağlamak için çoğunluk oylaması kullanır. Bu nedenle, etcd kümesinde çoğunluk sayısı, kümenin en az yarısından bir fazla olmalıdır. Üç düğümlü bir kümede, bir düğüm çökse bile diğer iki düğüm veri bütünlüğünü sağlamak için yeterli olacaktır.
Daha büyük etcd kümesi, daha yüksek bir tolerans seviyesi sağlayabilir. Ancak, küme boyutu arttıkça yönetim zorlaşabilir ve daha fazla kaynak tüketebilir. Küme boyutu, kümenin kullanım senaryosuna ve kaynaklarına bağlı olarak değişebilir.
Özetle, en az üç düğümlü bir etcd kümesi önerilir, ancak küme boyutu kullanım senaryosuna ve kaynaklara bağlı olarak değişebilir.
Teknik bilgilerden sonra etcd kurulumuna geçelim.
Aşağıda belirtilen üç farklı sunucu da etcd cluster kurulumunu gerçekleştireceğiz.
Sunucu1: |
192.168.242.147 |
Sunucu2: |
192.168.242.148 |
Sunucu3: |
192.168.242.149 |
Bütün Nodelerda aşağıdaki kurulumları yapıyoruz.
apt update -y
apt-get install etcd -y
Kurulumları gerçekleştirdikten sonra aşağıdaki etcd konfigurasyon dosyasını düzenliyoruz.
Aşağıda belirtilen parametrelerin karşılığını tek tek bularak değiştirebilir ya da en son satıra gelerek boş yere ekleyebilirsiniz.
1.Sunucu Konfigurasyonu:
vi /etc/default/etcd
ETCD_NAME="etcd1"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.242.147:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.242.147:2380,etcd2=http://192.168.242.148:2380,etcd3=http://192.168.242.149:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.242.147:2379"
ETCD_ENABLE_V2="true"
systemctl restart etcd
2.Sunucu Konfigurasyonu:
vi /etc/default/etcd
ETCD_NAME="etcd2"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.242.148:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.242.147:2380,etcd2=http://192.168.242.148:2380,etcd3=http://192.168.242.149:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.242.148:2379"
ETCD_ENABLE_V2="true"
systemctl restart etcd
3. Sunucu Konfigurasyonu :
vi /etc/default/etcd
ETCD_NAME="etcd3"
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.242.149:2380"
ETCD_INITIAL_CLUSTER="etcd1=http://192.168.242.147:2380,etcd2=http://192.168.242.148:2380,etcd3=http://192.168.242.149:2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_ADVERTISE_CLIENT_URLS="http://192.168.242.149:2379"
ETCD_ENABLE_V2="true"
systemctl restart etcd
Yukarıdaki işlemler tamamlandıktan sonra cluster durumumuzu kontrol edelim.
Etcd memberların(sunucu) hangisi aktif kontrol edelim:
Cluster’ın sağlıklı çalışıp çalışmadığını görmek için aktif node olan 192.168.242.149 ip’li sunucunun etcd servisini restart edeceğiz ve etcd diğer node geçmiş mi kontrol edeceğiz.
systemctl restart etcd
Servisi durdurduğumuzda aktif node 192.168.242.147 sunucu olduğunu görüyoruz.
Etcd clusterımızı kurduk ve sorunsuz çalışıyor peki eklenen parametreler nedir ?
ETCD_NAME:
“etcd_name”, etcd kümesi içindeki bir düğümün benzersiz tanımlayıcısıdır. etcd kümesi, birden fazla düğümden oluşan bir grup etcd sunucusundan oluşur ve her düğümün etcd kümesinde benzersiz bir adı vardır.
etcd_name, her düğümün küme içinde benzersiz bir şekilde tanımlanmasını sağlar. Bu ad, etcd kümesindeki diğer düğümlerle iletişim kurarken kullanılır. etcd kümesi genellikle birden fazla sunucu içerdiğinden, her sunucunun benzersiz bir etcd_name değeri olması gerekir.
ETCD_DATA_DIR:
“ETCD_DATA_DIR”, etcd’nin verilerini depoladığı dizin yolunu belirten bir çevre değişkenidir. etcd, anahtar-değer çiftleri gibi verileri disk üzerinde depolar ve ETCD_DATA_DIR, bu verilerin nerede saklanacağını belirler.
ETCD_DATA_DIR, etcd sunucusunun yapılandırmasında belirtilir ve etcd’nin verilerini depolayacağı dizin yolunu belirler. Bu dizin, etcd tarafından kullanılan Raft konsensüs algoritması ve durum makinesi protokolü tarafından kullanılan verileri içerir.
ETCD_LISTEN_PEER_URLS:
“ETCD_LISTEN_PEER_URLS”, etcd kümesi içindeki bir düğümün diğer düğümlerle peer-to-peer bağlantıları için dinleyeceği URL’leri belirten bir çevre değişkenidir. etcd kümesindeki her düğüm, diğer düğümlerle peer-to-peer bağlantıları kurarak veri senkronizasyonu ve küme yönetimi işlemleri gerçekleştirir.
ETCD_LISTEN_PEER_URLS, etcd sunucusunun yapılandırmasında belirtilir ve etcd düğümünün diğer düğümlerle peer-to-peer bağlantılarını sağlamak için hangi URL’leri dinleyeceğini belirler. Bu URL’ler, diğer etcd düğümlerinin kendisiyle iletişim kurmasını sağlar.
ETCD_LISTEN_CLIENT_URLS:
“ETCD_LISTEN_CLIENT_URLS”, etcd sunucusunun diğer istemcilerle iletişim kurmak için dinleyeceği URL’leri belirten bir çevre değişkenidir. etcd, istemcilerin veri okuması, yazması ve sorgulaması için bir API sağlar ve ETCD_LISTEN_CLIENT_URLS, bu API’ye erişim sağlamak için hangi URL’leri dinleyeceğini belirler.
ETCD_LISTEN_CLIENT_URLS, etcd sunucusunun yapılandırmasında belirtilir ve etcd sunucusunun hangi URL’leri dinleyeceğini belirler. Bu URL’ler, diğer istemcilerin etcd API’sine erişmesini sağlar.
ETCD_INITIAL_ADVERTISE_PEER_URLS:
“ETCD_INITIAL_ADVERTISE_PEER_URLS”, bir etcd düğümünün kümedeki diğer düğümlere kendi peer-to-peer URL’lerini duyurmak için kullanacağı URL’leri belirten bir çevre değişkenidir. etcd kümesindeki her düğüm, diğer düğümlere kendi URL’lerini bildirerek veri senkronizasyonu ve küme yönetimi işlemleri gerçekleştirir.
ETCD_INITIAL_ADVERTISE_PEER_URLS, etcd sunucusunun yapılandırmasında belirtilir ve etcd düğümünün kümedeki diğer düğümlere duyuracağı peer-to-peer URL’lerini belirler. Bu URL’ler, diğer etcd düğümlerinin kendisiyle iletişim kurmasını sağlar.
ETCD_INITIAL_CLUSTER:
“ETCD_INITIAL_CLUSTER”, yeni bir etcd kümesi oluştururken kullanılan etcd düğümlerinin listesini belirten bir çevre değişkenidir. etcd kümesi, birden fazla etcd düğümünün bir araya gelerek bir veri depolama kümesi oluşturduğu bir yapıdır. ETCD_INITIAL_CLUSTER, bu düğümlerin küme oluşturma işlemi sırasında birbirleriyle nasıl bağlantı kuracaklarını belirlemeye yardımcı olur.
ETCD_INITIAL_CLUSTER, etcd sunucusunun yapılandırmasında belirtilir ve etcd kümesindeki diğer düğümler tarafından kullanılan peer-to-peer URL’lerini belirler. Bu URL’ler, etcd düğümlerinin birbirleriyle iletişim kurmasını sağlar ve veri senkronizasyonunu sağlar.
Bu, etcd kümesinde üç düğüm olduğunu ve her birinin peer-to-peer URL’lerinin yanı sıra bir ismi olduğunu belirtir. Bu isimler, düğümler arasındaki iletişimde kullanılır ve birbirinden benzersiz olmalıdır. Bu örnekte, kümedeki üç düğümün isimleri sırasıyla etcd1, etcd2 ve etcd3’tür.
ETCD_INITIAL_CLUSTER_STATE:
“ETCD_INITIAL_CLUSTER_STATE”, yeni bir etcd kümesinin durumunu belirten bir çevre değişkenidir. etcd kümesi, birden fazla etcd düğümünün bir araya gelerek bir veri depolama kümesi oluşturduğu bir yapıdır. ETCD_INITIAL_CLUSTER_STATE, etcd kümesinin oluşturma işlemi sırasında ilk durumunu belirlemeye yardımcı olur.
ETCD_INITIAL_CLUSTER_STATE değişkeni üç farklı değer alabilir:
“new“: Bu, yeni bir etcd kümesi oluşturulacağı anlamına gelir. Yeni bir küme oluşturulurken, tüm düğümler ETCD_INITIAL_CLUSTER_STATE değişkenini “new” olarak ayarlar.
“existing“: Bu, var olan bir etcd kümesinin tekrar başlatılacağı anlamına gelir. Mevcut bir küme yeniden başlatılırken, tüm düğümler ETCD_INITIAL_CLUSTER_STATE değişkenini “existing” olarak ayarlar.
“snapshot“: Bu, bir etcd yedeğinin geri yüklenmesi sırasında kullanılır. Bir yedek geri yüklenirken, tüm düğümler ETCD_INITIAL_CLUSTER_STATE değişkenini “snapshot” olarak ayarlar.
ETCD_INITIAL_CLUSTER_TOKEN:
“ETCD_INITIAL_CLUSTER_TOKEN”, yeni bir etcd kümesinin tanımlayıcısıdır. etcd kümesi, birden fazla etcd düğümünün bir araya gelerek bir veri depolama kümeleri oluşturduğu bir yapıdır. ETCD_INITIAL_CLUSTER_TOKEN, etcd kümesi oluşturma işlemi sırasında, tüm düğümlerin aynı küme için birbirlerini tanımlamalarına olanak tanır.
Her etcd kümesi, benzersiz bir ETCD_INITIAL_CLUSTER_TOKEN değerine sahip olmalıdır. Bu değer, küme düğümlerinin birbirlerini tanımlamak için kullandıkları bir “kimlik belgesi” gibi düşünülebilir.
ETCD_ADVERTISE_CLIENT_URLS:
“ETCD_ADVERTISE_CLIENT_URLS”, bir etcd düğümünün diğer düğümler ve istemciler tarafından kullanılacak olan URL’lerini belirten bir çevre değişkenidir. Bu değişken, etcd düğümünün IP adresi veya FQDN’si üzerinden erişilebilecek olan URL’leri belirlemek için kullanılır.
ETCD_ADVERTISE_CLIENT_URLS değişkeni, bir veya daha fazla URL’yi virgülle ayrılmış bir liste olarak belirtir. Bu URL’ler, diğer etcd düğümleri ve istemciler tarafından kullanılabilir olmalıdır.
ETCD_ENABLE_V2:
“ETCD_ENABLE_V2”, etcd sunucusunun v2 API’sinin etkinleştirilip etkinleştirilmeyeceğini belirleyen bir çevre değişkenidir. etcd v2 API’si, etcd sürüm 2.x’ten önce kullanımda olan bir API’dir.
ETCD_ENABLE_V2 değişkeni varsayılan olarak “false” değerine ayarlanmıştır, yani etcd v2 API’si etkinleştirilmez. Bu değişkeni “true” olarak ayarlayarak, etcd v2 API’sini etkinleştirebilirsiniz. Ancak, etcd sürüm 3.x’ten sonra, etcd v2 API’si resmi olarak kullanımdan kaldırılmıştır ve yeni uygulamalar etcd v3 API’sini kullanmalıdır.
ETCD_ENABLE_V2 değişkeninin kullanımı, eski etcd uygulamalarının etcd v2 API’sini kullanmaya devam etmek zorunda kaldığı durumlarda yararlıdır. Ancak, yeni uygulamaların etcd v3 API’sini kullanması önerilir, çünkü etcd v3 API’si daha performanslı ve daha güçlüdür.
Bu örnekte ekledik fakat yeni sürümü kullanmak için bu parametreyi silebilirsiniz.