高可用 24小時對外提供服務(wù)
高并發(fā) 同一時間段能處理的請求數(shù)
1荤傲,中心化和去中心化
1.1垮耳,中心化
意思是所有的節(jié)點都要有一個主節(jié)點
缺點:中心掛了,服務(wù)就掛了
中心處理數(shù)據(jù)的能力有限弃酌,不能把節(jié)點性能發(fā)揮到最大
特點:就是一個路由作用
1.2氨菇,去中心化
特點:去掉路由,我自己來路由
以上通俗的就是
中心化:幾個經(jīng)過認證的嘉賓在‘講話’妓湘,所有其他人在聽查蓉。
去中心化:每個人都可以‘講話’,每個人都可以選擇聽或者講榜贴。
2豌研,Redis集群的執(zhí)行流程分析
2.1,哈希槽說明
Redis 集群中內(nèi)置了 16384 個哈希槽唬党,當需要在 Redis 集群中放置一個 key-value時鹃共,redis 先對 key 使用 crc16 算法算出一個結(jié)果,然后把結(jié)果對 16384 求余數(shù)驶拱,這樣每個 key 都會對應(yīng)一個編號在 0-16383 之間的哈希槽霜浴,redis 會根據(jù)節(jié)點數(shù)量大致均等的將哈希槽映射到不同的節(jié)點。
當你往Redis Cluster中加入一個Key時蓝纲,會根據(jù)crc16(key) mod 16384計算這個key應(yīng)該分布到哪個hash slot中阴孟,一個hash slot中會有很多key和value。你可以理解成表的分區(qū)税迷,使用單節(jié)點時的redis時只有一個表永丝,所有的key都放在這個表里;改用Redis Cluster以后會自動為你生成16384個分區(qū)表箭养,你insert數(shù)據(jù)時會根據(jù)上面的簡單算法來決定你的key應(yīng)該存在哪個分區(qū)慕嚷,每個分區(qū)里有很多key。
2.2毕泌,執(zhí)行流程分析
假如redis集群里面能存放90個key喝检,那么redis集群把90key平分到3個主機
redis對每個主機里面30個存儲位置都編號,當應(yīng)用連接到主機1上面時撼泛,應(yīng)該發(fā)送一個寫的命令
主機使用crc16算出槽號
如果槽號在1-30 可以直接操作主機1
如果槽號在31-60那么redis會轉(zhuǎn)發(fā)到主機2
如果應(yīng)該再發(fā)一個命令set age 22
那么主機2使用crc16再算槽號再轉(zhuǎn)發(fā)
3挠说,Redis集群的搭建
3.1,文檔
http://redis.cn/topics/cluster-tutorial.html
3.2坎弯,原理:去中心化
3.3纺涤,集群規(guī)則
機器編號 | ip | port |
---|---|---|
1 | 192.168.120.129 | 7000 |
2 | 192.168.120.129 | 7001 |
3 | 192.168.120.129 | 7002 |
4 | 192.168.120.129 | 7003 |
5 | 192.168.120.129 | 7004 |
6 | 192.168.120.129 | 7005 |
3.4译暂,搭建過程
3.4.1 新建文件夾
3.4.2 準備一個服務(wù)端程序
3.4.3準備6個redis的配置文件
下面進入redis.conf 配置文件修改配置
Redis-1
bind 0.0.0.0 69行
port 7000 92行
daemonize yes 136行
打開aof 持久化
appendonly yes 672行
開啟集群
cluster-enabled yes 814行
集群的配置文件,該文件自動生成
cluster-config-file nodes-7000.conf 822行
集群的超時時間
cluster-node-timeout 5000 828行
Redis-2
daemonize yes
bind 0.0.0.0
port 7001
打開aof 持久化
appendonly yes
開啟集群
cluster-enabled yes
集群的配置文件,該文件自動生成
cluster-config-file nodes-7001.conf
集群的超時時間
cluster-node-timeout 5000
Redis-3
daemonize yes
bind 0.0.0.0
port 7002
打開aof 持久化
appendonly yes
開啟集群
cluster-enabled yes
集群的配置文件,該文件自動生成
cluster-config-file nodes-7002.conf
集群的超時時間
cluster-node-timeout 5000
Redis-4
daemonize yes
bind 0.0.0.0
port 7003
打開aof 持久化
appendonly yes
開啟集群
cluster-enabled yes
集群的配置文件,該文件自動生成
cluster-config-file nodes-7004.conf
集群的超時時間
cluster-node-timeout 5000
Redis-5
daemonize yes
bind 0.0.0.0
port 7004
打開aof 持久化
appendonly yes
開啟集群
cluster-enabled yes
集群的配置文件,該文件自動生成
cluster-config-file nodes-7005.conf
集群的超時時間
cluster-node-timeout 5000
Redis-6
daemonize yes
bind 0.0.0.0
port 7005
打開aof 持久化
appendonly yes
開啟集群
cluster-enabled yes
集群的配置文件,該文件自動生成
cluster-config-file nodes-7006.conf
集群的超時時間
cluster-node-timeout 5000
3.4.4同時啟動所有的redis
3.4.5 使用腳本創(chuàng)建集群(分配槽)
找到集群腳本,在src/src/redis-trib.rb 要安裝Ruby的環(huán)境【不推薦
3.4.6 使用docker 下載redis-trib的鏡像運行【推薦】
安裝Docker
yum install docker
啟動docker
systemctl start docker
A: 下載鏡像
docker pull inem0o/redis-trib
docker run -it --net host inem0o/redis-trib create --replicas 1
192.168.120.129:7000 192.168.120.129:7001
192.168.120.129:7002 192.168.120.129:7003
192.168.120.129:7004 192.168.120.129:7005
-it是為了可以輸入
--net host 是為了上docker容器能連接上本地的宿主機
3.4.7測試集群環(huán)境
-c 表示連接集群
到此集群搭建完成