Konfigurasikan sesi lengket untuk Classic Load Balancer - Penyeimbang Beban Elastis

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan sesi lengket untuk Classic Load Balancer

Secara default, Classic Load Balancer merutekan setiap permintaan secara independen ke instance terdaftar dengan beban terkecil. Namun, Anda dapat menggunakan fitur sesi lengket (juga dikenal sebagai afinitas sesi), yang memungkinkan penyeimbang beban untuk mengikat sesi pengguna ke instance tertentu. Ini memastikan bahwa semua permintaan dari pengguna selama sesi dikirim ke instance yang sama.

Kunci untuk mengelola sesi lengket adalah menentukan berapa lama penyeimbang beban Anda harus secara konsisten merutekan permintaan pengguna ke instance yang sama. Jika aplikasi Anda memiliki cookie sesi sendiri, maka Anda dapat mengonfigurasi Elastic Load Balancing sehingga cookie sesi mengikuti durasi yang ditentukan oleh cookie sesi aplikasi. Jika aplikasi Anda tidak memiliki cookie sesi sendiri, maka Anda dapat mengonfigurasi Elastic Load Balancing untuk membuat cookie sesi dengan menentukan durasi lengket Anda sendiri.

Elastic Load Balancing membuat cookie, bernama AWSELB, yang digunakan untuk memetakan sesi ke instance.

Persyaratan
  • SebuahHTTP/HTTPSload balancer.

  • Setidaknya satu contoh sehat di setiap Availability Zone.

Kompatibilitas
  • Properti RFC for the path cookie memungkinkan garis bawah. Namun, Elastic Load Balancing URI mengkodekan karakter garis bawah %5F karena beberapa browser, seperti Internet Explorer 7, mengharapkan garis bawah untuk dikodekan sebagai. URI %5F Karena potensi untuk mempengaruhi browser yang saat ini bekerja, Elastic Load Balancing terus URI menyandikan karakter garis bawah. Misalnya, jika cookie memiliki propertipath=/my_path, Elastic Load Balancing mengubah properti ini dalam permintaan yang diteruskan ke. path=/my%5Fpath

  • Anda tidak dapat mengatur secure bendera atau HttpOnly bendera pada cookie lengket sesi berbasis durasi Anda. Namun, cookie ini tidak mengandung data sensitif. Perhatikan bahwa jika Anda menyetel secure bendera atau HttpOnly bendera pada cookie lengket sesi yang dikendalikan aplikasi, itu juga diatur pada cookie. AWSELB

  • Jika Anda memiliki titik koma di Set-Cookie bidang cookie aplikasi, penyeimbang beban mengabaikan cookie.

Kelengketan sesi berbasis durasi

Penyeimbang beban menggunakan cookie khusus, AWSELB, untuk melacak instance untuk setiap permintaan ke setiap pendengar. Ketika penyeimbang beban menerima permintaan, pertama-tama penyeimbang beban memeriksa apakah cookie ini ada di permintaan. Jika demikian, permintaan dikirim ke instance yang ditentukan dalam cookie. Jika tidak ada cookie, load balancer memilih instance berdasarkan algoritma load balancing yang ada. Cookie dimasukkan ke dalam respons untuk mengikat permintaan berikutnya dari pengguna yang sama ke instance itu. Konfigurasi kebijakan stickiness mendefinisikan kedaluwarsa cookie, yang menetapkan durasi validitas untuk setiap cookie. Penyeimbang beban tidak menyegarkan waktu kedaluwarsa cookie dan tidak memeriksa apakah cookie kedaluwarsa sebelum menggunakannya. Setelah cookie kedaluwarsa, sesi tidak lagi lengket. Klien harus menghapus cookie dari toko cookie setelah kedaluwarsa.

Dengan permintaan CORS (berbagi sumber daya lintas asal), beberapa browser SameSite=None; Secure perlu mengaktifkan kekakuan. Dalam hal ini, Elastic Load Balancing membuat cookie lengket kedua AWSELBCORS, yang mencakup informasi yang sama dengan cookie lengket asli ditambah atribut ini. SameSite Klien menerima kedua cookie.

Jika sebuah instance gagal atau menjadi tidak sehat, penyeimbang beban menghentikan permintaan routing ke instance tersebut, dan memilih instance sehat baru berdasarkan algoritma load balancing yang ada. Permintaan dialihkan ke instance baru seolah-olah tidak ada cookie dan sesi tidak lagi lengket.

Jika klien beralih ke pendengar dengan port backend yang berbeda, kekakuan akan hilang.

Untuk mengaktifkan sesi lengket berbasis durasi untuk penyeimbang beban menggunakan konsol
  1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

  2. Pada panel navigasi, di bawah PENYEIMBANGAN BEBAN, pilih Penyeimbang beban.

  3. Pilih nama penyeimbang beban untuk membuka halaman detailnya.

  4. Pada tab Listeners, pilih Kelola pendengar.

  5. Pada halaman Kelola pendengar, cari listener yang akan diperbarui dan pilih Edit di bawah Cookie stickiness.

  6. Pada pop-up pengaturan lengket Edit cookie, pilih Dihasilkan oleh penyeimbang beban.

  7. (Opsional) Untuk periode kedaluwarsa, ketikkan periode kedaluwarsa cookie, dalam hitungan detik. Jika Anda tidak menentukan periode kedaluwarsa, sesi lengket berlangsung selama sesi browser.

  8. Pilih Simpan perubahan untuk menutup jendela pop-up.

  9. Pilih Simpan perubahan untuk kembali ke halaman detail penyeimbang beban.

Untuk mengaktifkan sesi lengket berbasis durasi untuk penyeimbang beban menggunakan AWS CLI
  1. Gunakan perintah create-lb-cookie-stickiness-policy berikut untuk membuat kebijakan lengket cookie yang dihasilkan load balancer dengan periode kedaluwarsa cookie 60 detik:

    aws elb create-lb-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-duration-cookie-policy --cookie-expiration-period 60
  2. Gunakan perintah set-load-balancer-policies-of-listener berikut untuk mengaktifkan kekakuan sesi untuk penyeimbang beban yang ditentukan:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-duration-cookie-policy
    catatan

    set-load-balancer-policies-of-listenerPerintah menggantikan kumpulan kebijakan saat ini yang terkait dengan port penyeimbang beban yang ditentukan. Setiap kali Anda menggunakan perintah ini, tentukan --policy-names opsi untuk mencantumkan semua kebijakan yang akan diaktifkan.

  3. (Opsional) Gunakan describe-load-balancersperintah berikut untuk memverifikasi bahwa kebijakan diaktifkan:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer

    Respons mencakup informasi berikut, yang menunjukkan bahwa kebijakan diaktifkan untuk listener pada port yang ditentukan:

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-duration-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... ], ... "Policies": { "LBCookieStickinessPolicies": [ { "PolicyName": "my-duration-cookie-policy", "CookieExpirationPeriod": 60 } ], "AppCookieStickinessPolicies": [], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }

Kelengketan sesi yang dikontrol aplikasi

Penyeimbang beban menggunakan cookie khusus untuk mengaitkan sesi dengan instance yang menangani permintaan awal, tetapi mengikuti masa pakai cookie aplikasi yang ditentukan dalam konfigurasi kebijakan. Load balancer hanya menyisipkan cookie lengket baru jika respons aplikasi menyertakan cookie aplikasi baru. Cookie lengket penyeimbang beban tidak diperbarui dengan setiap permintaan. Jika cookie aplikasi dihapus atau kedaluwarsa secara eksplisit, sesi berhenti menjadi lengket sampai cookie aplikasi baru dikeluarkan.

Atribut berikut yang ditetapkan oleh instans back-end dikirim ke klien dalam cookie:path,,,,,,,,,port,,domain,secure,,httponly,discard,,max-age,expires, versioncomment, commenturl dan. samesite

Jika sebuah instance gagal atau menjadi tidak sehat, penyeimbang beban menghentikan permintaan routing ke instance tersebut, dan memilih instance sehat baru berdasarkan algoritma load balancing yang ada. Penyeimbang beban memperlakukan sesi sebagai sekarang “macet” ke instance sehat baru, dan melanjutkan permintaan perutean ke instance itu bahkan jika instance yang gagal kembali.

Untuk mengaktifkan kelengketan sesi yang dikontrol aplikasi menggunakan konsol
  1. Buka EC2 konsol Amazon di https://console.aws.amazon.com/ec2/.

  2. Pada panel navigasi, di bawah PENYEIMBANGAN BEBAN, pilih Penyeimbang beban.

  3. Pilih nama penyeimbang beban untuk membuka halaman detailnya.

  4. Pada tab Listeners, pilih Kelola pendengar.

  5. Pada halaman Kelola pendengar, cari listener yang akan diperbarui dan pilih Edit di bawah Cookie stickiness.

  6. Pilih Dihasilkan oleh aplikasi.

  7. Untuk Nama Cookie, ketikkan nama cookie aplikasi Anda.

  8. Pilih Simpan perubahan.

Untuk mengaktifkan kelengketan sesi yang dikontrol aplikasi menggunakan AWS CLI
  1. Gunakan perintah create-app-cookie-stickiness-policy berikut untuk membuat kebijakan lengket cookie yang dihasilkan aplikasi:

    aws elb create-app-cookie-stickiness-policy --load-balancer-name my-loadbalancer --policy-name my-app-cookie-policy --cookie-name my-app-cookie
  2. Gunakan perintah set-load-balancer-policies-of-listener berikut untuk mengaktifkan kekakuan sesi untuk penyeimbang beban:

    aws elb set-load-balancer-policies-of-listener --load-balancer-name my-loadbalancer --load-balancer-port 443 --policy-names my-app-cookie-policy
    catatan

    set-load-balancer-policies-of-listenerPerintah menggantikan kumpulan kebijakan saat ini yang terkait dengan port penyeimbang beban yang ditentukan. Setiap kali Anda menggunakan perintah ini, tentukan --policy-names opsi untuk mencantumkan semua kebijakan yang akan diaktifkan.

  3. (Opsional) Gunakan describe-load-balancersperintah berikut untuk memverifikasi bahwa kebijakan lengket diaktifkan:

    aws elb describe-load-balancers --load-balancer-name my-loadbalancer
  4. Respons mencakup informasi berikut, yang menunjukkan bahwa kebijakan diaktifkan untuk listener pada port yang ditentukan:

    { "LoadBalancerDescriptions": [ { ... "ListenerDescriptions": [ { "Listener": { "InstancePort": 443, "SSLCertificateId": "arn:aws:iam::123456789012:server-certificate/my-server-certificate", "LoadBalancerPort": 443, "Protocol": "HTTPS", "InstanceProtocol": "HTTPS" }, "PolicyNames": [ "my-app-cookie-policy", "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, { "Listener": { "InstancePort": 80, "LoadBalancerPort": 80, "Protocol": "TCP", "InstanceProtocol": "TCP" }, "PolicyNames": [] } ], ... "Policies": { "LBCookieStickinessPolicies": [], "AppCookieStickinessPolicies": [ { "PolicyName": "my-app-cookie-policy", "CookieName": "my-app-cookie" } ], "OtherPolicies": [ "ELBSecurityPolicy-TLS-1-2-2017-01" ] }, ... } ] }