快速上手搭建Redis集羣

什麼是集羣

Redis 集羣實現了對 Redi s的水平擴容,即啓動 N 個 Redis 節點,將整個數據庫分佈存儲在這N個節點中,每個節點存儲總數據的1/N。
Redis 集羣通過分區(partition)來提供一定程度的可用性(availability): 即使集羣中有一部分節點失效或者無法進行通訊, 集羣也可以繼續處理命令請求

主從複製的目的是爲了減輕 Redis 服務器的 CPU 壓力, 可以保證數據同步, 爲了可以保證 Redis 的高可用, 容災能力, 一般在每個節點使用主從 + 哨兵

Redis 集羣提供了以下好處

  • 實現擴容
  • 分攤壓力
  • 無中心配置相對簡單

Redis 集羣的不足

  • 多鍵操作是不被支持的
  • 多鍵的Redis事務是不被支持的。lua腳本不被支持。
  • 由於集羣方案出現較晚,很多公司已經採用了其他的集羣方案,而代理或者客戶端分片的方案想要遷移至redis cluster,需要整體遷移而不是逐步過渡,複雜度較大。

如果緩存數據量大, 也會有內存的壓力, 這裏使用的Redis4.0版本, 其它版本可能會有差異

安裝ruby環境

  • 安裝方式一 : 在線安裝[ 並不推薦,因爲有可能存在下載失敗的情況 ]

yum install ruby
yum install rubygems

  1. 將下載好的文件解壓完後都拷貝包到虛擬機opt目錄下
  2. 這裏需要注意的是, 在安裝 Ruby 之前必須裝 C、C++ 語言的編譯環境, Ruby是使用 C語言 編寫的
  3. 安裝教程 : 鏈接地址
  4. 開始安裝ruby環境
  5. 按照依賴安裝各個rpm包14個 , 安裝命令

rpm -Uvh *.rpm --nodeps --force

  1. 如圖 :
    在這裏插入圖片描述
  2. 到 opt目錄下在安裝 redis-3.2.0.gem

gem install --local redis-3.2.0.gem

  1. 如圖
    在這裏插入圖片描述
    以上操作, 搭建集羣的環境基本就準備好了
    刪除之前的redis的數據[ 如果不刪集羣一定失敗 rdb 和 aof ] [ 如果沒有則可以不刪]
    在這裏插入圖片描述

開始集羣的搭建

  1. 準備 6 個 redis 實例的配置文件

vim redis-6379.conf

include /myredis/redis.conf
pidfile /var/run/redis_6379.pid
port 6379
dbfilename dump-6379.rdb
appendonly no
logfile ""
#打開集羣
cluster-enabled yes
#設定節點配置文件
cluster-config-file nodes-6379.conf
#設置節點失聯時間,超過該時間[毫秒]集羣自動進行主從更換
cluster-node-timeout 15000

在這裏插入圖片描述
2. 複製生成其他節點的配置文件:6380/6381/6389/6390/6391

[root@centos myredis]# cp redis-6379.conf redis-6380.conf
[root@centos myredis]# cp redis-6379.conf redis-6381.conf
[root@centos myredis]# cp redis-6379.conf redis-6390.conf
[root@centos myredis]# cp redis-6379.conf redis-6391.conf
[root@centos myredis]# cp redis-6379.conf redis-6389.conf
[root@centos myredis]#

  1. 修改所有的配置文件中的端口號和文件名端口號一致,

:%s/6379/6380/g

  1. 啓動6個redis 服務
    在這裏插入圖片描述
    在這裏插入圖片描述

將六個節點合成一個集羣

  1. 組合之前,請確保所有redis實例啓動後,nodes-xxxx.conf文件都生成正常。
  2. 切換到redis解壓的目錄src下,redis-trib.rb 可以對集羣節點進行合併

cd /opt/redis-4.0.0/src

./redis-trib.rb create --replicas 1 192.168.230.200:6379 192.168.230.200:6380 192.168.230.200:6381 192.168.230.200:6389 192.168.230.200:6390 192.168.230.200:6391

  1. 如圖
    在這裏插入圖片描述
  2. 顯示分配的槽個數
    在這裏插入圖片描述
    顯示以上內容基本Redis集羣環境就構建成功了!

連接集羣

  1. 使用 -c 採用集羣策略連接,設置數據會自動切換到相應的寫主機

redis-cli -c -p 6379

  1. 一個 Redis 集羣包含 16384 個插槽(hash slot), 數據庫中的每個鍵都屬於這 16384 個插槽的其中一個
  2. 集羣使用公式 CRC16(key) % 16384 來計算鍵 key 屬於哪個槽, 其中 CRC16(key) 語句用於計算鍵 key 的 CRC16 校驗和 。
  3. 當設置值後,對自動分配對應的槽 , 如圖
    在這裏插入圖片描述

集羣中錄入值

  • 不在一個slot下的鍵值,默認是不支持多鍵操作, 是不能使用mget ,mset 等多鍵操作, 否則會出錯。
  • 如下圖在這裏插入圖片描述
  • 可以通過{}來定義組的概念,從而使key中{}內相同內容的鍵值對放到一個slot中去。
  • 如下圖
    在這裏插入圖片描述

查詢集羣中的值

  • 計算鍵 key 應該被放置在哪個槽上。
  • CLUSTER KEYSLOT key

  • 如圖
    在這裏插入圖片描述
  • 返回槽 slot 目前包含的鍵值對數量。
  • CLUSTER COUNTKEYSINSLOT <slot>

  • 如圖
    在這裏插入圖片描述
  • 查看集羣或節點的狀態
  • cluster info/nodes

  • 如圖
    在這裏插入圖片描述
  • 主從的自動切換,必須保證節點中已經保存數據了

故障恢復

  1. 當主機宕機,從機會自動上位
  2. 主機回來後會作爲上位的從機的slave
  3. 如果一個節點上的主從全部宕機,整個集羣環境不可用,當節點主從重啓後集羣環境扔可以使用
  • 如果某一段插槽的主從都掛掉,而cluster-require-full-coverage 爲yes ,那麼 ,整個集羣都掛掉
  • 如果某一段插槽的主從都掛掉,而cluster-require-full-coverage 爲no ,那麼,該插槽數據全都不能使用,也無法存儲。

感謝閱讀, 以上就是對 Redis 集羣的搭建過程了, 如有什麼更好的建議或方法 ,可以留言或進羣交流. 各種疑難雜症QQ交流羣:1101584918,歡迎大家加入。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章