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