Menggunakan simpul kepala ZFS sebagai server basis data?

9

Saya menggunakan NAS dual-head yang didukung ZFS untuk penyimpanan berbagi cluster ketersediaan tinggi, berdasarkan arsitektur yang disarankan Nexenta seperti yang terlihat di sini:

masukkan deskripsi gambar di sini

Disk dalam 1 JBOD akan menyimpan file database untuk database Postgres 4 TB tunggal dan disk di JBOD lainnya menyimpan 20 TB file flat biner mentah yang besar (hasil cluster untuk simulasi collision objek bintang besar). Dengan kata lain, JBOD yang mendukung file Postgres akan menangani terutama beban kerja acak sedangkan JBOD yang mendukung hasil simulasi akan menangani terutama beban kerja serial. Kedua node head memiliki memori 256 GB dan 16 core. Cluster memiliki sekitar 200 core masing-masing mempertahankan sesi Postgres, jadi saya berharap sekitar 200 sesi bersamaan.

Saya bertanya-tanya apakah bijaksana dalam pengaturan saya untuk memiliki node kepala ZFS bertindak secara bersamaan sebagai pasangan cermin dari server database Postgres untuk cluster saya? Satu-satunya kekurangan yang bisa saya lihat adalah:

  1. Kurang fleksibel untuk meningkatkan infrastruktur saya.
  2. Tingkat redundansi yang sedikit lebih rendah.
  3. Sumber daya memori dan CPU terbatas untuk Postgres.

Namun, keuntungan yang saya lihat adalah bahwa ZFS cukup bodoh tentang failover otomatis dan saya tidak perlu menghabiskan banyak pekerjaan untuk mendapatkan setiap server database Postgres untuk mencari tahu apakah simpul kepala telah gagal karena akan gagal bersama dengan kepala simpul

elleciel
sumber
PostgreSQL tidak dapat dijalankan dalam segala bentuk mode penyimpanan bersama. Upaya untuk melakukannya akan gagal. Upaya untuk memintas perlindungan untuk menghentikan Anda melakukannya (seperti memindahkan / menyembunyikan postmaster.pid) akan mengakibatkan kerusakan data yang parah.
Craig Ringer
2
@CraigRinger Hm, apakah ini bertentangan dengan wiki.postgresql.org/wiki/Shared_Storage ?
elleciel
1
Anda dapat menjalankannya jika Anda benar-benar menjamin bahwa hanya satu kepala kantor pos yang dapat mengakses direktori data secara bersamaan. STONITH / pagar yang baik adalah syarat mutlak untuk menghindari korupsi data besar-besaran. Secara pribadi tidak mungkin saya melakukannya. Ini juga menghilangkan manfaat yang Anda bicarakan - mencari tahu yang merupakan server utama / live secara otomatis, dll - karena Anda harus mengelola failover.
Craig Ringer
2
Saya telah merevisi halaman wiki untuk membuatnya lebih jelas; terima kasih telah menunjukkannya.
Craig Ringer
1
Ini tidak masuk akal. Solusi HA Nexenta adalah memanfaatkan pengelompokan RSF-1 . Sepertinya Anda melakukan ini dengan ZFS di Linux tanpa bagian RSF-1. Ingat, ZFS di Linux tidak benar-benar memiliki opsi pengelompokan, jadi referensi Nexenta tidak berlaku. Apa yang harus Anda dapatkan dengan memiliki dua simpul kepala?
ewwhite

Jawaban:

0

Anda tidak dapat memiliki dua instance Postgres ("cluster" dalam terminologi Postgres) yang bekerja pada file fisik yang sama.

jika Anda menginginkan kinerja, sharding dapat membantu Anda (masing-masing memiliki dua instance yang membawa data berbeda)

Jika Anda ingin ketersediaan tinggi maka gagal-dengan STONITH mungkin menjadi solusinya. Anda perlu memastikan bahwa kemudian perangkat keras diperbaiki itu tidak mencoba atau membuka database saat simpul kedua melayani itu.

Jasen
sumber