Redis-Cluster集羣搭建

   本教程是利用redis5.0版本進行搭建的集羣方式,由於redis發佈了5.0以後推出了不少新的特性,其中一點就是放棄Ruby的集羣方式,改用的C語言編寫的redis-cli,使redis集羣構建方式複雜度大大下降
Redis官網搭建集羣教程連接:https://redis.io/topics/cluster-tutorial
redis-cluster架構圖(三主三從6個節點的配置)

image


redis-cluster架構總結:

  1)、無中心化就是所謂的去中心化(客戶端與redis節點直連,不須要中間proxy層.客戶端不須要鏈接集羣全部節點,鏈接集羣中任何一個可用節點便可)

  2)、在線自動擴容縮容

  3)、自動failover(節點的fail是經過集羣中超過半數的節點檢測失效時才生效.經過投票機制)

  4)、單層框架相應時間短

  5)、全部的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬

  6)、redis 集羣中內置了 16384 個哈希槽,當須要在 Redis 集羣中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,而後把結果對 16384 求餘數,這樣每一個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis會根據節點數量大體均等的將哈希槽映射到不一樣的節點

node

  注意:因爲Redis的容錯投票機制是集羣中過半數的節點認爲某個節點檢測失效時才生效,因此搭建最小集羣模式至少須要三個節點,可是爲了集羣的高可用,就須要爲每個節點增長一個備份機,因此就須要六臺服務器。
搭建redis集羣

一、單機的redis搭建就不說了,公衆號中有一篇從零開始搭建redis的文章,教你從零開始安裝虛擬機到redis安裝完成

  公衆號:

image

二、redis集羣配置

  1)、在redis的文件夾下面建立一個redis-cluster文件夾

image
程序員


  2)、將redis.conf文件拷貝到當前文件夾下

image
redis


  3)、修改剛剛拷貝的redis.conf配置文件

image

  protected-mode no 禁止保護模式

  port端口號爲6379
算法


image

  將ip改爲 bind 0.0.0.0 任何ip都能訪問到bind的IP(也能夠註釋掉,這樣任何桌面客戶端均可以鏈接了)(把防火牆關閉了)
ruby


image

  指定文件存放路徑 ( .rdb .aof nodes-xxxx.conf 這樣的文件都會在此路徑下)
服務器


image

  啓動集羣模式
微信


image

  cluster-config-file 集羣節點配置文件
架構


image

  daemonize yes 後臺啓動
app


image

  cluster-node-timeout 15000 指定集羣節點超時時間
框架


image

  appendonly yes 指定持久化方式


  注意:我是在我本機建立了6個虛擬機,每一臺虛擬機上都配置了一個redis,因此配置集羣的時候全部的redis的端口均可以是6379,每一臺虛擬機都須要和以上步驟的配置文件過程保持一致

image

  寫好一份copy 6份以後,每臺都搞一份就能夠了


image

  分別啓動每一臺redis,啓動成功


image

  建立集羣,此種方式是redis5.0版本的,以前3.0版本的不是這樣的,網上有不少例子了,官網也有說明我就不介紹了

image


  注意:報錯了? [ERR] Node 172.16.178.2:6379 NOAUTH Authentication required.

  解析:看錯誤是沒有權限,有多是沒有設置鏈接密碼,配置一下試試


image

  配置鏈接master的密碼


image

  配置鏈接我須要的密碼


image

  此時建立集羣成功,注意輸入命令最後面加上密碼 -a redis ,圖中能夠看出3個主機Master,3個從機Slave ,分配的槽點區間爲[0 - 5460、5461 - 1092二、10923 - 16383]


image


image

  鏈接其中一個節點查看集羣信息,cluster_state:ok 集羣狀態:OK,一共16384個槽點(slots),cluster_slots_ok:16384 全部節點都是好的,6個節點等等


image

  集羣節點信息, 三個主機節點,三個從機節點


image

  查看redis進程


image

  幹掉一個集羣中的一個主節點,查看集羣信息,cluster:fail,集羣狀態fail,一共16384個槽點(slots),cluster_slots_ok:10923


image

  集羣節點信息,172.16.178.2節點的master 宕機了,fail, [0 - 5460] 個插槽失去了鏈接


image

  將剛剛乾掉的redis啓動起來


image

  再一次查看集羣信息,cluster_state:ok 集羣狀態:OK,一共16384個槽點(slots),cluster_slots_ok:16384 全部節點都是好的,6個節點等等


image
  再一次查看集羣節點信息,此時172.16.178.6再也不是slave了變成了master,並且172.16.178.2也不是master了變成了slave,且以前失去鏈接的 [0 - 5460] 槽恢復了鏈接

幫忙關注一下 微信公衆號一塊兒學習 :chengxuyuan95(不同的程序員)image

相關文章
相關標籤/搜索