Spring-Redis 集羣環境搭建

前言

     首先了解一下redis目錄下的文件,如下圖:

   1.redis.conf是Redis啓動時的需要用到的配置。啓動Redis的過程如下:
  src/redis-server redis.conf
  即可成功執行。
  2.sentinel.conf是Redis的哨兵配置,啓動哨兵的過程如下:
  src/redis-sentinel sentinel.conf
  注:以上命令使用root權限執行,在圖中所示的路徑下(即redis根目錄,實際上redis-server、redis-cli、redis-sentinel等命令在src下,保持命令和配置文件的路徑都正確即可)打開終端執行命令。

一、Sentinel模式

1. Linux Sentinel搭建

  1.1 配置redis.conf

   redis.config中把配置劃分的很清楚,每部分用下面的方式劃分開,如下圖示例: 

 第一步:找到NETWORK選項,將下圖中的bind註釋掉 。目的:防止遠端IP無法訪問。
  
 第二步:還是NETWORK部分,找到protected-mode部分,將yes改爲no。目的:防止保護模式開啓造成的遠端IP無法訪問的問題。
 
 第三步(可選):在 APPEND ONLY MODE下,把appendonly 設置爲 yes。目的:使用redis的AOF快照方式進行持久化。  
 
 說明:redis中的其他配置,自選進行配置,配置在配置文件的各部分中都有詳細的英文說明。
 1.2 配置sentinel.conf
 第一步:將protected-mode設置爲no,如下圖。目的:防止保護模式開啓造成的遠端IP無法獲得sentinel的問題。
 
 第二步:配置監控的對象。找到sentinel monitor ...部分,如下圖。設置被監控的主庫IP, 端口號,主庫掛掉時,哨兵同意進行恢復的數量。其中“mymaster”爲自定義的主庫名,redis默認定義爲mymaster。如果想改成別的名字,記得在配置中把其他使用了mymsater的位置一併修改。
 
 1.3 配置從庫的redis.config
 在1.1的基礎上,只需要在REPLICATION部分,找到下圖位置,設置要跟隨的主庫的IP地址和端口即可。
 
 注意:這裏要寫主庫的實際IP地址,不要寫127.0.0.1這個本地測試地址。在後續的java使用中,會出現問題:redis數據存儲在了java程序運行位置的機器上。具體原因:沒有深究。

2.Spring 和 Redis Sentinel整合

  這裏的過程參考了,感謝原作者的付出 http://blog.csdn.net/qq_34021712/article/details/75949706
項目demo放在了GitHub上,地址:https://github.com/BigOrange1994/SpringBootLearn.git
  大致過程說明:
  2.1 配置spring-redis.xml
  第一步:配置JedisConnectionFactory,用於建立連接 
  第二步:配置JedisPoolConfig,以後從這個池子裏拿連接
  第三步:配置RedisSentinelConfiguration,用於設置sentinel相關
  第四步:配置RedisTemplate,Spring提供的高抽象級別的、具有更高交互性的redis操作模板
  2.2 由於項目使用了Spring Boot而不是 http://blog.csdn.net/qq_34021712/article/details/75949706這篇教程中說的Spring MVC ,所以使用瞭如下類增加Spring Boot對xml的支持。(也可以使用Spring Boot中相關的註解代替xml,由於我本身剛深入學習,暫時沒去尋找相關注解和類)
  2.3 使用RedisTemplate完成RedisUtil工具類。
  2.4 項目結構。 
 
  2.5 運行結果
  如果在啓動時,看到如下的配置,說明你的配置都沒有問題了,可以用自定義的RedisUtil中的方法測試。
 運行結果:  

二、Cluster模式

1. Linux Redis Cluster搭建

    Cluster模式至少需要“三主三從”(即:三個主庫三個從庫),方可搭建集羣。開啓6個redis實例即可。每個實例只需要配置redis即可。不需要指定誰是主庫誰是從庫。在之後的步驟裏,會進行說明。
  1.1 配置redis.conf
    在第一部分Sentinel模式的1.1的基礎上,只需要在REDIS CLUSTER部分,找到下圖位置,設置集羣模式爲yes即可。

 1.2 設置redis的端口號(可選, 如果6個redis實例的IP相同,則需要配置不同的端口號)
 在NETWORK部分,找到下圖位置,設置端口號即可。

 1.3 藉助redis.trib.rb完成集羣初始化
 在linux 終端下,使用下圖紅框命令,安裝輔助工具。
 安裝完成後,使用命令:
 src/redis-trib.rb create --replicas 1 192.168.92.128:6379 192.168.92.131:6379 192.168.92.132:6379 192.168.92.132:6380 192.168.92.132:6381 192.168.92.132:6382
 replicas 後面的 1 代表分配每個主庫多少個從庫。這就回答了,爲什麼不需要像sentinel那樣指定哪個從庫跟隨哪個主庫。因爲已經自動配置好了。
 執行後會詢問你一個問題:Can I set the above configuration? (type 'yes' to accept): 此時,輸入yes即可。集羣就搭建好了。如下圖:

 期間遇到的錯誤有:
 問題1:

 問題2:

 以上問題,將redis目錄下的如下圖所示的三個文件刪除即可。重新執行上述集羣搭建命令。 
 
 問題3:

  原因:redis實例數少於6
 
 1.4 使用Redis客戶端查看集羣
 
 發現,集羣中只有索引爲0的數據庫了。完美。

2.Spring 和 Redis Cluster整合

  這裏的過程參考了,感謝原作者的付出 http://www.sojson.com/blog/203.html
項目demo也放在了GitHub上,地址也是:https://github.com/BigOrange1994/SpringBootLearn.git
  大致過程說明:
  2.1 配置spring-redis-cluster.xml
  第一步:配置JedisConnectionFactory,用於建立連接 
  第二步:配置JedisPoolConfig,以後從這個池子裏拿連接
  第三步:RedisClusterConfiguration,用於配置redis cluster集羣相關
  第四步:配置RedisTemplate,Spring提供的高抽象級別的、具有更高交互性的redis操作模板
  2.2 項目結構
 
   2.3 測試和結論
   測試代碼:
  測試結果: 

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章