Skenario target ideal
Ya, Anda harus menggunakan load balancer dan memperbarui satu instance pada satu waktu. Saya Tidak yakin di mana komunikasi antar kontainer masuk.
Sebagai contoh, bayangkan Anda memiliki load balancer yang melayani situs Anda A. pengguna hanya terhubung ke as dan hanya mengetahuinya sebagai "a". Penyeimbang beban tahu bahwa ada dua atau lebih backend (B, C, dll.), dan apakah itu VM atau kontainer tidak masalah.
Kemudian, Anda ingin meng-upgrade backend, yang dalam hal ini adalah contoh Apache.
- keluarkan B dari backend yang memenuhi syarat untuk penyeimbang beban sehingga tidak lagi menerima lalu lintas apa pun.
- tunggu permintaan saat ini-hidup untuk dilayani dan koneksi yang ada ditutup.
- perbarui wadah atau VM yang mendasari yang melayani B
- mulai ulang B, tunggu hingga memuat dan mulai bekerja
- uji B untuk memastikan itu melayani permintaan baru dengan benar
- tambahkan B kembali ke kumpulan backend load balancer untuk mengaktifkan kembali lalu lintas
Kemudian, lakukan proses yang sama untuk C, D, dll.
Perhatikan bahwa ada buka permintaan untuk peningkatan kontainer Docker di tempat, dari Nov 2013, tetapi tampaknya tidak memiliki banyak kemajuan sehingga solusi di atas adalah apa yang harus Anda lakukan sementara itu.
Apa yang harus dilakukan untuk situs langsung yang ada
Agaknya, Anda menanyakan ini karena Anda sudah menjalankan situs langsung dalam model ini dan Anda ingin meningkatkannya tanpa waktu henti. Jadi, kita perlu mencapai keadaan target ideal di atas, tetapi secara bertahap.
Mari kita asumsikan bahwa:
- Anda memiliki nama DNS yang menunjuk ke penampung Anda
- penampung Anda berjalan pada beberapa alamat IP
- pengguna Anda tidak tahu alamat IP penampung dan tidak dikodekan dengan keras di mana pun
Jika asumsi ini salah, Anda harus memperbaikinya terlebih dahulu sehingga ini benar.
Kemudian, ikuti langkah berikut:
- buat penyeimbang beban di IP baru dan arahkan ke wadah yang ada sebagai satu-satunya backend
- Ubah DNS untuk menunjuk ke penyeimbang beban daripada IP kontainer secara langsung
- tambahkan backend Apache yang identik dengan pengaturan VM + container yang sama
- sekarang Anda memiliki penyeimbang beban dengan dua backend B dan C, jadi ikuti petunjuk di bagian "skenario target ideal" untuk meningkatkannya satu per satu
Cara memperbarui penyeimbang beban
Cara yang mudah (hosted)
Pilihan termudah adalah tidak menjalankan penyeimbang Anda sendiri. Misalnya, jika Anda menggunakan platform cloud yang menyediakan load balancing sebagai layanan, pertimbangkan untuk menggunakannya dan kemudian pemeliharaan dan pembaruan penyeimbang beban tidak menjadi masalah.
Cara manual
Jika Anda menjalankan penyeimbang beban Anda sendiri, menambahkan lapisan tipuan lain (yaitu, DNS) akan membantu. Mari kita asumsikan sebagai berikut:
- bahwa kami memiliki nama host yang diselesaikan ke IP load balancer A kami yang ingin kami perbarui
- penyeimbang beban kami memiliki kumpulan backend P1, P2, dll.
Kami melanjutkan sebagai berikut:
dan kau sudah selesai.
Detail, diagram, dan perkakas
Lihat ini write - up dan alat-alat yang dapat membantu Anda mengotomatisasi proses, tetapi ide umum adalah sama:
Moral
"Semua masalah dalam ilmu komputer dapat diselesaikan dengan tingkat tipuan lain, kecuali tentu saja untuk masalah terlalu banyak tipuan." — David Wheeler