Redis4.0 Cluster — Centos7
本文版權(quán)歸博客園和作者吳雙本人共同所有 轉(zhuǎn)載和爬蟲(chóng)請(qǐng)注明原文地址 www.cnblogs.com/tdws
一.基礎(chǔ)安裝
wget http://download.redis.io/releases/redis-4.0.0.tar.gz tar xzf redis-4.0.0.tar.gzcd redis-4.0.0cd srcmakemake test //有問(wèn)題可參考 http://www.cnblogs.com/tdws/p/6360024.html./redis-server ../redis.confps -ef |grep redis 查看redis進(jìn)程 netstat -lntp | grep 6380 查詢指定端口監(jiān)聽(tīng)kill -9 進(jìn)程id 強(qiáng)制殺死redis進(jìn)程二. 4.0版本初步了解
Redis4.0中增加了UNLINK?命令(替換del命令),這個(gè)命令在刪除體積較大的鍵時(shí),命令在后臺(tái)線程里面執(zhí)行,還有異步的flushdb和flushall命令分別是
flushdb async
flushall async
盡可能的避免了服務(wù)器阻塞。
增加了交換數(shù)據(jù)庫(kù)命令,比如SWAPDB 0 1 ,交換0庫(kù)和1庫(kù)
增加了memory命令,可以視察內(nèi)存使用情況,通過(guò)help命令可以看到
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"
3) "MEMORY PURGE - Ask the allocator to release memory"
4) "MEMORY MALLOC-STATS - Show allocator internal stats"
MEMORY USAGE <key> 預(yù)估指定key所需內(nèi)存
MEMORY STATS 視察內(nèi)存使用詳情
MEMORY PURGE 向分配器索要釋放更多內(nèi)存
MEMORY MALLOC-STATS 視察分配器內(nèi)部狀態(tài)
另外還有一系列優(yōu)化比如 LRU和PSYNC,還有模塊系統(tǒng)。
三.Cluster
?雖然一主一從加哨兵可以解決普通場(chǎng)景下服務(wù)可用的問(wèn)題,但是兩個(gè)節(jié)點(diǎn)分別存儲(chǔ)所有的緩存數(shù)據(jù),這不僅導(dǎo)致容量受限,更是讓我們受限于機(jī)器配置最差的那一臺(tái),這就是木桶效應(yīng)。硬件垂直擴(kuò)容并不能解決日益龐大的緩存數(shù)據(jù)量和提供能搞得可用性。
在古老的Redis版本中,水平擴(kuò)容的能力來(lái)自于發(fā)送命令的客戶端,由客戶端路由不同的key給到不同的節(jié)點(diǎn),下次讀取的時(shí)候,也按照相同方式路由key到指定節(jié)點(diǎn)拿到數(shù)據(jù)。如果接下來(lái)還希望增加擴(kuò)容節(jié)點(diǎn)的話,就要對(duì)歷史緩存數(shù)據(jù)做遷移,遷移過(guò)程中為保證數(shù)據(jù)一致性也要付出一定代價(jià)。為了解決節(jié)點(diǎn)的不斷擴(kuò)容,設(shè)計(jì)初期可以預(yù)先設(shè)置很多節(jié)點(diǎn),以備日后使用,所有設(shè)計(jì)的節(jié)點(diǎn)都參與到分片當(dāng)中,鑒于初期數(shù)據(jù)較少,可單臺(tái)服務(wù)器多個(gè)節(jié)點(diǎn),在日后數(shù)據(jù)增多的情況下,只需要遷移節(jié)點(diǎn)到新的服務(wù)器。而不需要對(duì)數(shù)據(jù)進(jìn)行重新分配等操作。但是這種做法依然讓我們覺(jué)得難維護(hù),難遷移,難應(yīng)對(duì)故障,遷移過(guò)程中也很難保證數(shù)據(jù)一致性,比如50個(gè)節(jié)點(diǎn),任意一個(gè)節(jié)點(diǎn)想要停止并遷移服務(wù)器,都會(huì)引發(fā)數(shù)據(jù)不一致或者出現(xiàn)故障,只能停止集群,等待遷移完成后,集群上線。
Redis3.0提供了Cluster集群。這個(gè)集群的概念和前面提到的集群有所不同。前面的集群僅代表,多個(gè)節(jié)點(diǎn)間沒(méi)有相互的關(guān)系,只是根據(jù)客戶端路由分配key到不同的節(jié)點(diǎn),所有節(jié)點(diǎn)共同分配所有數(shù)據(jù)。3.0的Cluster功能,擁有和單機(jī)實(shí)例相同的性能,幾乎支持所有命令,對(duì)于涉及多個(gè)鍵的命令,比如MGET,如果每一個(gè)鍵都在同一個(gè)節(jié)點(diǎn)則可以正常返回?cái)?shù)據(jù),否則提示錯(cuò)誤。另外集群中限制了0號(hào)數(shù)據(jù)庫(kù),如果切換數(shù)據(jù)庫(kù)則會(huì)提示錯(cuò)誤。
哨兵和集群是兩個(gè)獨(dú)立的功能,但從特性來(lái)看哨兵可以視為集群的子集。當(dāng)不需要數(shù)據(jù)分片或者已經(jīng)利用客戶端分片的場(chǎng)景下哨兵已經(jīng)足夠使用,如果需要水平擴(kuò)容,Cluster是非常好的選擇。
每個(gè)集群至少三臺(tái)主節(jié)點(diǎn)。
到redis-4.0.0目錄下 修改redis.conf
修改所有redis.conf文件 在GENERAL一般設(shè)置中找到daemonize 將其設(shè)置為yes 我們將后臺(tái)運(yùn)行redis
protect mode為no
bind ip為0.0.0.0
集群搭建成功前不要設(shè)置連接密碼。
設(shè)置maxmemory 100m
cluster-enabled設(shè)置為yes
注意cluster-config-file配置不同的名稱。我剛開(kāi)始給每個(gè)節(jié)點(diǎn)都配置nodes.conf , 結(jié)果弄了幾個(gè)小時(shí)都不行,一直在waiting claster join. WTF??? 工作目錄明明都是自己的文件夾呀,后來(lái)在stackoverflow上 看到有人相同情況,我就改下配置文件名試了一下,還真可以了....
把redis-4.0.0文件夾復(fù)制6份
我準(zhǔn)備了兩臺(tái)服務(wù)器,當(dāng)然一臺(tái)服務(wù)器也是可以玩轉(zhuǎn)的。
六個(gè)節(jié)點(diǎn)分別啟動(dòng),此時(shí)集群是不能正常工作的,因?yàn)樗麄冞€是六個(gè)獨(dú)立的節(jié)點(diǎn)。下面我們要使用src目錄下的redis-trib.rb來(lái)將他們加入到同一個(gè)集群當(dāng)中。但是.rb由Ruby編寫,我們需要安裝環(huán)境,還需要gem redis包。yum install ruby下載的是2.0版本,并且得不到升級(jí), 我們需要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了 如果沒(méi)有zlib 先安裝一下 yum install zlib-devel yum install zlib 接下來(lái)進(jìn)入ruby文件夾下ext/zlib中 安裝ruby自身提供的zlib包 cd ext/zlib ruby ./extconf.rb make make install另外需要安裝openssl (不裝也行) http://blog.csdn.net/yangxuan0261/article/details/52065158??如果沒(méi)裝,更換gem鏡像為非ssl的中國(guó)ruby鏡像https://ruby.taobao.org/?
gem sources --add http://gems.ruby-china.org/ --remove https://rubygems.org/ gem sources -l gem install redis在執(zhí)行create cluster之前 請(qǐng)保證每個(gè)node的0庫(kù)不包含任何key.如果有key 就對(duì)不純潔的節(jié)點(diǎn)執(zhí)行flushall和cluster reset 。每個(gè)Node都有一個(gè)特定的TCP端口,用來(lái)接收其他nodes的鏈接;此端口號(hào)為面向Client的端口號(hào) + 10000,比如果客戶端端口號(hào)為6379,那么次node的BUS端口號(hào)為16379,客戶端端口號(hào)可以在配置文件中聲明。由此可見(jiàn),nodes之間的交互通訊是通過(guò)Bus端口進(jìn)行,使用了特定的二進(jìn)制協(xié)議,此端口通常應(yīng)該只對(duì)nodes可用,可以借助防火墻技術(shù)來(lái)屏蔽其他非法訪問(wèn)。所以注意我們的所有節(jié)點(diǎn)端口+10000 也要保持開(kāi)放
./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
啟動(dòng)redis-cli 使用-c參數(shù) 連接集群,將會(huì)為我們做一些自動(dòng)重定向工作。
?
?設(shè)置集群密碼:
config set masterauth abc config set requirepass abc上面的配置 一定要每一個(gè)節(jié)點(diǎn)都配置執(zhí)行一遍哦
config rewrite
?
轉(zhuǎn)載于:https://www.cnblogs.com/tdws/p/7710545.html
總結(jié)
以上是生活随笔為你收集整理的Redis4.0 Cluster — Centos7的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: JAVA 通过 Socket 实现 TC
- 下一篇: 提交页面插入到数据库2.jsp