NoSQL之Redis叢集搭建——6臺伺服器,三臺主伺服器,三臺從伺服器

EAsonTX發表於2020-11-07

一、單節點Redis伺服器帶來的問題

  • 單點故障
  • 無法處理大量資料併發資料請求
  • 資料丟失一大堆

解決方法:
        所以我們需要搭建Redis叢集

二、Redis叢集介紹

  • Redis叢集是一個提供在多個Redis間節點間共享資料的程式集
  • Redis叢集並不支援處理多個keys的命令,因為這需要在不同的節點間移動資料,從而達不到像Redis那樣的效能,在高負載的情況下可能會導致不可預料的錯誤。
  • Redis叢集通過分割槽來提供一定程度的可用性,在實際環境中當某個節點當機或者不可達的情況下可繼續處理命令

2.1、Redis叢集的優勢

  • 自動分割資料到不同的節點上
  • 整個叢集的部分節點失敗或者不可達的情況下能夠繼續處理命令

2.2、Redis叢集的實現方法

  • 有客戶端分片
  • 代理分片
  • 伺服器端分片

2.3、Redis-Cluster資料分片

  • Redis叢集沒有使用一致性hash,而是引入了 雜湊槽概念

  • Redis叢集有16384個雜湊槽

  • 每個key通過CRC16校驗後對16384取模來決定放置槽

  • 叢集的每個節點負責一部分雜湊槽

  • 以3個節點組成的叢集為例
    1)節點A包含0到5500號雜湊槽
    2)節點B包含5501到11000號雜湊槽
    3)節點C包含11001到16384號雜湊槽

  • 支援新增或者刪除節點
    1)新增刪除節點無需停止服務
    2)例如
    A)如果想新新增個節點D,需要移動節點A,B,C中的部分槽到D上
    B)如果想移除節點A,需要將A中的槽移到B和C節點上,再將沒有任何槽的A節點從叢集中移除

2.4、Redis-Cluster的主從複製模型

  • 叢集中具有A,B,C三個節點,如果節點B失敗了,整個叢集就會缺失5501-11000這個範圍的槽而不可用
  • 為每個節點新增一個從節點A1,B1,C1,整個叢集便有三個master節點和三個salve節點組成,在節點B失敗後,叢集便會選舉B1為新的主節點繼續服務
  • 當B和B1都失敗後,叢集將不可用

三、Reids叢集實驗

CentOS 7master120.0.0.11
CentOS 7master220.0.0.12
CentOS 7master320.0.0.21
CentOS 7slave120.0.0.22
CentOS 7slave220.0.0.31
CentOS 7slave320.0.0.32
  • 部署環境
[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# hostnamectl set-hostname master1
[root@master1 ~]# yum install gcc gcc-c++ y

然後我們分別在六臺虛擬機器都要安裝Redis

這裡是安裝Redis的部落格路徑

  • 這裡對6臺Redis做配置檔案的操作
[root@master1 utils]# vim /etc/redis/6379.conf 
  70/ # bind 127.0.0.1		#bind 選項預設監聽所有網路卡
  89/ protected-mode no		#關閉保護模式
  93/ port 6379
 137/ daemonize yes		#以獨立程式啟動
 833/  cluster-enabled yes		#開啟群集功能
 841/  cluster-config-file nodes-6379.conf	#群集名稱檔案設定(841,841 s/# //g)
 847/  cluster-node-timeout 15000		#群集超時時間設定
 700/ appendonly yes			#開啟aof持久化

 ## 然後6臺虛擬機器分別重啟Redis
 [root@master1 utils]# /etc/init.d/redis_6379 restart

正常啟動後,/var/lib/redis/6379/目錄下會多出兩個檔案,
一個是持久化appendonly.aof檔案,另外一個是節點首次啟動生成的 nodes-6379.conf 配置檔案。

  • 現在是在三臺Master做的操作
匯入key檔案
gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3

上傳rvm,並安裝rvm
tar zvxf rvm-master.tar\(1\).gz 
./install 

執行環境變數
source /etc/profile.d/rvm.sh 

安裝Ruby可安裝的版本
rvm list known

安裝Ruby2.4.1版本
rvm install 2.4.1

使用Ruby2.4.1版本
rvm use 2.4.1

檢視當前Ruby2.4.1版本
ruby -v

再次安裝Redis
gem install redis
  • 建立叢集
redis-cli --cluster create 20.0.0.11:6379 20.0.0.12:6379 20.0.0.21:6379 20.0.0.22:6379 20.0.0.31:6379 20.0.0.32:6379 --cluster-replicas 1

>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 20.0.0.31:6379 to 20.0.0.11:6379
Adding replica 20.0.0.32:6379 to 20.0.0.12:6379
Adding replica 20.0.0.22:6379 to 20.0.0.21:6379

相關文章