Redis4.0 Cluster — Centos7

本文版權歸博客園和做者吳雙本人共同全部 轉載和爬蟲請註明原文地址 www.cnblogs.com/tdwshtml

一.基礎安裝

wget http://download.redis.io/releases/redis-4.0.0.tar.gz

tar xzf redis-4.0.0.tar.gz

cd redis-4.0.0

cd src

make

make test    //有問題可參考 http://www.cnblogs.com/tdws/p/6360024.html

./redis-server ../redis.conf

ps -ef |grep redis  查看redis進程
netstat -lntp | grep 6380  查詢指定端口監聽

kill -9 進程id  強制殺死redis進程

二. 4.0版本初步瞭解

Redis4.0中增長了UNLINK 命令(替換del命令),這個命令在刪除體積較大的鍵時,命令在後臺線程裏面執行,還有異步的flushdb和flushall命令分別是java

flushdb asyncnode

flushall asyncredis

儘量的避免了服務器阻塞。數據庫

增長了交換數據庫命令,好比SWAPDB 0 1 ,交換0庫和1庫緩存

增長了memory命令,能夠視察內存使用狀況,經過help命令能夠看到ruby

127.0.0.1:6379> memory help服務器

1) "MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"異步

2) "MEMORY STATS - Show memory usage details"async

3) "MEMORY PURGE - Ask the allocator to release memory"

4) "MEMORY MALLOC-STATS - Show allocator internal stats"

MEMORY USAGE <key> 預估指定key所需內存

MEMORY STATS 視察內存使用詳情

MEMORY PURGE 向分配器索要釋放更多內存

MEMORY MALLOC-STATS 視察分配器內部狀態

另外還有一系列優化好比 LRU和PSYNC,還有模塊系統。

三.Cluster

 雖然一主一從加哨兵能夠解決普通場景下服務可用的問題,可是兩個節點分別存儲全部的緩存數據,這不只致使容量受限,更是讓咱們受限於機器配置最差的那一臺,這就是木桶效應。硬件垂直擴容並不能解決日益龐大的緩存數據量和提供能搞得可用性。

在古老的Redis版本中,水平擴容的能力來自於發送命令的客戶端,由客戶端路由不一樣的key給到不一樣的節點,下次讀取的時候,也按照相同方式路由key到指定節點拿到數據。若是接下來還但願增長擴容節點的話,就要對歷史緩存數據作遷移,遷移過程當中爲保證數據一致性也要付出必定代價。爲了解決節點的不斷擴容,設計初期能夠預先設置不少節點,以備往後使用,全部設計的節點都參與到分片當中,鑑於初期數據較少,可單臺服務器多個節點,在往後數據增多的狀況下,只須要遷移節點到新的服務器。而不須要對數據進行從新分配等操做。可是這種作法依然讓咱們以爲難維護,難遷移,難應對故障,遷移過程當中也很難保證數據一致性,好比50個節點,任意一個節點想要中止並遷移服務器,都會引起數據不一致或者出現故障,只能中止集羣,等待遷移完成後,集羣上線。

Redis3.0提供了Cluster集羣。這個集羣的概念和前面提到的集羣有所不一樣。前面的集羣僅表明,多個節點間沒有相互的關係,只是根據客戶端路由分配key到不一樣的節點,全部節點共同分配全部數據。3.0的Cluster功能,擁有和單機實例相同的性能,幾乎支持全部命令,對於涉及多個鍵的命令,好比MGET,若是每個鍵都在同一個節點則能夠正常返回數據,不然提示錯誤。另外集羣中限制了0號數據庫,若是切換數據庫則會提示錯誤。

哨兵和集羣是兩個獨立的功能,但從特性來看哨兵能夠視爲集羣的子集。當不須要數據分片或者已經利用客戶端分片的場景下哨兵已經足夠使用,若是須要水平擴容,Cluster是很是好的選擇。

每一個集羣至少三臺主節點。

到redis-4.0.0目錄下 修改redis.conf

修改全部redis.conf文件 在GENERAL通常設置中找到daemonize 將其設置爲yes 咱們將後臺運行redis

protect mode爲no

bind ip爲0.0.0.0

集羣搭建成功前不要設置鏈接密碼。

設置maxmemory 100m

cluster-enabled設置爲yes

注意cluster-config-file配置不一樣的名稱。我剛開始給每一個節點都配置nodes.conf , 結果弄了幾個小時都不行,一直在waiting claster join. WTF??? 工做目錄明明都是本身的文件夾呀,後來在stackoverflow上 看到有人相同狀況,我就改下配置文件名試了一下,還真能夠了....

把redis-4.0.0文件夾複製6份

我準備了兩臺服務器,固然一臺服務器也是能夠玩轉的。

六個節點分別啓動,此時集羣是不能正常工做的,由於他們仍是六個獨立的節點。下面咱們要使用src目錄下的redis-trib.rb來將他們加入到同一個集羣當中。可是.rb由Ruby編寫,咱們須要安裝環境,還須要gem redis包。yum install ruby下載的是2.0版本,而且得不到升級, 咱們須要ruby2.2+,因此咱們不使用。ruby安裝指南http://blog.csdn.net/lixwjava/article/details/49231899

wget https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.7.tar.gz
tar -zxvf ruby-2.2.7.tar.gz  
cd  ruby-2.2.7
./configure  
make  
make test
make install  
若是順利的話就安裝完ruby了
若是沒有zlib 先安裝一下
yum install zlib-devel
yum install zlib
接下來進入ruby文件夾下ext/zlib中 安裝ruby自身提供的zlib包
cd ext/zlib
ruby ./extconf.rb
make
make install

另外須要安裝openssl (不裝也行) http://blog.csdn.net/yangxuan0261/article/details/52065158  若是沒裝,更換gem鏡像爲非ssl的中國ruby鏡像https://ruby.taobao.org/ 

gem sources --add http://gems.ruby-china.org/ --remove https://rubygems.org/
gem sources -l
gem install redis

在執行create cluster以前 請保證每一個node的0庫不包含任何key.若是有key 就對不純潔的節點執行flushall和cluster reset 。每一個Node都有一個特定的TCP端口,用來接收其餘nodes的連接;此端口號爲面向Client的端口號 + 10000,好比果客戶端端口號爲6379,那麼次node的BUS端口號爲16379,客戶端端口號能夠在配置文件中聲明。因而可知,nodes之間的交互通信是經過Bus端口進行,使用了特定的二進制協議,此端口一般應該只對nodes可用,能夠藉助防火牆技術來屏蔽其餘非法訪問。因此注意咱們的全部節點端口+10000 也要保持開放

./redis-trib.rb create --replicas 1 47.92.93.157:6379 47.92.93.157:6380 47.92.93.157:6381 47.92.93.157:6382 47.92.93.157:6383 47.92.93.157:6384

啓動redis-cli 使用-c參數 鏈接集羣,將會爲咱們作一些自動重定向工做。

 

 設置集羣密碼:

config set masterauth abc  
config set requirepass abc  上面的配置 必定要每個節點都配置執行一遍哦
config rewrite  
相關文章
相關標籤/搜索