ขั้นแรกให้สร้างโฟลเดอร์ Redis-Cluster:
เนื่องจาก Redis ต้องการอย่างน้อย 6 โหนด (สามเจ้านายและสามทาส) เพื่อความเข้าใจที่ดีขึ้นฉันได้สร้างเครื่องเสมือนจริงสองเครื่องที่นี่ (192.168.0.109 192.168.0.110) และสร้างโฟลเดอร์โหนดสามโฟลเดอร์ภายใต้ /opt/redis-4.0.1/redis-cluster
192.168.0.109:
192.168.0.110:
โหนดทั้งหมด 6 โหนดข้างต้นถูกสร้างขึ้นจากนั้นไฟล์การกำหนดค่า redis.conf จะถูกสร้างขึ้นในโฟลเดอร์หกโฟลเดอร์เหล่านี้และการกำหนดค่าดังแสดงในรูป:
พอร์ต 7000bind 192.168.0.109daemonize yespidfile /var/run/redis_7000.pidcluster-enabled Yescluster-config-file nodes_7000.confcluster-node-timeout 10000Appendonly ใช่
ในหมู่พวกเขาคุณจะต้องปรับเปลี่ยน port pidfile cluster-config-file ไปยังหมายเลขพอร์ตโหนดที่สอดคล้องกันและผูกกับ IP สำหรับการเข้าถึงระยะไกล หลังจากการแก้ไขทั้งหมดเสร็จสมบูรณ์คุณสามารถเริ่มบริการ Redis:
เริ่มต้นคำสั่ง:
คำสั่งภายใต้ 192.168.0.109: "สำหรับ ((i = 0; i <= 2; i ++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf;
คำสั่งภายใต้ 192.168.0.110: "สำหรับ ((i = 3; i <= 5; i ++)); do /opt/redis-4.0.1/src/redis-server /opt/redis-4.0.1/redis-cluster/700$i/redis.conf;
คุณจะเห็นว่าการพิมพ์บันทึกเริ่มต้นขึ้นในโหมดพื้นหลังและเครื่องจะต้องเริ่มโหนดทั้งหมดในเวลาสองวัน หลังจากเริ่มต้นโหนดคุณสามารถสร้างบริการคลัสเตอร์:
เรียกใช้คำสั่งต่อไปนี้บนหนึ่งในเครื่องเสมือน "/opt/redis-4.0.1/src/redis-trib.rb สร้าง-replicas 1 192.168.0.109:7000 192.168.0.109:7001 192.168.10.109:7002 192.168.0.110:7005 "
อย่าลืมเรียกใช้งานบนเครื่องเดียวเท่านั้น หากติดอยู่ที่การเข้าร่วมและไม่สามารถดำเนินการลงได้โดยทั่วไปจะเกิดจากพอร์ตไฟร์วอลล์ที่ถูกแบน มีสองวิธีในการแก้ปัญหา:
1. ไม่เพียง แต่คุณจำเป็นต้องเปิดพอร์ตภายนอก 7000 เท่านั้น แต่คุณยังต้องเปิด 17000 (เพราะต้องเพิ่มพอร์ต Redis Bus Port 1,000)
2. ปิดไฟร์วอลล์ทั้งหมดโดยตรง (เพราะฉันเป็นสภาพแวดล้อมของตัวเองที่นี่ฉันปิดบริการไฟร์วอลล์โดยตรง)
บันทึกการเรียกใช้ภาพด้านบนปรากฏขึ้นและบริการคลัสเตอร์นั้นสร้างขึ้นสำเร็จโดยทั่วไปและคุณสามารถเห็นความสัมพันธ์หลักของสลาวด์ของแต่ละโหนดได้อย่างชัดเจน หลังจากสร้างสภาพแวดล้อมเราจะใช้มันร่วมกับสถาปัตยกรรม SSM ที่ฉันเขียนเกี่ยวกับในบทความก่อนหน้า
แคช MyBaits Level 2 ที่รวมอยู่ในครั้งสุดท้ายเป็นรุ่นสแตนด์อโลน เนื่องจากวิธีนี้ไม่รองรับกลุ่มเราจะใช้ Jedis-Cluster เพื่อรวมกลุ่ม Redis และ Java
ก่อนอื่นให้เพิ่มการกำหนดค่าของเครื่องคลัสเตอร์ในไฟล์ redis.properties และเพิ่ม 6 โหนดลงในการกำหนดค่าในทางกลับกัน:
#กลุ่ม Cluster1.host.port = 192.168.0.109: 7000cluster2.host.port = 192.168.0.109: 7001cluster3.host.port = 192.168.0.109: 7002 Cluster4.host.port = 192.168.0.110: 7003cluster5.host.port = 192.168.0.110: 7004cluster6.host.port = 192.168.0.110: 7005
ไฟล์การกำหนดค่า Redis ได้เปลี่ยนไปมากจากไฟล์ก่อนหน้านี้ ฉันแสดงรายการโดยตรงและสามารถคัดลอกและใช้โดยตรง
Spring-redis.xml
<ถั่ว xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: util = "http://www.springframework.org/schema/util" xmlns: aop = "http://www.springframework.org/schema/aop" xmlns: บริบท = "http://www.springframework.org/schema/contex XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/util http://ww.springframework.org/schema/til-util http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://ww.springframework.org/schema/schema http://www.springframework.org/schema/aop/spring-aop-4.3.xsd http://www.springframework.org/schema/context การกำหนดค่าพารามิเตอร์ของพูลการเชื่อมต่อคล้ายกับพูลการเชื่อมต่อฐานข้อมูล-> <บริบท: สถานที่ตั้งคุณสมบัติ-สถานที่ตำแหน่ง = "classpath*: redis.properties" /> <name bean = "genericobjectPoolConfig"> <property name = "maxwaitmillis" value = "-1" /> name = "maxidle" value = "100"/> </ebean> <!-การกำหนดค่าพูลการเชื่อมต่อคล้ายกับพูลการเชื่อมต่อฐานข้อมูล-> <!-<bean id = "jedisconnectionFactory"> <property name = "HostName" value = "$ {redis.host}"> value = "$ {redis.pass}"> </property> <property name = "poolconfig" ref = "poolconfig"> </property> </ebean>-> <!-การกำหนดค่าการเชื่อมต่อโรงงานการเชื่อมต่อพูล-> <!-<bean id = "redistemplate"> อย่างชาญฉลาดเมื่อเก็บ หากคุณใช้ประเภทผู้ใช้ในการจัดเก็บมันจะแจ้งให้ผู้ใช้ผิดพลาดไม่สามารถส่งไปยังสตริงได้! - - <property name = "KeySerializer"> <bean/> </property> <property name = "valueserializer"> <bean/> </property> </epean> -> <bean id = "jediscluster"> <property name = "addressConfig" name = "timeout" value = "300000" /> <property name = "maxredirections" value = "6" /> <property name = "genericobjectPoolConfig" ref = "genericobjectPoolConfig" /> </ebean> </epeans>ปิดใช้งานการกำหนดค่าแคชทั้งหมดของ mybatis ในการรวม SSM+Redis ก่อนหน้านี้เพื่อเริ่มการทดสอบบริการ
ก่อนอื่นฉีด jediscluster โดยตรงเพื่อรับวัตถุคลัสเตอร์
เพื่อความสะดวกฉันได้เขียนแนวคิดง่ายๆใน Java เพื่อซิงโครไนซ์ข้อมูลและวิธีการอื่น ๆ สามารถนำไปใช้ได้เช่นการใช้งาน Spring AOP โดยใช้ปลั๊กอินของบุคคลที่สามหรือการใช้งานระดับฐานข้อมูล
หลังจากเริ่มต้นการเริ่มต้นวิธีการนี้เรียกซ้ำ ๆ คุณจะเห็นว่าคอนโซลไม่ได้พิมพ์คำสั่ง SQL แต่ได้รับข้อมูลโดยตรงในคลัสเตอร์ Redis โดยตรง อินสแตนซ์ของคลัสเตอร์ Redis Simple ข้างต้นเสร็จสมบูรณ์แล้ว เนื่องจากข้อ จำกัด ด้านเวลาฉันยังไม่ได้เขียนข้อผิดพลาดบางอย่างในรายละเอียดของ Linux
สรุป
ข้างต้นเป็นวิธีการใช้งานแบบบูรณาการของ Redis Cluster และ SSM แนะนำให้คุณรู้จัก ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!