Bugün sizler ile SolusVM 2.0 altyapısı kullanan sysadmin'lerin veya VDS yöneticilerinin zaman zaman karşılaştığı yaygın krizlerden biri olan sanal sunucuya normal yollarla (SSH, RDP) erişilemediği anlarda VNC ekranının da siyah ekranda kalması ya da "Connection refused / Timeout" hatası vermesi durumundan bahsedeceğim. Özellikle ağ yapılandırması bozulduğunda veya güvenlik duvarı tıkandığında paneldeki standart noVNC bağlantısı kopabilir.
Böyle bir senaryoda kontrol paneli (master) üzerinden çözüme ulaşılamadığı durumlarda doğrudan Node (Hypervisor) konsolu üzerinden tünel oluşturarak noVNC oturumunu ayağa kaldırmak, sistemi kurtarmak için en net yöntemdir.
Teknik Altyapı ve Sorunun Kök Nedeni: SolusVM 2.0 mimarisinde kontrol paneli ile node'lar arasında API ve WebSocket tabanlı bir iletişim yürütülür. VDS konsol talebi geldiğinde node üzerindeki ilgili QEMU/KVM socket'i ile panel arasında bir noVNC tüneli oluşturulur.
Şu durumlarda ise tünel kopabilir:
Node üzerindeki WebSocket veya proxy servislerinin (örneğin solusvm2 servisleri) anlık kilitlenmesi.
VDS'in içindeki ağ servislerinin (iptables/ufw veya netplan) tüm trafiği kesmesi sebebiyle VNC portlarının yanıt vermemesi.
Node ile kontrol paneli arasındaki API portlarında yaşanan anlık SSL/sertifika senkronizasyon kopuklukları.
Bu tarz bir kopma yaşadığınızda aşağıdaki adımları uygulayarak noVNC tünelini ve konsolu yeniden toparlayabilirsiniz;
Eğer panelden VNC açılmıyorsa ve müdahale etmeniz gerekiyorsa node sunucusuna SSH ile bağlanarak şu adımları izleyebilirsiniz:
(Burada erişilemeyen sunucunun <code>domain name</code> veya UUID değerini göreceksiniz. Örnek olarak makinenin libvirt üzerindeki adını aldığımızı varsayalım.)
2. Adım: VNC Portunu ve Socket Durumunu Kontrol Edin Söz konusu sanal makinenin hangi VNC portunu dinlediğini veya socket hatası verip vermediğini şu komutla sorgulayın: Bash
virsh vncdisplay <sunucu_adi_veya_uuid>
Bu komut size genellikle <code>:0</code>, <code>:1</code> gibi bir değer veya doğrudan bir port numarası (<code>5900</code>, <code>5901</code> vb.) döndürecektir. Eğer port kapalıysa QEMU süreci askıda kalmış demektir.
3. Adım: QEMU / VNC Servisini Yeniden Başlatma veya Zorlama Eğer VNC soketi yanıt vermiyorsa, sanal makineyi kapatıp açmadan (hard reset atmadan) VNC socket'ini tetiklemek için libvirt yapılandırmasını tazeleyebiliriz ya da node üzerindeki solusvm2 agent servisini kontrol edebiliriz: Bash
(Bu servis yeniden başladığında panel ile node arasındaki tünel istekleri sıfırdan kurulur ve noVNC kuyruğu temizlenir.)
4. Adım: Manuel Tünel Oluşturma (SSH Port Forwarding Yöntemi) Eğer web panelindeki noVNC arayüzü hâlâ yüklenmiyorsa, kendi yerel bilgisayarınızdan node sunucusu üzerinden doğrudan VNC portuna bir SSH tüneli (port forwarding) açarak tarayıcınızdan bağlanabilirsiniz. Yerel terminalinizden şu komutu girin: Bash
(Not: Node üzerindeki QEMU VNC portunu yukarıdaki <code>virsh vncdisplay</code> komutundan aldığınız porta göre 5900, 5901 şeklinde güncelleyebilirsiniz.)
Bu tünel kurulduktan sonra herhangi bir VNC istemcisi (TigerVNC, TightVNC vb.) kullanarak <code>127.0.0.1:5900</code> adresine bağlanabilir sunucunun fiziksel ekranına doğrudan erişebilirsiniz.
SolusVM 2.0 mimarisinde bu tarz krizlerle karşılaşıldığında panik yapıp sanal sunucuyu doğrudan kapatmak veri kaybına yol açabilir. Node seviyesinde <code>virsh</code> komutları ve SSH tünelleme yöntemiyle sisteme sızmak, veriyi kurtarmak veya ağ yapılandırmasındaki hatayı (<code>/etc/netplan</code> vb.) düzeltmek için en güvenli yoldur.
Umarım bu teknik inceleme, benzer altyapı sorunları yaşarsanız işinizi kolaylaştırır. Konuyla ilgili eklemek istedikleriniz veya farklı bir çözüm yönteminiz varsa aşağıda tartışabiliriz.
Bugün sizler ile SolusVM 2.0 altyapısı kullanan sysadmin'lerin veya VDS yöneticilerinin zaman zaman karşılaştığı yaygın krizlerden biri olan sanal sunucuya normal yollarla (SSH, RDP) erişilemediği anlarda VNC ekranının da siyah ekranda kalması ya da "Connection refused / Timeout" hatası vermesi durumundan bahsedeceğim. Özellikle ağ yapılandırması bozulduğunda veya güvenlik duvarı tıkandığında paneldeki standart noVNC bağlantısı kopabilir.
Böyle bir senaryoda kontrol paneli (master) üzerinden çözüme ulaşılamadığı durumlarda doğrudan Node (Hypervisor) konsolu üzerinden tünel oluşturarak noVNC oturumunu ayağa kaldırmak, sistemi kurtarmak için en net yöntemdir.
Teknik Altyapı ve Sorunun Kök Nedeni: SolusVM 2.0 mimarisinde kontrol paneli ile node'lar arasında API ve WebSocket tabanlı bir iletişim yürütülür. VDS konsol talebi geldiğinde node üzerindeki ilgili QEMU/KVM socket'i ile panel arasında bir noVNC tüneli oluşturulur.
Şu durumlarda ise tünel kopabilir:
Bu tarz bir kopma yaşadığınızda aşağıdaki adımları uygulayarak noVNC tünelini ve konsolu yeniden toparlayabilirsiniz;
Eğer panelden VNC açılmıyorsa ve müdahale etmeniz gerekiyorsa node sunucusuna SSH ile bağlanarak şu adımları izleyebilirsiniz:
1. Adım: İlgili Sanal Makinenin (VDS) UUID Değerini Bulun Öncelikle sorun yaşadığımız sanal sunucunun SolusVM 2.0 sistemindeki benzersiz kimliğini (UUID) tespit etmemiz gerekiyor. Node sunucusuna bağlanıp aktif KVM domainlerini listeleyin:
Bash
(Burada erişilemeyen sunucunun <code>domain name</code> veya UUID değerini göreceksiniz. Örnek olarak makinenin libvirt üzerindeki adını aldığımızı varsayalım.)
2. Adım: VNC Portunu ve Socket Durumunu Kontrol Edin Söz konusu sanal makinenin hangi VNC portunu dinlediğini veya socket hatası verip vermediğini şu komutla sorgulayın:
Bash
Bu komut size genellikle <code>:0</code>, <code>:1</code> gibi bir değer veya doğrudan bir port numarası (<code>5900</code>, <code>5901</code> vb.) döndürecektir. Eğer port kapalıysa QEMU süreci askıda kalmış demektir.
3. Adım: QEMU / VNC Servisini Yeniden Başlatma veya Zorlama Eğer VNC soketi yanıt vermiyorsa, sanal makineyi kapatıp açmadan (hard reset atmadan) VNC socket'ini tetiklemek için libvirt yapılandırmasını tazeleyebiliriz ya da node üzerindeki solusvm2 agent servisini kontrol edebiliriz:
Bash
(Bu servis yeniden başladığında panel ile node arasındaki tünel istekleri sıfırdan kurulur ve noVNC kuyruğu temizlenir.)
4. Adım: Manuel Tünel Oluşturma (SSH Port Forwarding Yöntemi) Eğer web panelindeki noVNC arayüzü hâlâ yüklenmiyorsa, kendi yerel bilgisayarınızdan node sunucusu üzerinden doğrudan VNC portuna bir SSH tüneli (port forwarding) açarak tarayıcınızdan bağlanabilirsiniz.
Yerel terminalinizden şu komutu girin:
Bash
(Not: Node üzerindeki QEMU VNC portunu yukarıdaki <code>virsh vncdisplay</code> komutundan aldığınız porta göre 5900, 5901 şeklinde güncelleyebilirsiniz.)
Bu tünel kurulduktan sonra herhangi bir VNC istemcisi (TigerVNC, TightVNC vb.) kullanarak <code>127.0.0.1:5900</code> adresine bağlanabilir sunucunun fiziksel ekranına doğrudan erişebilirsiniz.
SolusVM 2.0 mimarisinde bu tarz krizlerle karşılaşıldığında panik yapıp sanal sunucuyu doğrudan kapatmak veri kaybına yol açabilir. Node seviyesinde <code>virsh</code> komutları ve SSH tünelleme yöntemiyle sisteme sızmak, veriyi kurtarmak veya ağ yapılandırmasındaki hatayı (<code>/etc/netplan</code> vb.) düzeltmek için en güvenli yoldur.
Umarım bu teknik inceleme, benzer altyapı sorunları yaşarsanız işinizi kolaylaştırır. Konuyla ilgili eklemek istedikleriniz veya farklı bir çözüm yönteminiz varsa aşağıda tartışabiliriz.
İyi çalışmalar.