【Redis】集羣搭建

1. redis-cluster架構認識

 1.1 redis集羣架構圖

  redis集羣不像其它集羣,它沒有一個同意的入口,每個redos客戶端都可以連接到集羣中任意節點(可以用redis0的客戶端連接到redis1的服務)

 1.2 redis集羣通信原理

  redis集羣中兩兩節點之間直接通信,它是通過一種叫做投票的機制進行通信的,作用:發現集羣中出錯的節點

redis集羣架構講解
  (1)所有的redis節點彼此互聯(PING-PONG機制),內部使用二進制協議優化傳輸速度和帶寬.
  (2)節點的fail是通過集羣中超過半數的節點檢測失效時才生效.
  (3)客戶端與redis節點直連,不需要中間proxy層.客戶端不需要連接集羣所有節點,連接集羣中任何一個可用節點即可
  (4)redis-cluster把所有的物理節點映射到[0-16383]slot上,cluster 負責維護

  Redis 集羣中內置了 16384 個哈希槽,當需要在 Redis 集羣中放置一個 key-value 時,redis 先對 key 使用 crc16 算法算出一個結果,然後把結果對 16384 求餘數,這樣每個 key 都會對應一個編號在 0-16383 之間的哈希槽,redis 會根據節點數量大致均等的將哈希槽映射到不同的節點(因此數據被平均的分配到各個節點。無論redis集羣中有多少節點,集羣總共就有16384個槽,所以redis集羣最多有16384個節點)

 1.3數據存儲到redis集羣的過程

 假設redis集羣有3個結點,
 1) 初始態:

 2) 存放第一個值Hello,經crc16計算後得到500,500/16384=500,第500個槽在server1中,所以被放進了server1

 3) 存放第二個值Hello1,經crc16計算後得到15000,15000/16384=15000,第15000個槽在server3中,所以被放進了server3

  值計劃是被平均的分配到每個節點


2. redis集羣搭建過程

  Redis集羣中至少應該有三個節點(如果一個節點壞了,兩外兩個可通過投票機制(2 > 2/3),判定那個節點已壞)。要保證集羣的高可用,需要每個節點有一個備份機。Redis集羣至少需要6臺服務器。搭建僞分佈式。可以使用一臺虛擬機運行6個redis實例。需要修改redis的端口號7001-7006

 2.1環境準備:

  要想進行redis集羣搭建,需要使用redis/src/redis-trib.rb 腳本進行搭建,(rb爲ruby,是一種腳本語言),要運行這種腳本語言,需要ruby的運行環境,安裝ruby:

[root@localhost ~]yum install ruby
[root@localhost ~]yum install rubygems

 2.2 安裝ruby腳本運行使用的包

  ruby運行需要依賴第三方包,即redis-3.0.0.gem,將它包放到linux中,進行安裝:[root@localhost ~]# gem install redis-3.0.0.gem,如果安裝成功會顯示successfully安裝成功提示

 2.3 搭建步驟

  需要6臺redis服務器。這搭建僞分佈式,需要6個redis實例,需要運行在不同的端口7001-7006
  1)第一步:創建6個redis實例,每個實例運行在不同的端口。需要修改redis.conf配置文件,即需要修改端口號,還需要把cluster-enabled yes前的註釋去掉(直接將redis下的bin文件進行賦值到不能的文件加中,即可創建了6個redis實例。注意賦值時不能有存數據文件,如appendonly.aof或dump.rdb文件,如果有,則刪除)
  2) 第二步:啓動每個redis實例(因爲我們有6個redis實例,一個一個的啓動不太方便,所以我們可以寫一個sh腳本,一塊啓動)

//腳本內容可以如下:
cd redis01 
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..

  3)第三步:此步真正的運行ruby腳本,進行集羣的搭建了,運行

./redis-trib.rb create --replicas 1 192.168.20.216:7001 192.168.20.216:7002 192.168.20.216:7003 192.168.20.216:7004 192.168.20.216:7005 192.168.20.216:7006

  (因爲replicas 1表示一個節點有一個備份,所以它會根據節點數量分配主節點和從節點)回車運行,會出現如下界面,在連接每個節點成功後,它會自動分配,然後詢問這樣分配你是否同意

  輸入yes即可完成集羣的搭建,出現如下圖:

  到此redis集羣已成功搭建啦!!!

  4)第四步:創建一個關閉集羣的腳本:[root@localhost redis-cluster]# vim shutdow-all.sh,內容如下:

redis01/redis-cli -p 7001 shutdown
redis01/redis-cli -p 7002 shutdown
redis01/redis-cli -p 7003 shutdown
redis01/redis-cli -p 7004 shutdown
redis01/redis-cli -p 7005 shutdown
redis01/redis-cli -p 7006 shutdown

  4)第五步:給剛建的shutdow-all.sh腳本文件提權,否則無法執行:[root@localhost redis-cluster]# chmod u+x shutdow-all.sh
  4)第六步: 測試:(同下面的使用方法)


3. 集羣的使用方法

  (前提,每個redis節點實例都開啓了服務)
  1)連接到客戶端:[root@localhost redis-cluster]# redis01/redis-cli -p 7005 -c

  2)添加一個數據:set str abc,會顯示數據分配到了哪個節點

  3)192.168.20.216:7001> keys * 可查看當前所在節點存入的鍵


【 總結】

  其實過程也就兩步:創建redis節點,並開啓每個redis節點;運行ruby腳本進行集羣的搭建連接

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