Sesi Sticky Dengan Swarm Docker (CE) pada CentOS 7

Pengenalan

Docker Swarm mengubah pelayan individu anda ke dalam kumpulan komputer, memudahkan penggredan, ketersediaan tinggi dan mengimbangi beban. Swarm load-balancer menerapkan strategi pengimbangan beban round-robin dan ini mungkin mengganggu fungsi aplikasi (warisan) yang betul yang memerlukan beberapa bentuk sesi melekit untuk membolehkan penyediaan ketersediaan tinggi dengan pelbagai keadaan. Docker Enterprise Edition menyokong sesi melekat Layer-7, tetapi dalam panduan ini kita akan memfokuskan pada versi (CE) Docker percuma. Untuk melaksanakan sesi melekit kita akan menggunakan Traefik.

Prasyarat

  • Sekurang-kurangnya dua kejadian CentOS 7 yang baru digunakan dan dikemas kini dalam subnet yang sama dengan rangkaian peribadi diaktifkan
  • Docker CE dipasang pada contoh ini
  • Contohnya harus menjadi sebahagian daripada kawanan yang sama dan harus dapat berkomunikasi antara satu sama lain melalui rangkaian peribadi
  • Pengetahuan sebelumnya mengenai Docker dan Docker Swarm
  • Pengguna bukan pentadbir dengan hak sudo (pilihan tetapi sangat disarankan untuk tidak menggunakan pengguna root)

Dalam tutorial ini kita akan menggunakan dua contoh Vultr dengan alamat IP swasta 192.168.0.100 dan 192.168.0.101, kedua-duanya adalah nod pengurus Docker Swarm (yang tidak sesuai untuk pengeluaran tetapi cukup untuk tutorial ini).

Siapakah saya

Tutorial ini menggunakan jwilder/whoamiimej docker sebagai aplikasi demo. Ini bekas mudah akan bertindak balas kepada panggilan REST dengan nama bekas yang bertindak balas, menjadikannya sangat mudah untuk menguji jika sesi melekit berfungsi. Imej ini hanya digunakan untuk tujuan demo dan perlu digantikan oleh imej aplikasi anda sendiri. Yang whoami-servicedikonfigurasikan seperti berikut:

sudo docker network create whoaminet -d overlay
sudo docker service create --name whoami-service --mode global --network whoaminet --publish "80:8000" jwilder/whoami
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --reload

Jika kita akan kemudiannya curlitu whoamititik akhir REST di http://192.168.0.100/, kita dapat melihat round-robin beban mengimbangi daripada Docker Swarm di tempat kerja.

curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3
curl http://192.168.0.100
I'm ae9d1763b4ad
curl http://192.168.0.100
I'm a6a8c9294fc3

Ia tidak berguna untuk menguji ini dengan penyemak imbas moden seperti Chrome atau Firefox kerana ia direka untuk menyimpan sambungan hidup (terbuka) dan Docker Swarm load balancer hanya akan bertukar ke bekas lain atas setiap sambungan baru . Sekiranya anda ingin menguji ini dengan penyemak imbas, anda perlu menunggu sekurang-kurangnya 30 saat untuk menutup sambungan sebelum menyegarkan semula.

Menyediakan Traefik

Traefik secara asli menyokong Docker Swarm, ia dapat mengesan dan mendaftarkan atau membatalkan pendaftaran kontena dalam perjalanan dan ia berkomunikasi dengan aplikasi anda melalui rangkaian overlay dalaman. Traefik memerlukan beberapa maklumat tentang permohonan anda sebelum ia boleh mula mengendalikan permintaan untuknya. Maklumat ini diberikan kepada Traefik dengan menambahkan label kepada perkhidmatan Swarm anda.

sudo docker service update --label-add "traefik.docker.network=whoaminet" --label-add "traefik.port=8000" --label-add "traefik.frontend.rule=PathPrefix:/" --label-add "traefik.backend.loadbalancer.stickiness=true" whoami-service

Senarai di bawah menerangkan apa maksud setiap label:

  • traefik.docker.network: Rangkaian overlay Docker di mana Traefik akan berkomunikasi dengan perkhidmatan anda
  • traefik.port: Port di mana perkhidmatan anda mendengar (ini adalah port yang terdedah secara dalaman, bukan port yang diterbitkan)
  • traefik.frontend.rule: PathPrefix:/mengikat akar konteks /untuk perkhidmatan ini.
  • traefik.backend.loadbalancer.stickiness: Mengaktifkan sesi melekit untuk perkhidmatan ini

Sekarang bahawa whoami-servicetelah dikonfigurasikan dengan label yang diperlukan, kami boleh menambah perkhidmatan Traefik kepada kawanan:

sudo docker service create --name traefik -p8080:80 -p9090:8080 --mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock --mode=global --constraint 'node.role == manager' --network whoaminet traefik --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG

Perintah ini melakukan banyak perkara sekaligus. Senarai di bawah akan menerangkan dengan lebih terperinci:

  • --name traefik: Nama perkhidmatan Docker baru kami ialah traefik
  • -p8080:80: Kami menerbitkan port Traefik 80ke port 8080(port 80sudah digunakan oleh kami whoami-service)
  • -p9090:8080: Kami menerbitkan antara muka web Traefik ke port 9090
  • --mount ...: Kami memasang soket Docker ke dalam bekas supaya Traefik boleh mengakses runtime Docker tuan rumah
  • --global: Kami mahukan kontena Traefik di setiap nod pengurus atas alasan ketersediaan yang tinggi
  • --constraint 'node.role == manager': Kami hanya mahu Traefik berjalan pada nod pengurus kerana nod pekerja tidak dapat memberikan Traefik dengan maklumat yang diperlukan. Sebagai contoh, docker service lspada simpul pekerja tidak berfungsi, jadi Traefik bahkan tidak dapat mengetahui perkhidmatan apa yang sedang dijalankan
  • --network whoaminet: Menyambungkan Traefik ke rangkaian yang sama dengan kami whoami-service, jika tidak, mereka tidak dapat berhubung. Kami sebelum ini memberitahu Traefik untuk menyambung ke perkhidmatan kami melalui rangkaian ini dengan traefik.docker.networklabel
  • traefik: Beritahu dermaga untuk menggunakan imej docker Traefik terbaru untuk perkhidmatan ini
  • --docker --docker.swarmmode --docker.watch --web --loglevel=DEBUG: Argumen arahan arahan diluluskan secara langsung kepada Traefik untuk membolehkannya berjalan dalam mod suar Docker ( --loglevel=DEBUGadalah pilihan di sini tetapi menarik semasa persediaan dan untuk tutorial ini)

Yang tinggal hanyalah membuka port yang diperlukan di firewall CentOS:

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=9090/tcp --permanent
sudo firewall-cmd --reload

Bagaimana ia berfungsi

Sebaik sahaja Traefik bermula, anda boleh melihat di dalam log yang Traefik menemui dua whoamibekas. Ia juga mengeluarkan nama cookie yang akan digunakan untuk mengendalikan sesi melekit:

time="2018-11-25T13:17:30Z" level=debug msg="Configuration received from provider docker: {\"backends\":{\"backend-whoami-service\":{\"servers\":{\"server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05\":{\"url\":\"http://10.0.0.5:8000\",\"weight\":1},\"server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6\":{\"url\":\"http://10.0.0.4:8000\",\"weight\":1}},\"loadBalancer\":{\"method\":\"wrr\",\"stickiness\":{}}}},\"frontends\":{\"frontend-PathPrefix-0\":{\"entryPoints\":[\"http\"],\"backend\":\"backend-whoami-service\",\"routes\":{\"route-frontend-PathPrefix-0\":{\"rule\":\"PathPrefix:/\"}},\"passHostHeader\":true,\"priority\":0,\"basicAuth\":null}}}"
time="2018-11-25T13:17:30Z" level=debug msg="Wiring frontend frontend-PathPrefix-0 to entryPoint http"
time="2018-11-25T13:17:30Z" level=debug msg="Creating backend backend-whoami-service"
time="2018-11-25T13:17:30Z" level=debug msg="Adding TLSClientHeaders middleware for frontend frontend-PathPrefix-0"
time="2018-11-25T13:17:30Z" level=debug msg="Creating load-balancer wrr"
time="2018-11-25T13:17:30Z" level=debug msg="Sticky session with cookie _a49bc"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-1-a179b2e38a607b1127e5537c2e614b05 at http://10.0.0.5:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating server server-whoami-service-2-df8a622478a5a709fcb23c50e689b5b6 at http://10.0.0.4:8000 with weight 1"
time="2018-11-25T13:17:30Z" level=debug msg="Creating route route-frontend-PathPrefix-0 PathPrefix:/"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :80"
time="2018-11-25T13:17:30Z" level=info msg="Server configuration reloaded on :8080"

Jika kita curl ke http://192.168.0.100:8080kita dapat melihat bahawa kuki baru _a49bctelah ditetapkan:

curl -v http://192.168.0.100:8080
* About to connect() to 192.168.0.100 port 8080 (#0)
*   Trying 192.168.0.100...
* Connected to 192.168.0.100 (192.168.0.100) port 8080 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: 192.168.0.100:8080
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Length: 17
< Content-Type: text/plain; charset=utf-8
< Date: Sun, 25 Nov 2018 13:18:40 GMT
< Set-Cookie: _a49bc=http://10.0.0.5:8000; Path=/
<
I'm a6a8c9294fc3
* Connection #0 to host 192.168.0.100 left intact

Jika, pada panggilan berikutnya, kami menghantar kuki ini kepada Traefik, kami akan sentiasa dihantar ke bekas yang sama:

curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3
curl http://192.168.0.100:8080 --cookie "_a49bc=http://10.0.0.5:8000"
I'm a6a8c9294fc3

Cookie tidak mengandungi apa-apa kecuali alamat IP dalaman (overlay) bekas yang akan dihantar oleh Traefik untuk meminta. Sekiranya anda menukar nilai kuki http://10.0.0.4:8000, permintaan tersebut akan diteruskan ke bekas lain dengan berkesan. Sekiranya kuki tidak pernah dihantar semula ke Traefik maka sesi melekit tidak akan berfungsi dan permintaan akan seimbang antara bekas aplikasi dan bekas Traefik.

Itu sahaja yang diperlukan untuk menyiapkan Layer 7 Sticky Sessions di Docker CE di CentOS 7.



Leave a Comment

Cara Pasang dan Konfigur CyberPanel pada Server CentOS 7 anda

Cara Pasang dan Konfigur CyberPanel pada Server CentOS 7 anda

Menggunakan Sistem Berbeza? Pengenalan CyberPanel adalah salah satu panel kawalan pertama di pasaran yang merupakan sumber terbuka dan menggunakan OpenLiteSpeed. Apa itu

Cara Memasang Apache Maven 3.5 di CentOS 7

Cara Memasang Apache Maven 3.5 di CentOS 7

Apache Maven adalah alat pengurusan projek perisian sumber terbuka dan bebas yang banyak digunakan untuk menyebarkan aplikasi berbasis Java. Prasyarat yang baru

Cara Memasang FFmpeg di CentOS

Cara Memasang FFmpeg di CentOS

FFmpeg adalah penyelesaian sumber terbuka yang popular untuk merakam, menukar, dan menstrim audio dan video, yang banyak digunakan dalam semua jenis perkhidmatan streaming dalam talian. Saya

Cara Memasang Backdrop CMS 1.8.0 pada VPS CentOS 7 LAMP

Cara Memasang Backdrop CMS 1.8.0 pada VPS CentOS 7 LAMP

Menggunakan Sistem Berbeza? Backdrop CMS 1.8.0 adalah Sistem Pengurusan Kandungan (CMS) sumber mudah alih, mudah alih, percuma dan terbuka yang membolehkan kami

Cara Pasang AirSonic pada CentOS 7

Cara Pasang AirSonic pada CentOS 7

Menggunakan Sistem Berbeza? AirSonic adalah pelayan streaming media sumber terbuka dan terbuka. Dalam tutorial ini, saya akan membimbing anda melalui proses penyebaran a

Siapkan Komposer Untuk Ketergantungan PHP Di CentOS 6

Siapkan Komposer Untuk Ketergantungan PHP Di CentOS 6

Pengenalan Komposer adalah pengurus pergantungan yang popular untuk PHP yang dapat mempermudah pemasangan dan kemas kini perpustakaan yang diperlukan untuk projek anda

Pasang RockMongo di CentOS 7

Pasang RockMongo di CentOS 7

RockMongo adalah alat Pengurusan MongoDB berasaskan web yang serupa dengan alat Pengurusan MySQL: phpMyAdmin. Tutorial ini akan merangkumi proses installin

Bagaimana untuk Menggunakan Aplikasi Web Teras NET pada CentOS 7

Bagaimana untuk Menggunakan Aplikasi Web Teras NET pada CentOS 7

.NET NET adalah rangka kerja pembangunan merentas platform terbuka yang disusun oleh Microsoft dan masyarakat NET yang semakin berkembang. Dengan bantuan .NE

Memasang Netdata di CentOS 7

Memasang Netdata di CentOS 7

Menggunakan Sistem yang berbeza? Netdata adalah bintang yang semakin meningkat dalam bidang pemantauan metrik sistem masa nyata. Berbanding dengan alat lain yang serupa, Netdata:

Cara Memasang Pelayan Starbound di CentOS 7

Cara Memasang Pelayan Starbound di CentOS 7

Menggunakan Sistem yang berbeza? Dalam tutorial ini, saya akan menerangkan cara menyediakan pelayan Starbound di CentOS 7. Prasyarat Anda perlu memiliki permainan ini untuk anda

Cara Memasang Django di CentOS 7

Cara Memasang Django di CentOS 7

Django adalah rangka kerja Python yang popular untuk menulis aplikasi web. Dengan Django, anda dapat membina aplikasi dengan lebih cepat, tanpa mencipta semula roda. Sekiranya anda mahu

Sediakan Pelayan multipemain SA-MP San Andreas di CentOS 6

Sediakan Pelayan multipemain SA-MP San Andreas di CentOS 6

Selamat datang ke tutorial Vultr yang lain. Di sini, anda akan belajar cara memasang dan menjalankan pelayan SAMP. Panduan ini ditulis untuk CentOS 6. Prasyarat Anda akan hadir

Memasang Revive Adserver di CentOS 7

Memasang Revive Adserver di CentOS 7

Revive Adserver adalah sistem penayangan iklan sumber terbuka dan bebas yang dapat digunakan untuk mengelola iklan di laman web, dalam aplikasi, dan / atau dalam pemutar video. Dalam artikel ini,

Cara Memasang Parse Server di CentOS 7

Cara Memasang Parse Server di CentOS 7

Parse Server adalah alternatif sumber terbuka untuk perkhidmatan backend Parse yang sedang ditutup. Sekiranya anda peminat perkhidmatan ini, anda masih boleh menikmati perkhidmatan ini

Pasang Elgg di CentOS 7

Pasang Elgg di CentOS 7

Menggunakan Sistem Berbeza? Elgg adalah mesin rangkaian sosial sumber terbuka yang membolehkan penciptaan persekitaran sosial seperti rangkaian sosial kampus dan

Cara Memasang dan Mengkonfigurasi Caddy di CentOS 7

Cara Memasang dan Mengkonfigurasi Caddy di CentOS 7

Pengenalan Caddy adalah program pelayan web yang muncul dengan sokongan asli untuk HTTP / 2 dan HTTPS automatik. Dengan kemudahan penggunaan dan keselamatan, Caddy dapat b

Terapkan Kubernetes Dengan Kubeadm di CentOS 7

Terapkan Kubernetes Dengan Kubeadm di CentOS 7

Gambaran Keseluruhan Artikel ini dimaksudkan untuk membantu anda mendapatkan cluster Kubernet dan berjalan dengan kubeadm dalam waktu singkat. Panduan ini akan menggunakan dua pelayan, di

Tingkatkan Produktiviti dengan Z dan Zsh di CentOS

Tingkatkan Produktiviti dengan Z dan Zsh di CentOS

Pengenalan Mengendalikan sistem Linux bermaksud seseorang menggunakan baris perintah lebih kerap daripada tidak. Perlu menaip nama direktori panjang berulang-ulang sebagai wel

Cara Memasang OpenCart Pada Pelayan LEMP Vultr

Cara Memasang OpenCart Pada Pelayan LEMP Vultr

OpenCart adalah penyelesaian keranjang belanja sumber terbuka yang popular yang direka untuk memberikan fungsi, kemudahan penggunaan, dan penampilan yang sangat baik. Dengan OpenCart, anda pasti

Siapkan Sails.js untuk Pembangunan di CentOS 7

Siapkan Sails.js untuk Pembangunan di CentOS 7

Menggunakan Sistem Berbeza? Pengenalan Sails.js adalah rangka kerja MVC untuk Node.js, mirip dengan Ruby on Rails. Ia menjadikan untuk mengembangkan aplikasi moden

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.

Janji Teknologi Yang Masih Tidak Ditepati

Janji Teknologi Yang Masih Tidak Ditepati

Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.

Fungsi Lapisan Seni Bina Rujukan Data Besar

Fungsi Lapisan Seni Bina Rujukan Data Besar

Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut