2020前端面試
阿新 • • 發佈:2020-12-16
Redis叢集
為什麼要部署Redis叢集
■ 單節點Redis伺服器帶來的問題
● 單點故障,服務不可用
● 無法處理大量的併發資料請求
● 資料丟失—大災難
■ 解決方法
● 搭建Redis叢集
建議數量最好大於3並且是基數
Redis叢集介紹
■ Redis叢集是一個提供在多個Redis間節點間共享資料的程式集
■ Redis叢集並不支援處理多個keys的命令,因為這需要在不同的節點間移動資料,從而達不到像Redis那樣的效能,在高負載的情況下可能會導致不可預料的錯誤
■ Redis叢集通過分割槽來提供—定程度的可用性,在實際環境中當某個節點宕機或者不可達的情況下可繼續處理命令
Redis叢集的優勢
■ 自動分割資料到不同的節點上
■ 整個叢集的部分節點失敗或者不可達的情況下能夠繼續處理命令
Redis叢集的實現方法
■ 有客戶端分片
■ 代理分片
■ 伺服器端分片
Redis-Cluster資料分片
■ Redis叢集沒有使用一致性hash,而是引入了雜湊槽概念
■ Redis叢集有16384個雜湊槽
■ 每個key通過CRC16校驗後對16384取模來決定放置槽
■ 叢集的每個節點負責一部分雜湊槽
■ 以3個節點組成的叢集為例
● 節點A包含0到5500號雜湊槽
● 節點B包含5501到11000號雜湊槽
● 節點C包含11001到16383號雜湊槽
■ 支援新增或者刪除節點
● 新增刪除節點無需停止服務
● 例如
◆ 如果想新添加個節點D,需要移動節點A,B,C中的部分槽到D上
◆ 如果想移除節點A,需要將A中的槽移到B和C節點上,再將沒有任何槽的A節點從叢集中移除
Redis-Cluster的主從複製模型
■ 叢集中具有A,B,C三個節點,如果節點B失敗了,整個叢集就會因缺少5501-11000這個範圍的槽而不可用
■ 為每個節點新增一個從節點A1,B1,C1,整個叢集便有三個master節點和三個slave節點組成,在節點B失敗後,叢集便會選舉B1為新的主節點繼續服務
■ 當B和B1都失敗後,叢集將不可用
部署Redis叢集
拓補圖
1.將安裝包放入伺服器中
2.安裝redis(共六臺)
使用Xshell 工具→傳送鍵輸入到所有會話
[root@master1 ~]# systemctl stop firewalld
[root@master1 ~]# setenforce 0
[root@master1 ~]# tar zxvf redis-5.0.4.tar.gz
[root@master1 ~]# cd redis-5.0.4/
[root@master1 ~]# make
[root@master1 redis-5.0.4]# make PREFIX=/usr/local/redis install
[root@master1 ~]# ln -s /usr/local/redis/bin/* /usr/local/bin
[root@master1 ~]# cd redis-5.0.4/utils
[root@master1 utils]# ./install_server.sh #回車
[root@master1 utils]# netstat -anptu | grep redis
3.修改各個redis的6379.conf配置檔案,共6臺
[root@slave3 utils]# vi /etc/redis/6379.conf
cluster-enabled yes #刪除#註釋
appendonly yes #將no改為yes
cluster-config-file nodes-6379.conf #刪除#註釋
cluster-node-timeout 15000 #刪除#註釋
cluster-require-full-coverage yes #刪除#註釋
取消輸入所有回話
bind 192.168.10.10 #bind後面改為各個主機的IP
地址
開啟輸入所有回話,並儲存退出配置檔案
[root@slave3 utils]# cd
[root@slave3 ~]# /etc/init.d/redis_6379 stop #修改完配置需要重啟服務
[root@slave3 ~]# /etc/init.d/redis_6379 start
取消輸入所有回話
4.在192.168.10.10伺服器上,使用指令碼建立群集
[root@master1 ~]# yum -y install ruby rubygems
[root@master1 ~]# gem install redis-
[root@master1 ~]# gem install redis-3.2.0.gem
Successfully installed redis-3.2.0
Parsing documentation for redis-3.2.0
Installing ri documentation for redis-3.2.0
1 gem installed
[root@master1 ~]# redis-cli --cluster create --cluster-replicas 1 192.168.10.10:6379 192.168.10.30:6379 192.168.10.50:6379 192.168.10.20:6379 192.168.10.40:6379 192.168.10.60:6379 #建立群集,IP地址主在前,從在後
Can I set the above configuration? (type 'yes' to accept): yes #輸入yes
5.測試群集
在192.168.10.10伺服器上
[root@master1 ~]# redis-cli -h 192.168.10.10 -p 6379 -c
192.168.10.10:6379> set centos 55
OK
192.168.10.10:6379> get centos
"55"
在192.168.10.30伺服器上
[root@master2 ~]# redis-cli -h 192.168.10.30 -p 6379 -c
192.168.10.30:6379> get centos
-> Redirected to slot [467] located at 192.168.10.10:6379 #資料在192.168.10.10中467雜湊槽位上
"55"
在192.168.10.10伺服器上
192.168.10.10:6379> cluster info #檢視群集資訊
192.168.10.10:6379> cluster nodes