Redis-cluster原理和實踐

Redis-cluster原理

1.概念原理

         Redis 集羣採用了P2P的模式,完全去中心化。Redis 把所有的 Key 分成了 16384 個 slot(哈希槽),每個 Redis 實例負責其中一部分 slot(哈希槽) 。集羣中的所有信息(節點、端口、slot等),都通過節點之間定期的數據交換而更新。Redis 客戶端可以在任意一個 Redis 實例發出請求,如果所需數據不在該實例中,通過重定向命令引導客戶端訪問所需的實例。
       當我們的存取的key到達的時候,redis會根據crc16的算法得出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,通過這個值,去找到對應的插槽所對應的節點,然後直接自動跳轉到這個對應的節點上進行存取操作。

2.原理圖

在這裏插入圖片描述

Redis-Cluster採用無中心結構,每個節點保存數據和整個集羣狀態,每個節點都和其他所有節點連接。集羣很好的吸收了主從複製和哨兵模式的優點,redis cluster
爲了保證數據的高可用性,加入了主從和哨兵模式,一個主節點對應一個或多個從節點,主節點提供數據存取,從節點則是從主節點拉取數據備份,當這個主節點掛掉後,就會有這個從節點選取一個來充當主節點,從而保證集羣不會掛掉。

注意:其中一個主節點和它的所有從節點都掛掉的情況下,整個集羣就無法正常訪問(實質:掛掉的主節點所佔哈希槽內的數據無法插入和修改,其他正常主節點還是可以使用的,但是意義不大)

3.集羣搭建

集羣搭建:最好奇數個,最少大於等於3,我們搭建三主三從。
三主三從:

192.168.223.120 從
192.168.223.131 從
192.168.223.135 主
192.168.223.140 從
192.168.223.141 主
192.168.223.142  主

在這裏插入圖片描述

3.1安裝相關環境

每個環境都安裝執行這個命令

mkdir /usr/local/redis-cluster
cd /usr/local/redis-cluster
tar -zxvf redis-3.2.9.tar.gz
cd redis-3.2.9
make
cd src
make install PREFIX=/usr/local/redis-cluster
cd ../
mkdir /usr/local/redis-cluster/etc
mv redis.conf /usr/local/redis-cluster/bin/
cd /usr/local/redis-cluster/redis-3.2.9/src
cp redis-trib.rb /usr/local/redis-cluster/
cd /usr/local/redis-cluster/bin/
yum install ruby
yum install rubygems
yum install -y rubygems 
gem install -l redis-3.2.1.gem

每個環境修改redis.conf

bind 0.0.0.0 #遠程連接
daemonize yes # 守護進程
appendonly yes
cluster-enabled yes #開啓集羣模式
cluster-config-file nodes-6379.conf #nodes-6379.conf 和端口號匹配
cluster-node-timeout 15000

每個環境都啓動

cd /usr/local/redis-cluster/bin/
./redis-server  redis.conf

在其中一個環境執行命令,開始創建管理集羣

./redis-trib.rb create --replicas 1 192.168.223.120:6379 192.168.223.135:6379 192.168.223.141:6379 192.168.223.142:6379 192.168.223.131:6379 192.168.223.140:6379

集羣相關操作

1.查看集羣情況

./redis-trib.rb check 192.168.223.142:6379

在這裏插入圖片描述
2.連接集羣

./redis-cli -c -h 127.0.0.1 -p 6379

3.插入值和獲取值
從下圖就可以看出,插入值時,經過CRC16算法不在當前節點,則重定向到相應的節點,獲取值也一樣
在這裏插入圖片描述
springboot整合redis-cluster集羣

spring:
  redis:
    database: 0
    jedis:
      pool:
        max-active: 8
        max-wait: -1
        max-idle: 8
        min-idle: 0
    timeout: 10000
    cluster:
      nodes:
        - 192.168.223.120:6379
        - 192.168.223.131:6379
        - 192.168.223.135:6379
        - 192.168.223.135:6380
        - 192.168.223.140:6379
        - 192.168.223.141:6379
        - 192.168.223.142:6379
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章