สาเหตุของเหตุการณ์: มีโปรเจ็กต์หลัก "รูปภาพอธิบายสิ่งสวยงาม" และฟังก์ชันย่อยอีกอย่างคือฟังก์ชันการเข้าของเจ้าของแบรนด์ ซึ่งเป็นโปรเจ็กต์ที่แยกจากโปรเจ็กต์หลัก เพื่อแชร์ข้อมูลผู้ใช้ที่เข้าสู่ระบบ เซสชั่น มีการใช้งานการแบ่งปัน Tomcats สองตัว Tomcat6 หนึ่งตัว Tomcat7
ตระหนักถึงการแบ่งปันเซสชั่นภายใต้ระบบ windows โครงการเว็บ
ขั้นตอนแรก:
กำหนดค่าโค้ดต่อไปนี้ในไฟล์ context.xml ของ Tomcat ทั้งสอง:
<ผู้จัดการ className = "de.javakaffee.web.msm.MemcachedBackupSessionManager"memcachedNodes = "n1:127.0.0.1:11211"lockingMode = "auto"sticky = "true"requestUriIgnorePattern = ".*/. (ico |png | gif | jpg | css|เจ s)$"sessionBackupAsync = "false" sessionBackupTimeout = "100" transcoderFactoryClass = "de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"copyCollectionsForSerialization = "true"/>
ขั้นตอนที่สอง:
เพิ่มแพ็คเกจ Jar ภายใต้ Tomcat6:
เพิ่มแพ็คเกจ Jar ภายใต้ tomcat7:
PS: ใช้ memcache เพื่อบันทึกเซสชัน Tomcat
วัตถุประสงค์หลักของการเขียนบทความนี้คือเพื่อแก้ไขข้อผิดพลาดบางอย่างบนอินเทอร์เน็ต
ข้อกำหนดเบื้องต้น:
1. memcached ทำงานได้ตามปกติ
2. Tomcat ทำงานได้ตามปกติ
1. วิธีการติดตั้งและแพ็คเกจการติดตั้ง
javolution-5.4.3.1.ขวดโหล
memcached-2.4.2.jar
memcached-เซสชันผู้จัดการ-1.3.0.jar
msm-javolution-serializer-cglib-1.3.0.jar
msm-javolution-serializer-jodatime-1.3.0.jar
วิธีการติดตั้ง: ใส่แพ็คเกจเหล่านี้ใน /usr/local/tomcat6.0/lib
2. แก้ไขไฟล์การกำหนดค่า Tomcat
<นี่เป็นสิ่งสำคัญเนื่องจากบทความส่วนใหญ่บนอินเทอร์เน็ตพูดถึงการแก้ไขการกำหนดค่าในเซิร์ฟเวอร์ ปัจจุบันพบว่าการแก้ไขไฟล์ context.xml สามารถทำให้เซสชันเข้าสู่ memcache ได้ทันที -
# vim /usr/local/tomcat6.0/conf/context.xml <บริบท> <!-- เพิ่มเนื้อหาต่อไปนี้ใต้ฟิลด์นี้ โปรดกรอก IP เซิร์ฟเวอร์ memcached และหมายเลขพอร์ตของคุณเมื่อเข้าสู่โหนด --> <Manager className = "de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes = "n1:10.254.41.197:11211" requestUriIgnorePattern = ".*/. (png | gif | jpg | css | js) $" sessionBackupAsync = "false" sessionBackupTimeout = "100" transcoderFactoryClass = "de.javakaffee.web.msm.serializer.javolution.JvolutionTranscoderFactory" copyCollectionsForSerialization = "false" /> </บริบท>
3. จะทดสอบอย่างไร?
วิธีการทดสอบปัจจุบันของฉันคือการใช้โหลดบาลานซ์ผ่าน mod_jk ของ apache (เขียนในบทความก่อนหน้า) และเปิดใช้งานการจำลองเซสชันระหว่าง Tomcats
ผลลัพธ์ก็คือ ID การเข้าดูจะเปลี่ยนโหนดตามการส่งของผู้ใช้แต่ละครั้ง แต่ ID จะไม่เปลี่ยนแปลง
ตัวอย่างเช่น:
ไอดี CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat2
การส่งครั้งต่อไปจะกลายเป็น: <โหนดถูกสลับ แต่ ID ยังคงไม่เปลี่ยนแปลง>
ไอดี CFC1ACAC6B0B8C27BEA76919F3A99BF8-n1.tomcat1
เมื่อรวมกับสถานะของ memcache: <เมื่อฉันล้มเหลวในการส่งเซสชันไปที่ memcached ได้สำเร็จ cmd_set คือ 0>
# perl memcached-tool.pl 10.254.41.197:11211 สถิติ
cmd_get 27
cmd_set15
get_hits 12
# perl memcached-tool.pl 10.254.41.197:11211 สถิติ
cmd_get 31
cmd_set17
get_hits 14
ฉันคิดว่าจากการตัดสินข้างต้น การกำหนดค่าสำเร็จแล้ว!