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 ]