Rumah  >  Artikel  >  Operasi dan penyelenggaraan  >  Linux dan Docker: Bagaimana untuk memindahkan dan menyegerakkan bekas merentas hos?

Linux dan Docker: Bagaimana untuk memindahkan dan menyegerakkan bekas merentas hos?

WBOY
WBOYasal
2023-07-29 14:52:491782semak imbas

Linux dan Docker: Bagaimana untuk melaksanakan migrasi silang hos dan penyegerakan kontena?

Abstrak: Docker ialah teknologi kontena yang popular yang menyediakan penyelesaian maya yang ringan. Dalam persekitaran berbilang hos, adalah keperluan yang sangat biasa untuk memindahkan dan menyegerakkan bekas merentas hos. Artikel ini akan memperkenalkan cara menggunakan Linux dan Docker untuk melaksanakan penghijrahan silang hos dan penyegerakan bekas, dan menyediakan beberapa kod sampel untuk rujukan.

  1. Pengenalan
    Peningkatan teknologi kontena menjadikan penggunaan dan migrasi aplikasi lebih fleksibel dan cekap. Dalam persekitaran berbilang hos, migrasi silang hos dan penyegerakan bekas adalah fungsi penting yang boleh membantu kami mencapai pengimbangan beban, ketersediaan tinggi dan penggunaan sumber yang optimum. Linux menyediakan beberapa alatan dan fungsi untuk menyokong migrasi silang hos dan penyegerakan bekas, dan Docker menyediakan cara yang lebih mudah untuk mengurus dan mengendalikan kontena berdasarkan Linux.
  2. Penghijrahan dan penyegerakan kontena di Linux
    Di Linux, penghijrahan dan penyegerakan kontena bergantung terutamanya pada dua teknologi: storan migrasi dan rangkaian. Pemindahan storan merujuk kepada proses pemindahan data dan sistem fail bekas daripada hos sumber kepada hos sasaran, dan rangkaian adalah kunci untuk mengekalkan ketersambungan rangkaian semasa proses pemindahan kontena.

2.1 Storan Migrasi
Untuk storan migrasi kontena, terdapat beberapa teknologi yang biasa digunakan untuk dipilih, seperti sistem fail replikasi dan penyegerakan tradisional, sistem fail teragih dan storan blok teragih. Meniru dan menyegerakkan sistem fail ialah pendekatan yang paling biasa, dan ia berfungsi dengan baik untuk persekitaran berskala kecil, tetapi boleh menyebabkan kesesakan prestasi dalam persekitaran berskala besar. Sistem fail teragih dan storan blok teragih boleh memberikan prestasi dan kebolehskalaan yang lebih tinggi, tetapi agak rumit untuk dikonfigurasikan dan diurus. Di sini, kami akan menggambarkan menggunakan menyalin dan menyegerakkan sistem fail sebagai contoh.

Andaikan kita mempunyai dua hos, hos sumber dan hos sasaran Untuk memindahkan bekas daripada hos sumber kepada hos sasaran, kita boleh melakukan langkah berikut:

Langkah 1: Hentikan bekas daripada berjalan pada hos sumber. .

$ docker stop container_id

Langkah 2: Eksport sistem fail bekas.

$ docker export container_id > container.tar

Langkah 3: Pindahkan sistem fail bekas ke hos sasaran.

$ scp container.tar user@target_host:/path/

Langkah 4: Import sistem fail bekas pada hos sasaran.

$ docker import /path/container.tar

Langkah 5: Mulakan bekas untuk berjalan pada hos sasaran.

$ docker run -d --name container_name image_name

2.2 Penyegerakan rangkaian
Semasa proses migrasi kontena, adalah sangat penting untuk mengekalkan kestabilan sambungan rangkaian. Linux menyediakan beberapa alat dan teknologi untuk mencapai penyegerakan rangkaian, seperti peraturan iptables, ruang nama rangkaian dan macvlan. Pelaksanaan yang tepat bergantung pada seni bina rangkaian dan keperluan.

Katakan kita mempunyai dua hos, hos sumber dan hos sasaran Untuk mengekalkan sambungan rangkaian bekas semasa proses pemindahan, kita boleh melakukan langkah berikut:

Langkah 1: Buat ruang nama rangkaian pada hos sumber dan. tambahkan antara muka Rangkaian bekas dipindahkan ke ruang nama ini.

$ ip link set dev eth0 netns container_ns

Langkah 2: Buat ruang nama rangkaian pada hos sasaran dan alihkan antara muka rangkaian bekas ke ruang nama.

$ ip link set dev eth0 netns container_ns

Langkah 3: Sediakan peraturan iptables pada hos sumber untuk mengubah hala trafik rangkaian kontena ke hos sasaran.

$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination target_ip

Langkah 4: Mulakan antara muka rangkaian bekas pada hos sasaran.

$ ip link set dev eth0 up

Langkah 5: Sediakan peraturan iptables pada hos sasaran untuk memajukan trafik rangkaian kontena ke ruang nama rangkaian kontena.

$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination container_ip
  1. Penghijrahan dan penyegerakan kontena Docker
    Di Docker, migrasi silang hos dan penyegerakan kontena bergantung terutamanya pada Docker Swarm. Docker Swarm ialah alat pengelompokan dan orkestrasi Docker asli yang boleh mengurus dan menjadualkan bekas merentas berbilang hos.

Dengan mengandaikan bahawa kami telah mengkonfigurasi Docker Swarm, untuk melaksanakan migrasi silang hos dan penyegerakan bekas dalam persekitaran berbilang hos, kami boleh melakukan langkah berikut:

Langkah 1: Tambahkan bekas pada kelompok Docker Swarm.

$ docker swarm join --token SWMTKN-abcdefg1234567890 manager_ip:2377

Langkah 2: Tandai bekas pada hos sumber untuk menunjukkan bahawa ia perlu dipindahkan merentas hos.

$ docker service update --label-add com.docker.ucp.mesh.http.ports=80 container_name

Langkah 3: Mulakan perkhidmatan dengan nama yang sama pada hos sasaran.

$ docker service create --name container_name image_name

Langkah 4: Docker Swarm akan secara automatik memindahkan bekas pada hos sumber kepada hos sasaran.

  1. Kesimpulan
    Melalui Linux dan Docker, kami boleh mencapai pemindahan rentas hos dan penyegerakan kontena. Sama ada kami menggunakan sistem fail replikasi dan penyegerakan secara langsung dalam persekitaran Linux, atau menggunakan Docker Swarm untuk mengurus dan menjadualkan bekas merentas hos, kami boleh memenuhi keperluan kami dalam persekitaran berbilang hos. Saya harap artikel ini telah memberikan sedikit bantuan kepada pembaca dalam melaksanakan migrasi silang hos dan penyegerakan kontena.

Rujukan:

  1. Dokumentasi Docker: https://docs.docker.com/
  2. Dokumentasi Linux: https://www.kernel.org/doc/html/latest/

Lampiran: Contoh Kod

# 示例代码1:复制和同步文件系统
# 步骤1:停止容器在源主机上的运行。
$ docker stop container_id

# 步骤2:导出容器的文件系统。
$ docker export container_id > container.tar

# 步骤3:将容器的文件系统传输到目标主机。
$ scp container.tar user@target_host:/path/

# 步骤4:在目标主机上导入容器的文件系统。
$ docker import /path/container.tar

# 步骤5:启动容器在目标主机上运行。
$ docker run -d --name container_name image_name

# 示例代码2:网络同步
# 步骤1:在源主机上创建网络命名空间,并将容器的网络接口移动到该命名空间。
$ ip link set dev eth0 netns container_ns

# 步骤2:在目标主机上创建网络命名空间,并将容器的网络接口移动到该命名空间。
$ ip link set dev eth0 netns container_ns

# 步骤3:在源主机上设置iptables规则,将容器的网络流量重定向到目标主机。
$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination target_ip

# 步骤4:在目标主机上启动容器的网络接口。
$ ip link set dev eth0 up

# 步骤5:在目标主机上设置iptables规则,将容器的网络流量转发到容器的网络命名空间。
$ iptables -t nat -A PREROUTING -i eth0 -j DNAT --to-destination container_ip

# 示例代码3:Docker Swarm的容器迁移和同步
# 步骤1:将容器加入到Docker Swarm集群。
$ docker swarm join --token SWMTKN-abcdefg1234567890 manager_ip:2377

# 步骤2:在源主机上标记容器,以指示它需要跨主机迁移。
$ docker service update --label-add com.docker.ucp.mesh.http.ports=80 container_name

# 步骤3:在目标主机上启动同名的服务。
$ docker service create --name container_name image_name

# 步骤4:Docker Swarm会自动将源主机上的容器迁移到目标主机上。

(Jumlah bilangan perkataan: teks asal kira-kira 1306 perkataan, kod sampel 607 perkataan)

Atas ialah kandungan terperinci Linux dan Docker: Bagaimana untuk memindahkan dan menyegerakkan bekas merentas hos?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn