redis集群搭建以及在SpringBoot中的配置


redis的安裝:https://www.cnblogs.com/knightdreams6/p/11270400.html

集群搭建:

兩台虛擬機模擬6個節點,一台機器3個節點,創建3 master, 3 salve 環境

redis采用 redis-5.0.5版本。

兩台虛擬機都是CentOS7,一台ip(192.168.3.222),另一台(192.168.3.223)

1.首先在192.168.3.222機器上 

  進入到/usr/local/bin中,mkdir redis-cluster 創建集群文件夾,然后在該文件夾下創建3個子文件夾,根據端口號命名(非必須)為7000,7001,7002

2.復制 redis.conf 到7000, 7001, 7002三個文件夾中

3.修改這三個配置文件,修改如下內容

port  7000                             // 端口7000,7002,7003        
bind 本機ip                             // 默認ip為127.0.0.1 需要改為其他節點機器可訪問的ip 否則創建集群時無法訪問對應的端口,無法創建集群
daemonize    yes                       // redis后台運行
pidfile  /var/run/redis_7000.pid       // pidfile文件對應7000,7001,7002
cluster-enabled  yes                   // 開啟集群  把注釋#去掉
cluster-config-file  nodes_7000.conf   // 集群的配置  配置文件首次啟動自動生成 7000,7001,7002
cluster-node-timeout  15000            // 請求超時  默認15秒,可自行設置
appendonly  yes   

4.啟動這三個redis

在 /usr/local/bin 目錄下

redis-server redis-cluster/7000/redis.conf
redis-server redis-cluster/7001/redis.conf
redis-server redis-cluster/7002/redis.conf

使用 ps -ef|grep redis  可以查看是否啟動

[root@knight01 local]# ps -ef|grep redis
root      42050      1  0 16:49 ?        00:00:01 redis-server 192.168.3.222:7000 [cluster]
root      42055      1  0 16:49 ?        00:00:01 redis-server 192.168.3.222:7001 [cluster]
root      42060      1  0 16:49 ?        00:00:02 redis-server 192.168.3.222:7002 [cluster]
root      42435  40487  0 17:21 pts/1    00:00:00 grep --color=auto redis

其中的196.168.3.222是其它機器可以訪問的ip地址,也是redis.conf中 bind 后面的ip值

5.再另一台虛擬機上按照以上步驟創建名為 7003 7004 7005的文件夾,然后修改配置文件並啟動

6.安裝ruby環境(集群命令需要此)

// 會在/etc/yum.repos.d/目錄下多出一個CentOS-SCLo-scl-rh.repo源
yum install centos-release-scl-rh

// 直接yum安裝即可
yum install rh-ruby23  -y

// 必要一步
scl  enable  rh-ruby23 bash

//查看安裝版本
ruby -v

// 安裝redis所需的
gem install redis

7.開啟相應端口,redis集群驗證在當前端口基礎上加 10000

 

 
         
firewall-cmd --zone=public --add-port=7000/tcp --permanent 
firewall-cmd --zone=public --add-port=7001/tcp --permanent 
...
firewall-cmd --zone=public --add-port=7005/tcp --permanent 
 
firewall-cmd --zone=public --add-port=17000/tcp --permanent 

firewall-cmd --zone=public --add-port=17001/tcp --permanent 

...

firewall-cmd --zone=public --add-port=17005/tcp --permanent 

8.創建集群

在 /usr/local/bin 下運行以下命令

redis-cli --cluster create 192.168.3.222:7000 192.168.3.222:7001 192.168.3.222:7002 192.168.3.223:7003 192.168.3.223:7004 192.168.3.223:7005 --cluster-replicas 1

然后輸入 yes,連接成功

9. 簡單說一下原理

redis cluster在設計的時候,就考慮到了去中心化,去中間件,也就是說,集群中的每個節點都是平等的關系,都是對等的,每個節點都保存各自的數據和整個集群的狀態。每個節點都和其他所有節點連接,而且這些連接保持活躍,這樣就保證了我們只需要連接集群中的任意一個節點,就可以獲取到其他節點的數據。

Redis 集群沒有並使用傳統的一致性哈希來分配數據,而是采用另外一種叫做哈希槽 (hash slot)的方式來分配的。redis cluster 默認分配了 16384 個slot,當我們set一個key 時,會用CRC16算法來取模得到所屬的slot,然后將這個key 分到哈希槽區間的節點上,具體算法就是:CRC16(key) % 16384。所以我們在測試的時候看到set 和 get 的時候,直接跳轉到了7000端口的節點。

Redis 集群會把數據存在一個 master 節點,然后在這個 master 和其對應的salve 之間進行數據同步。當讀取數據時,也根據一致性哈希算法到對應的 master 節點獲取數據。只有當一個master 掛掉之后,才會啟動一個對應的 salve 節點,充當 master 。

需要注意的是:必須要3個或以上的主節點,否則在創建集群時會失敗,並且當存活的主節點數小於總節點數的一半時,整個集群就無法提供服務了。

 

---------------------------------------------------------------------------------------------------------------------------------------   分割線  ----------------------------------------------------------------------------------------------------------------------------------------------

springBoot配置redis集群 我使用的是 yaml格式,properties格式的自行修改

spring: 
   redis:
    cluster:
      nodes: 192.168.3.222:7000,192.168.3.222:7001,192.168.3.222:7002,192.168.3.223:7003,192.168.3.223:7004,192.168.3.223:7005
    ## 連接超時時間(毫秒)
    timeout: 5000
    lettuce:
      pool:
        max-active: 8
        # 連接池阻塞等待時間(負值表示沒有限制)
        max-wait: -1ms
        # 連接池中的最大空閑連接
        max-idle: 8
        # 連接池中最小空閑連接
        min-idle: 

有任何問題可聯系 knightdreams6@163.com

 該博文的編寫參考自[ https://www.cnblogs.com/wuxl360/p/5920330.html ]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM