Sunucu yönetimi #2
Selamlar tekrardan, Sunucu yönetimi #1'de konumuz bir sunucuya birden fazla farklı node kurulur mu, kurulursa nasıl kurulurun donanım kısmıydı, eğer #2'den başladıysanız okumaya öncelikle buradan #1'i okumanızı tavsiye ederim.
#2'ye şu şekilde başlamak istiyorum, hocam #1 de ki ve #2'de ki koşullar sağlandığı taktirde biz 2. farklı node'u cihazımıza kurmaya başlamadan önce bir şey yapmamız gerekir mi?
Bununla başlayalım..
Hazırlık gerekir mi?
Aslında hem evet hem hayır, bazı nodelarda ayrı screen gerekir, bazı node'larda ayrı 'kullanıcı' gerekir.. mesela genellikle biz root içersinde işlemleri gerçekleştiririz fakat bazen farklı kullanıcı da devam etmek avantajken bazende dezavantaj olabiliyor.
Daha da uzatabilirim bu konuyu lakin, zaten ben repolarda ön hazırlıkları sağlıyorum, açıkcası çokta bir şey yapmanıza gerek yok nadir istisnalar hariç.
Şimdi donanıım konusunu bitirdik, portlara geçelim.
Portlar
Portlar bir protokoldür, protokoller gibi çalışır, 0'dan 65535'e kadar değerlere bölünebilir. Portların en temel işi, tercih edilen protokol aracılığı ile veri alışverişi yapmaktır. Her bir port farklı bir numaraya sahiptir ve her cihazın sahip olduğu IP adresi bu portlarla eşleşir. Haliyle IP'lerimiz aynı anda farklı portları/protokolleri kullanabilir.
Sık kullandığımız portlar:
- SSH portu - 22, bu SSH protokolünü kullanmamız için gerekli olan porttur.
- SFTP portu - 22, bu protokolde 22 portunu kullanır, farkı nedir?..
- FTP portu - 21, FTP, file transfer protokolüdür, FTP ile SFTP farkını yukarıdan anlayabilirsiniz.
- HTTP portu - 80, bilirsiniz web sayfalarının görüntülenmesi için kullanılan porttur.
- 8000, 9000, 26657, 36667 gibi say say bitmeyecek nice port var. Hepsini bilmek zorunda değilsiniz.
Bu portların (numaraların) birde protokol tanımı vardır, TCP ve UDP, şimdilik buna ihtiyacınız olmadığı için anlatmıyorum ama genellikle port açarken TCP açarız, UDP'de açılabilir.
Port açmayı anlatmayacağım çünkü ihtiyacımız olduğunda kullanırız ve kritik bir konudur, ben port analizini çok kısa anlatacağım, tıpkı donanımda yaptığım gibi:
İlk olarak lsof ile başlayalım:
sudo lsof -i -P -n | grep LISTEN
Görselde de gördüğünüz gibi ben lsof ile cihazımda 'LISTEN' olan portları görebiliyorum, nedir bu LISTEN? 2. satırdaki port ile örnek verelim:
ngnix protokolü, root kullanıcısında, IPv6'mi (External - Public IP) kullanarak TCP protokolü ile 80 portumu Dinliyor/Kullanıyor. Kısacası; LISTEN mevcut kullanılan portları gösterir.
Açık olan ama kullanılmayan portlar gibi ihtiyacınız olmayan teknik durumlar içinse netstat -tulpn gibi commandları (komutları) kullanabilirsiniz. Bunu da anlatacaktım fakat gereksiz şimdilik.
Yukarıda dediğim gibi şimdilik port açma kapamayı bir kenara bırakıp dikkat etmemiz gerekenlere, ana konumuzda bakalım:
X node'u 8000 portunu kullanıyorsa ve içersinde donanım yetmesine rağmen 8000 portunu kullanan farklı bir node kurmak isterseniz maalesef sadece 1 IPv4'ünüz varsa içersine aynı node'u kuramazsınız. Birden fazla IPv4'ünüzün olup olmadığınızı nasıl bileceksiniz kısmıda zaten bu bilgiye sahip birisi portları yönetebiliyordur. Ayrıca satın almadığımız taktirde hep 1 public IP'imiz vardır.
Lakin bu kadarla bitmiyor bazı durumlarda portları değiştirme gibi çözümlerimiz var, mesela X node'u 26657 kullanıyorken bunu 26656'ya (ayrıca desteklenmesi lazım o proje tarafından) çekebiliriz. Peki port değişimini nasıl yaparız? Bu da projeden projeye çok değişken mesela Cosmoslar için buradan öğrenebilirsiniz. Burada ihtiyacınız olduğunda bana veya proje ekiplerine sormak daha iyi olacaktır hepsini bilmeniz mümkün değil.
Kısacası portlar çakışmamalı, kontrolü bir nebze sağlanmalı.. Ben artık repolarımda eğer port problemi varsa her node'un hangi portları dinlediğini size yazarım, siz kurup denemek zorunda kalmazsınız.
Kütüphaneler - Paketler
Bir diğer kontrol etmemiz gereken konulardan bir diğeri ise cihazlarımızdaki yazılımlar ve bunların beraberinde getirdiği SDK'ler ve kütüphaneler. Bu örnekleri say say bitiremeyiz ama en sık karşılaştıklarımızdan örnek vereyim:
Docker, docker çok kapsamlıdır arkadaşlar, bunun yönetimini bir blog post'ta anlatmam mümkün değil, bu pakete özgün eğitimler vardır, çokta hoştur bilmesi. Aslında burada Docker'ın olmasının nedeni Docker'in karıştırılması.. ne demek bu?
Docker sıklıkla kullandığımız kısmında birde Docker Compose vardır, birbirlerinden farklıdırlar ama birbirilerini tamamlarlar. Basit ifadeyle, Docker konteynerları yönetmek (muhim olanda budur konumuz için) için kullanırken Docker Compose çoklu konteynerları ve YAML gibi muhim dosyaları yönetmek için vardır. Yani her Docker kullandığımız projede Compose, her Compose kullandığımızda Docker kullanmayız.
Peki biz nasıl anlayacağız ve 2 tane Docker paketi kullanan node yan yana çalışır mı çalışmaz mı? Bu konuda kapsamlı bilgiye sahip olmadığınız taktirde öğrenmek için ya bana sormak yada deneye yanıla yöntemi ile kavrayabileceğiniz bir konudur. Zaten bir süredir burada olanlara öğretebilidiğimi düşünüyorum, lafım ona yeni gelen ve bu konuda hakim olmayan arkadaşlaradır.
Benzer konu rustup ve nodejs gibi kütüphanelerde de vardır fakat hepsine hakimiyeti sağlamak bu postta yapabileceğim bir şey değil şimdilik.
Ayrıca bu paketlerinde sürümleri vardır, her node aynı sürüm pakette çalışmaz, bu da ayrı uzun bir konu.
OS (İşletim Sistemi)
Sanırım bu serinin son konusu Operating system (İşletim Sistemi - OS).
İşletim sistemine girmeden önce kafa karışıklığı yaratan bir konuyu hemen açığa kavuşturalım.
Bizler Linux'a da işletim sistemi diyoruz, Ubuntu'ya da Debian'a da, birbirlerinden farklı şeyler mi? Hem evet hem hayır.. Anlatıyorum:
Linux aslında bir İşletim Sistemi Ailesidir - Linux bir çok alanda çok kullanışlı ve keyiflidir MacOS bazı zamanlar Linux'dan esinlenmiştir mesela. Linux bir Aile ise, Ubuntu nedir?
Ubuntu, Linux tabanlı bir işletim sistemidir. Linux genel bir terim iken, Ubuntu üzerinde inşa edilmiş Debian'dan esinlenilmiş (Aslında tabanlı), Debian'nın daha performanslı bir versionudur.
Baktımda, 2 cümle ile anlatabilidiğime şaşırdım ve sorularınız varsa sorun bana lütfen.
Bizim işletim sistemi konusunda dikkat etmemiz gereken hususlar nelerdir?
Her node her işletim sisteminde çalışmaz, hangi OS destekliyorsa onu kullanmak gerekir, Debian'da çalışan node Ubuntu desteklemediği taktirde Ubunutu'da çalıştırmamız imkansız değildir ama zordur. Ayrıca Bu OS'larında bir sürümü vardır, en popülerlerinden:
- Debian: 10, 11, 12
- Ubuntu: 20.04, 22.04, 23.10
22.04 ve üstü destekleyen bir node'u 20.04'de çalıştıramazsınız, hal böyleyken benim tavsiyem Ubuntu kullanıyorsanız 22.04, Debian'da 12 versionlarını ağırlıklı olarak tercih etmek en mantıklısıdır. Bazı firmalar genellikle 18 ve 20 gibi Ubuntu versionları mevcuttur cihazlarında, bunlardan kaçmak gerekir.
lsb ile kolayca OS versionlarınıza ve neyi kullandığınıza bakabilirsiniz.
lsb_release -a
Son sözler
Version demişken aklıma bir konu daha geldi, makine mimarisine de değineyim ve bitireyim.
Cihazlarımız farklı architecture (makine mimarisi) sahiptir ve burada şaşmamız gereken mimari
x86 ve 64 bittir, kısaca x86_64 idir. Çok teknik bir konu ama ağırlıklı olarak cihazlarınız x86_64 olmak zorunda aksi halde nodelarınız çalışmayabilir, karmaşık bir süreç
Bu komut ile mimarinizi öğrenebilirsiniz:
uname -m
Tam sonuna geldik diyorum aklıma yeni konular geliyor, hadi bunuda anlatayım:
Özellikle donanım konusunda X makinesinde ki 4 vCPU 8 RAM ile, Y makinesinde ki 4 vCPU 8 RAM bir değil, hatta o kadar devasa farklar var ki, anlatıyorum:
Bizler ağırlıklı olarak VPS kullanıyoruz ve VPS'ler VDS'lerin parçalanmış halidir. Donanım sunan Firmalar çok büyük şirketler ve haliyle cihazları elimizdeki donanımlar gibi değil, milyon CPU'lu milyon RAM'lere sahipler, fakat zamanında bu konuda büyük bir problem ortaya çıkmış.. Rues ismindeki kullanıcı bir Sanal Cloud temin etmek istediği zaman mecbur ihtiyacı 50 CPU olsa bile cihazlar 70 CPU'dan oluştuğu için 70 CPU'luk hizmet satın almak zorunda kalırmış, bu da oldukça mantıksız. Bir ablamızda demiş ki, ya biz neden bu cihazlara kendi içersinde parçalara bölmüyoruz ve herkes ihtiyacı olduğu ve istediği donanımı temin etmiyor? Böylece VPS ortaya çıkıyor, VDS bir cihaz iken (farklılıklar mevcut biliyorum), VPS o cihazın bir parçası.
100 CPU olan bir cihazı birden fazla VPS'e bölüp herkesin ihtiyacı olanı alması sağlandı böylece. Hal böyleyken aynı cihazdaki A parçası ( diyelim ki 2 cpu olsun ) ile B parçası ( yine 2 cpu olsun ) aynı performansa sahip değiller. Çünkü donanım aynı olsada A parçası daha çok eskitilmiş veya eski olabilir, B parçası daha basit işlerde kullanılmış olabilir. Durum böyleyken her aynı donanıma sahip VPS AYNI PERFORMANSI VERMEZ.
Peki hocam sizinle aynı sunucuya aldım ama benim sunucu performansı pek iyi değil sanki, nasıl değiştireceğim.. Burada hızlıca aksiyon alabileceğin aç kapa yapabileceğin aylık ödeme yapmadığın firmaları seçeceksinsiniz.. Bu konuda zaten Hetzner'in yanından bile geçebilecek firma yok. Tüm sunucularım Hetznerde şu an.
..Bir diğer konuda (aklıma geldikçe geliyor) farklı firmalarda ki aynı donanım.
A firmasında ki 2 CPU 5. nesil çekirdek olabiliyorken B firmasındaki 2 CPU 7. nesil olabiliyor, bu da büyük performans farklılıkları sağlıyor. Bunun için firma seçerken her zaman f/p seçmek zorundasınız. Bu durumlar sadece CPU için değil internet, disk, ram.. her şey için geçerlidir, CPU sadece örnektir.
Son
Sırf aklıma daha fazla bir şeyler gelmesin diye şarkı açtım :d Yazdıkça yazasım geliyor ve bitmiyor.. Yayında bu konuları ve bu konuda ki sorularınızı daha detaylı anlatırım, yayınlar burada gerçekleşiyor.
Umarım keyif almışsınızdır, merak ettiğiniz konular oldukça artık burada blog yazılarına dökerim.. Benim içime çok sinen bir yazı oldu.. Görüşmek üzere <3