1. 程式人生 > 其它 >2020前端面試

2020前端面試

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

在這裡插入圖片描述