redis哨兵模式與集羣模式的搭建

 

redis主從集羣搭建

複製三個redis.conf出來做修改 ,根據指定的端口做修改  我用的是6379  6380  6381

#如果想要redis後臺運行配置爲yes
daemonize yes

#外面客戶端要連的通

#bind 127.0.0.1

bind 0.0.0.0 

#修改pid文件名字

#pidfile /var/run/redis.pid

pidfile /var/run/redis-6379.pid

#修改指定端口

port 6379

#修改log文件名字

#logfile ""

logfile "/usr/local/myredis-6379.log"

#修改dump文件名字

#dbfilename dump.rdb

dbfilename dump-6379.rdb


啓動三個redis實例   配置文件名自定義

./redis-server /usr/local/myredis/redis-6379.conf

進入redis實例

./redis-cli -p 6379

在6380和6381裏面執行

slaveof 127.0.0.1 6379

這樣redis的簡單一主兩從就部署好了,可以使用info replication命令查看

 

 

哨兵主從集羣搭建


簡單的主從集羣有個問題,就是主節點掛了之後,無法從新選舉新的節點作爲主節點進行寫操作,導致服務不可用


因此,需要一種機制對主節點掛了的集羣進行監控,並且重新選舉主節點,這就是哨兵的作用。

搭建哨兵主從集羣,需要做以下幾個步驟:

主從集羣搭建步驟跟上面一樣

哨兵創建,需要配置哨兵配置文件,創建sentinel.conf文件,編輯如下配置

#配置監視的進羣的主節點ip和端口 1表示至少需要幾個哨兵統一認定纔可以做出判斷
sentinel monitor mymaster 127.0.0.1 6380 1
#表示如果5s內mymaster沒響應,就認爲SDOWN 
sentinel down-after-milliseconds mymaster 5000 
#表示如果15秒後,mysater仍沒活過來,則啓動failover,從剩下從節點序曲新的主節點
sentinel failover-timeout mymaster 15000 

然後,就可以執行src目錄下的redis-sentinel 指定配置文件 命令,來啓動一個哨兵。連接6379端口的主節點,執行shutdown關閉主節點,連接從節點查詢狀態,過一陣子後,執行info replication,顯示如下,變成了主節點

role:master
connected_slaves:0
master_replid:7c049957e22948d8c346154422498159fcd371b6
master_replid2:cb6c2d58d978e917cc75ae6b2b278a3ced21fae8
master_repl_offset:2482
second_repl_offset:1130
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:2482


哨兵也可以進行集羣,只需要修改配置文件的端口,監聽的還是同一個主節點,即可實現哨兵集羣。哨兵集羣保證哨兵的可用性從而保證redis集羣選舉的可用性。同時多個哨兵監聽還涉及到前面說的哨兵投票機制,需要幾個哨兵才能判定主節點下線。

redis-cluster搭建
儘管可以使用哨兵主從集羣實現可用性保證,但是這種實現方式每個節點的數據都是全量複製,數據存放量存在着侷限性,受限於內存最小的節點,因此考慮採用數據分片的方式,來實現存儲,這個就是redis-cluster。


複製6個redis.conf,基礎配置參考主從的配置,

需要開啓redis-cluster配置,配置做以下改造,cluster-config-file用端口命名區分開

#配置yes開啓redis-cluster
cluster-enabled yes
#配置節點之間超時時間
cluster-node-timeout 15000
#這個配置很重要,cluster開啓必須重命名指定cluster-config-file,不能與別的節點相同,否則會啓動失敗,最好按主機+端口命名
cluster-config-file nodes-6390.conf

集羣需要安裝ruby  centos:

sudo yum install ruby 

最後是執行創建集羣,這裏使用的是5.0版本的redis,創建集羣命令都從./redis-trib.rb 遷移到redis-cli,可以使用redis-cli --cluster help來查看命令幫助;

執行以下命令,創建集羣。--cluster-replicas 1  意思是一個master下面有一個slave

./redis-cli --cluster create 127.0.0.1:6390 127.0.0.1:6391 127.0.0.1:6392 127.0.0.1:6393 127.0.0.1:6394 127.0.0.1:6395 --cluster-replicas 1

查看節點情況:

./redis-cli -h 127.0.0.1 -p 6391 cluster nodes

 

上圖是我模擬服務器故障,把6390的關了,然後他的子節點6394成功上位

 

查看集羣狀態:

./redis-cli --cluster info 127.0.0.1:6391

 

 

 注意:

在使用 redis-cli 連接 redis 集羣,進行數據操作時,有報錯 :用-c

 

./redis-cli  -p 6391 -c

動態添加或者刪除集羣中的節點怎麼辦?

執行redis-cli --cluster help,顯示如下信息:

Cluster Manager Commands:

create host1:port1 ... hostN:portN

--cluster-replicas <arg>

check host:port

info host:port

fix host:port

reshard host:port

--cluster-from <arg>

--cluster-to <arg>

--cluster-slots <arg>

--cluster-yes

--cluster-timeout <arg>

--cluster-pipeline <arg>

rebalance host:port

--cluster-weight <node1=w1...nodeN=wN>

--cluster-use-empty-masters

--cluster-timeout <arg>

--cluster-simulate

--cluster-pipeline <arg>

--cluster-threshold <arg>

add-node new_host:new_port existing_host:existing_port

--cluster-slave

--cluster-master-id <arg>

del-node host:port node_id

call host:port command arg arg .. arg

set-timeout host:port milliseconds

import host:port

--cluster-from <arg>

--cluster-copy

--cluster-replace

help

 

add-node方法可以添加節點,還可以指定是主節點還是從節點。del-node是刪除指定節點。還有其它的fix修復命令,reshard重新分配slot等等。

 

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