Flamboyan


Pengalaman dengan menjalankan PostgreSQL di Kubernetes

Dalam wawancara ini, kita membahas tantangan yang terlibat, open source dan alat komersial yang dapat membantu dan alternatif lain untuk mengelola aplikasi stateful di Kubernetes. Di bawah ini adalah transkrip wawancara dengan CTO kami, Sasha Klizhentas, tentang pengalamannya menjalankan PostgreSQL di Kubernetes.Whenever admin pulih master pertama itu tidak lagi master lagi dan itu harus benar-benar sinkron negara dari node kedua yang sekarang master. Jika naif pemimpin failover algoritma pemilihan tendangan atau administrator yang tidak tahu negara secara manual memicu failover, sekunder menjadi master. Lalu tiba-tiba master saat turun tapi replikasi asynchronous memiliki lag besar disebabkan oleh sesuatu seperti partisi jaringan. Semua data selama periode yang hilang karena semua menulis yang tidak direplikasi menghilang. Anda mengatur mengalir replikasi dan katakanlah master pertama adalah up. Semua menulis pergi ke sana dan mereka asynchronous meniru ke standby.Whenever sepotong data ini hilang harus ada mekanisme yang memberitahu node penerima bahwa data tidak sinkron. Tapi tidak ada otoritas yang menganalisis data ini yang dibangun ke Postgres, namun, yang akan membantu siapa pun yang melakukan pemilihan pemimpin untuk menyelesaikannya. modifikasi mereka bisa menjadi perubahan negara, menulis, atau menciptakan nilai-nilai baru. Di Postgres, ada mekanisme yang membantu untuk melacak replikasi lag. Sasha: replikasi Asynchronous mengirim operasi untuk para pengikut / node standby.Sebagai contoh, pengguna dapat membuat penyebaran dengan faktor replikasi dari satu dan itu pemilihan pemimpin Anda. Tim Citus data, dengan cara, menangani replikasi dengan benar dalam integrasi mereka Kubernetes dengan Postgres. Tapi, jika Anda DIY, siapa pun yang membangun Kubernetes penggelaran dengan failover harus ingatlah ini. Mereka melacak negara replikasi dan replikasi lag -. Mereka memiliki semuanya dibangun di Kubernetes, membuatnya seolah-olah mudah untuk menerapkan failover dasar dan pemimpin election.However, dengan on-denga Kubernetes, pelaksanaan volume biasanya didasarkan pada filesystem jaringan, dipasang filesystem seperti NFS, atau filesystem seperti Ceph yang mensimulasikan perangkat blok melalui penyimpanan objek. replikasi tidak lagi diperlukan karena-karena jika volume gigih dan memiliki snapshot dan backup sendiri tidak perlu untuk mereplikasi. Ini penyebaran paling sederhana yang mungkin akan bekerja jika seseorang memiliki konsep ini dari volume data yang bergerak dengan database. Ini benar-benar sulit untuk mempertahankan besar, multi-tenant Ceph cluster dan selalu memiliki latency rendah untuk Postgres. Kelemahan yang jelas dari itu adalah latency meningkat.Dan menghilangkan banyak gesekan dari insinyur membangun sistem mereka karena sebelum Kubernetes mereka harus reimplement semua pola ini sendiri setiap kali mereka akan menggulung Zookeeper atau didistribusikan sistem penyimpanan lain yang harus menunjukkan perilaku-perilaku atau pola-pola. Hal ini dapat memberikan blok bangunan dari sebuah proses yang dapat terus-menerus dan secara andal bermigrasi ke komputer lain jika salah satu mesin turun. Atau dapat memberikan invarian dari pemimpin tunggal dari beberapa proses yang berjalan setiap saat. Sasha: Pikirkan tentang Kubernetes, dalam hal ini, hanya sebagai sistem pendukung yang memberikan bangunan dasar blocks.But bagian kompleks adalah untuk menciptakan sistem domain-spesifik yang mengambil orang-orang blok bangunan dan benar mengkonfigurasi mereka - tahu kapan untuk memilih seorang pemimpin atau tidak, kapan itu aman, ketika itu tidak. Siapapun bisa menulis operator Kubernetes untuk Postgres tapi melihat implementasi Anda hanya bisa melihat bagaimana mereka akan kehilangan data. Blok bangunan yang ada namun Anda masih bisa menyalahgunakan mereka dan memiliki kehilangan data sebagai hasilnya. Ini mungkin lebih mudah untuk melakukannya karena entry level sekarang lebih rendah. Jadi dengan Kubernetes, DIY dari orkestrasi tidak lagi diperlukan.
insinyur utama mereka, Marco Slot, adalah seorang ahli sistem terdistribusi dengan pelatihan sehingga dia tahu apa yang dia lakukan dengan Postgres sangat baik dan Postgres adalah fokus utama tim. Itu sebabnya kami akhirnya membuang konsep mencoba membangun sistem home-kami tumbuh sendiri dari open source bit dan sekarang kita berkolaborasi dengan orang-orang Citus. Saya sebutkan mereka sebelumnya tetapi tim di data Citus sedang membangun sistem yang sangat canggih yang mengubah Postgres menjadi solusi berkerumun. Menemukan tim atau solusi yang hanya berfokus pada Postgres dan pasangan mereka dengan tim yang tahu Kubernetes baik. Sasha: Untuk membungkus percakapan tentang Postgres, ada jalan. Hanya membawa mereka pengetahuan Kubernetes kami dan kami menggunakan mereka Postgres knowledge.Sasha: Aturan praktis - bahwa kita telah belajar dengan cara yang keras - dengan beban kerja stateful adalah berpikir sangat mendalam tentang masalah ruang sebelum melakukan menggunakan Kubernetes ke host saya t. Perusahaan-perusahaan yang harus melihat ke Kubernetes untuk mengotomatisasi solusi HA yang ada mereka adalah profesional khusus di bidangnya seperti Citus atau 2ndQuadrant. Mereka hanya harus mulai menggunakan Kubernetes sebagai alat yang lebih cepat untuk membangun primitif yang sama mereka akan dibangun pula. Mereka sudah tahu semua seluk-beluk penyebaran database sangat tersedia dan beban kerja mereka. Ini sangat menggoda tapi kecuali Anda memiliki solusi ini domain-spesifik khusus, itu tidak cukup praktis. Mereka adalah perusahaan yang harus melihat Kubernetes.Ketika saya berbicara dengan mereka, saya menyarankan mereka hanya menggunakan Kubernetes TPRs dan berputar ke atas penyebaran dengan ReplicaSet satu dan agen Anda akan memiliki tampilan yang konsisten di dunia. Misalnya, Citus telah membangun solusi pemantauan mereka sendiri, agen, yang harus berjalan pada salah satu node yang melacak status. Dan mesin negara yang tahu kapan harus memilih, re-memilih dan semua hal-hal yang harus dibangun oleh Citus’ ahli sistem terdistribusi. Tapi tetap, semua informasi yang dikirim ke agen ini harus dikirim oleh them.So itu contoh yang baik di mana Kubernetes tidak tahu tentang beban kerja, distribusi data atau mekanisme replikasi. Jadi harus ada sistem yang menggunakan Kubernetes sebagian besar untuk bit penjadwalan dan Kubernetes seharusnya tidak menjadi satu memutuskan apakah aman atau tidak untuk menambahkan dua replika lagi. Jika Anda memiliki lima node dan Anda membuat penyebaran keluar dari mereka dan dua dari mereka turun dan Anda memiliki dataset yang besar, Kubernetes dengan senang hati akan berputar ke atas dua node lebih dan menambahkannya ke cluster. Apa yang kemungkinan akan terjadi pada kenyataannya adalah bahwa node akan mulai menyeimbangkan data ke titik bahwa seluruh klaster akan turun. Ini akan sibuk mengocok data di sekitar dan tidak akan mampu melayani berbunyi.Jadi untuk mendapatkan operator otomatis ke keadaan bisa digunakan, beban kerja harus dipahami cukup baik sehingga heuristik dibangun untuk operator akan selalu bekerja karena tidak ada failsafe manusia. Anda harus benar-benar tahu apakah itu aman untuk, memungkinkan katakanlah, menurunkan node ini, untuk Postgres atau Cassandra tergantung pada jenis beban kerja itu. Sasha: Jika Anda meng-host database benar-benar dimuat, jumlah intelijen dan operasi pemantauan untuk membuat keputusan yang tepat adalah enormous.Hey bagaimana Anda terhubung ke induk pg sekarang? Bagaimana Anda tahu, dari penyebaran ini, yang Postgres adalah master dan mana yang replika? Tidak ada cara standar - Anda harus membangun otomatisasi Anda sendiri. Tetapi jika Anda menempatkan semua ini dalam Kubernetes, maka pertama Anda harus baik Menemukan kembali alat tersebut atau kedua, membuat mereka cluster-aware. Sebelum Anda memiliki alat, pgsql, pgtop, dan semua itu. Dan katakanlah Anda ingin membangun sebuah replika. (source)