1. Anasayfa
  2. VMware vCenter

VMware vCenter Server’da “vPostgres service fails to start with PANIC: replication slot file has wrong magic number” Hatasının Giderilmesi


VMware vCenter Server Appliance (VCSA) sanallaştırma altyapısının merkezi yönetimini sağlayan kritik bir bileşendir.

VMware vCenter’ın düzgün çalışabilmesi için arka planda çalışan vPostgres veritabanı servisinin sağlıklı olması gerekir. Ancak bazı durumlarda bu servis başlatılamaz ve sistem yöneticisi aşağıdaki türde kritik bir hata mesajıyla karşılaşır.

PANIC: replication slot file "pg_replslot/vpg_archiver/state" has wrong magic number

/var/log/vmware/vmon/vmon.log 

YYYY-MM-DD-THH:MM:SS In(05) host-XXXX Received start request for vmware-vpostgres
YYYY-MM-DD-THH:MM:SS In(05) host-XXXX <vmware-vpostgres-prestart> Constructed command: /opt/vmware/vpostgres/current/scripts/pg_pre_start
YYYY-MM-DD-THH:MM:SS Wa(03) host-XXXX <vmware-vpostgres> Service pre-start command's stderr: Issuing signal KILL on all PostgreSQL processes owned by OS user vpostgres
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX Traceback (most recent call last):
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/opt/vmware/vpostgres/13/share/python-modules/vpostgres_cis/telemetry.py", line 247, in pushdata
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     response = urllib.request.urlopen(request)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     return opener.open(url, data, timeout)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/usr/lib/python3.7/urllib/request.py", line 531, in open
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     response = meth(req, response)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/usr/lib/python3.7/urllib/request.py", line 641, in http_response
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     'http', request, response, code, msg, hdrs)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/usr/lib/python3.7/urllib/request.py", line 569, in error
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     return self._call_chain(*args)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     result = func(*args)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX   File "/usr/lib/python3.7/urllib/request.py", line 649, in http_error_default
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX     raise HTTPError(req.full_url, code, msg, hdrs, fp)
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX urllib.error.HTTPError: HTTP Error 503: Service Unavailable
YYYY-MM-DD-THH:MM:SS Wa(03) host-XXXX <vmware-vpostgres> Service pre-start command's stderr: yyyy-mm-ddThh:mm:ss.153Z  Failed to push telemetry data for startup
YYYY-MM-DD-THH:MM:SS Wa(03)+ host-XXXX
YYYY-MM-DD-THH:MM:SS Wa(03) host-XXXX <vmware-vpostgres> Service pre-start command's stderr: Could not generate telemetry data
YYYY-MM-DD-THH:MM:SS In(05) host-XXXX <vmware-vpostgres> Service pre-start command completed successfully.
YYYY-MM-DD-THH:MM:SS In(05) host-XXXX <vmware-vpostgres> Constructed command: /opt/vmware/vpostgres/current/bin/postgres -D /storage/db/vpostgres
YYYY-MM-DD-THH:MM:SS host-XXXX Client info Uid=0,Gid=0,Pid=34887,Comm=(vmon-coredumper),PPid=2,Comm=(kthreadd),PPid=0
YYYY-MM-DD-THH:MM:SS Wa(03) host-XXXX [ReadSvcSubStartupData] No startup information from vmware-vpostgres.
YYYY-MM-DD-THH:MM:SS Wa(03) host-XXXX <vmware-vpostgres> Service exited. Exit code 1

/var/log/vmware/vpostgres/postgresql-xx.log dizini

YYYY-MM-DD-THH:MM:SS 67a573d7.26bf 0   LOG:  listening on IPv6 address "::", port 5432
YYYY-MM-DD-THH:MM:SS 67a573d7.26bf 0   LOG:  listening on Unix socket "/var/run/vpostgres/.s.PGSQL.5432"
YYYY-MM-DD-THH:MM:SS 67a573d7.26c1 0   LOG:  database system was interrupted; last known up at 2024-09-20 03:07:24 UTC
YYYY-MM-DD-THH:MM:SS 67a573d7.26c1 0   PANIC:  replication slot file "pg_replslot/vpg_archiver/state" has wrong magic number: 875771188 instead of 17112225
YYYY-MM-DD-THH:MM:SS 67a573d7.26bf 0   LOG:  startup process (PID 9921) was terminated by signal 6: Aborted
YYYY-MM-DD-THH:MM:SS 67a573d7.26bf 0   LOG:  aborting startup due to startup process failure
YYYY-MM-DD-THH:MM:SS 67a573d7.26bf 0   LOG:  database system is shut down

Bu makalede bu hatanın ne anlama geldiğini, neden oluştuğunu, sistem loglarında nasıl göründüğünü ve güvenli şekilde nasıl düzeltileceğini adım adım anlatacağım.

Bu hata vCenter Server Appliance üzerindeki entegre PostgreSQL (vPostgres) veritabanının başlatılması sırasında oluşur.

Sorunun temel nedeni veritabanı içindeki replication slot (çoğaltma yuvası) bilgilerinin bulunduğu pg_replslot/vpg_archiver/state dosyasının bozulmasıdır.

PostgreSQL bu dosyada beklenen “magic number” değerini bulamadığında veri bütünlüğünü korumak adına PANIC moduna geçer ve başlatma işlemini tamamen durdurur.

Bu hatayla karşılaşıldığında vCenter yönetim arayüzüne erişim genellikle imkânsız hale gelir.

Bu hata genellikle aşağıdaki senaryolarda ortaya çıkar:

  • vCenter Appliance’ın beklenmedik şekilde kapanması (örneğin, elektrik kesintisi)
  • Dosya sisteminde meydana gelen bozulmalar (fsck sonrası)
  • Kurtarma (emergency) modundan çıkış
  • Disk alanı bitmesi ve sonrasında yapılan müdahaleler

Sistem Loglarında Hata Belirtileri

vmon.log dosyasında:

<vmware-vpostgres> Service pre-start command's stderr: Could not generate telemetry data
<vmware-vpostgres> Service exited. Exit code 1

postgresql-*.log dosyasında:

PANIC: replication slot file "pg_replslot/vpg_archiver/state" has wrong magic number: 875771188 instead of 17112225
startup process was terminated by signal 6: Aborted
database system is shut down

Bu kayıtlar PostgreSQL’in kendini korumaya alarak başlatma sürecini durdurduğunu ve sistemin kullanım dışı kaldığını gösterir.

Replication Slot ve Magic Number

Replication slot PostgreSQL’in veri çoğaltma (replication) mekanizmasının bir parçasıdır. Sistem bu slotlar sayesinde hangi verilerin başka bir düğüme gönderildiğini takip eder.

Bu bilgiler bozulursa:

  • Replikasyon yapılamaz.
  • Veri kaybı riski doğar.
  • Servis başlatılamaz.

Magic number bir dosyanın doğru formatta olup olmadığını tanımlayan dahili kimliktir. PostgreSQL bu değeri kontrol ederek dosyanın sağlam olup olmadığını anlar. Eğer bu sayı beklenenden farklıysa dosya bozulmuş demektir.

Kalıcı Çözüm Adımları

İşleme Başlamadan Önce: Kritik Güvenlik Önlemleri

İşlem doğrudan veritabanı yapısını etkileyeceği için kesinlikle aşağıdaki adımlar uygulanmalıdır:

  1. VCSA yedeğini alın:
    Yerel veya VAMI (https://<vcenter>:5480) üzerinden yedekleme yapılabilir.
  2. Snapshot oluşturun:
    vCenter kapalı durumdayken bir sanal makine snapshot’u alın.
  3. ELM varsa diğer node’ları da koruma altına alın:
    Enhanced Linked Mode (ELM) kullanıyorsanız, diğer replikasyon nodlarını da kapatıp snapshot alın.

🔧 Adım Adım Onarım Süreci

1. vCenter Appliance’a SSH ile Bağlanın

ssh root@<vcenter-ip-adresi>

Not : SSH aktif değilse VAMI arayüzünden (https://<vcenter>:5480 > Access > SSH) etkinleştirin.

2. Bozuk Dosyanın Bulunduğu Dizine Geçin

cd /storage/db/vpostgres/pg_replslot

Burada vpg_archiver adında bir klasör bulunacaktır. Bu klasör replication slot bilgilerini içerir.

3. Bozuk Slot Klasörünü Silin

rm -r vpg_archiver

Bu işlem veri kaybına neden olmaz. PostgreSQL bu dizini servis başlatıldığında kendisi yeniden oluşturacaktır.

4. vPostgres Servisini Tekrar Başlatın

service-control --start vmware-vpostgres

Başarılı bir başlatma durumunda loglarda artık PANIC veya Abort gibi ifadeler görülmez ve servis “running” konumuna geçer.

Başarıyı Doğrulama

Servisin durumunu kontrol etmek için:

service-control --status vmware-vpostgres

Beklenen çıktı:

vmware-vpostgres: running

Ayrıca /var/log/vmware/vpostgres/postgresql-*.log dosyasında artık sistemin sorunsuz başlatıldığına dair loglar yer almalıdır.

Bu hata vCenter altyapısının durmasına neden olabilecek kritik bir problemdir. Ancak bu makalede yer alan doğru adımlarla sistem kısa sürede eski haline getirilebilir. Bu tür durumlarla karşılaşmamak için:

  • Her zaman düzenli yedek alın.
  • vCenter kapatılmadan önce servisleri düzgün şekilde sonlandırın.
  • Disk alanını takip edin ve sistemin beklenmedik şekilde kapanmasını önleyin.