redis复制、哨兵、集群详细介绍
目錄
1、redis性能瓶頸在哪里?
2、redis為什么需要高可用?
3、主從復(fù)制
3.1、主從復(fù)制原理
3.1.1、復(fù)制初始化
3.1.2、復(fù)制同步階段
3.1.3、增量復(fù)制
3.1.4、無(wú)硬盤(pán)復(fù)制
3.2、異步復(fù)制導(dǎo)致主從庫(kù)數(shù)據(jù)不一致怎么解決?
3.3、主從復(fù)制崩潰恢復(fù)
4、哨兵
5、集群
5.1、插槽
5.2、集群的主從復(fù)制模型
5.3、集群一致性
5.4、搭建集群
6、redis模板配置文件
7、安裝Ruby
1、redis性能瓶頸在哪里?
首先說(shuō)說(shuō)redis為什么這么快。主要有以下幾點(diǎn)原因:
- 純內(nèi)存操作;
- 單線程操作,避免頻繁上下文切換;
- 采用IO多路復(fù)用模型;
- 純ANSI C語(yǔ)言編寫(xiě);
由于redis是純內(nèi)存操作并且采用了IO多路復(fù)用模型,因此redis的性能瓶頸不應(yīng)該是CPU,內(nèi)存和網(wǎng)絡(luò)延遲更應(yīng)該是redis的性能瓶頸。
?
2、redis為什么需要高可用?
需要高可用的原因主要為:
- 單點(diǎn)故障:因此需要將數(shù)據(jù)生成多個(gè)副本分布在不同的機(jī)器上;
- 內(nèi)存容易成為瓶頸:因此需要對(duì)數(shù)據(jù)進(jìn)行分片;
redis有三種高可用方案,分別是:
- 主從復(fù)制
- 哨兵
- 集群
?
3、主從復(fù)制
主庫(kù):可以讀寫(xiě),將數(shù)據(jù)同步給從庫(kù)
從庫(kù):只能讀,如果修改從庫(kù)數(shù)據(jù)會(huì)報(bào)錯(cuò)(將slave-read-only設(shè)置為no就不會(huì)報(bào)錯(cuò))
一個(gè)主庫(kù)可以有多個(gè)從庫(kù),但一個(gè)從庫(kù)只能有一個(gè)主庫(kù)。從庫(kù)也可以作為主庫(kù)。
主從復(fù)制可以同來(lái)實(shí)現(xiàn)讀寫(xiě)分離,比如在電商系統(tǒng)中,讀的壓力大于寫(xiě),那么可以配置一主多從的redis高可用架構(gòu),主庫(kù)用來(lái)寫(xiě),多個(gè)從庫(kù)用來(lái)讀。
由于主從復(fù)制不能有多個(gè)主庫(kù),因此當(dāng)寫(xiě)壓力過(guò)大時(shí)一主多從不再滿足需求,此時(shí)需要使用redis集群。
?
如何配置主從復(fù)制?兩種方法如下:
- 在從庫(kù)的redis.conf中配置slaveof host port;
- 在從庫(kù)執(zhí)行slaveof host port命令;
?
info section命令以一種易于理解和閱讀的格式,返回關(guān)于Redis服務(wù)器的各種信息和統(tǒng)計(jì)數(shù)值。比如查看復(fù)制相關(guān)信息,可以使用info replication。
在一個(gè)主庫(kù)上執(zhí)行info replication命令打印出來(lái)的信息如下所示。
127.0.0.1:6379> INFO replication # Replication role:master connected_slaves:1 slave0:ip=127.0.0.1,port=6380,state=online,offset=14,lag=0 master_replid:0dca9fd8627630d1058cd3ae740c39edc03f07c5 master_replid2:0000000000000000000000000000000000000000 master_repl_offset:14 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:14也可以使用role命令查看節(jié)點(diǎn)角色。
?
如果當(dāng)前庫(kù)已經(jīng)是某個(gè)主庫(kù)的從庫(kù),那么執(zhí)行slaveofhost port 將使當(dāng)前庫(kù)停止對(duì)舊主庫(kù)的同步,丟棄舊數(shù)據(jù)集,轉(zhuǎn)而開(kāi)始接收新主庫(kù)的同步。
另外,對(duì)一個(gè)從庫(kù)執(zhí)行命令slave no one將使得這個(gè)從庫(kù)關(guān)閉復(fù)制功能,并從從庫(kù)轉(zhuǎn)變回主庫(kù),原來(lái)同步所得的數(shù)據(jù)集不會(huì)被丟棄。
利用slave no one不會(huì)丟棄同步所得數(shù)據(jù)集這個(gè)特性,可以在主庫(kù)失敗的時(shí)候,將從庫(kù)作為新的主庫(kù),從而實(shí)現(xiàn)無(wú)間斷運(yùn)行。
?
3.1、主從復(fù)制原理
3.1.1、復(fù)制初始化
從庫(kù)啟動(dòng)后,向主庫(kù)發(fā)生SYNC命令
主庫(kù)接收到命令并在后臺(tái)保存RDB快照(異步),并將保存快照期間接收到的客戶端命令緩存起來(lái),然后一起發(fā)給從庫(kù)
從庫(kù)會(huì)將收到的內(nèi)容寫(xiě)入磁盤(pán)臨時(shí)文件,最后用臨時(shí)文件替換舊的RDB文件(在寫(xiě)臨時(shí)文件期間,從庫(kù)不會(huì)阻塞客戶端請(qǐng)求,并且用同步前的數(shù)據(jù)響應(yīng)客戶端,可以在redis.conf中配置slave-serve-stale-data為no來(lái)讓從庫(kù)在同步完成前對(duì)除了info和slave之外的所有命令響應(yīng)錯(cuò)誤)
?
3.1.2、復(fù)制同步階段
主庫(kù)每當(dāng)收到寫(xiě)命令就將命令同步給從庫(kù)(同步的內(nèi)容就是redis通信協(xié)議的內(nèi)容)
?
3.1.3、增量復(fù)制
主從庫(kù)斷開(kāi)連接后,從庫(kù)再次連接主庫(kù)時(shí),不必再進(jìn)行一次復(fù)制初始化,而是直接增量復(fù)制(redis2.8版本開(kāi)始支持)。
原理:
?
3.1.4、無(wú)硬盤(pán)復(fù)制
復(fù)制初始化時(shí),由于主庫(kù)會(huì)進(jìn)行快照生成RDB文件,因此會(huì)影響性能。redis2.8版本支持無(wú)硬盤(pán)復(fù)制(redis.conf中將repl-diskless-sync設(shè)置為yes),主庫(kù)直接通過(guò)網(wǎng)絡(luò)將數(shù)據(jù)發(fā)生給從庫(kù)
?
3.2、異步復(fù)制導(dǎo)致主從庫(kù)數(shù)據(jù)不一致怎么解決?
redis主從復(fù)制不保證強(qiáng)一致性,而是保證最終一致性。
另外,可以在主庫(kù)的redis.conf中可以做如下配置。
# 允許最小連接的從庫(kù)數(shù) min-slaves-to-write 3 # 允許從庫(kù)最長(zhǎng)失去連接的時(shí)間 min-slaves-max-lag 10以上兩個(gè)配置只要有一個(gè)不滿足,則主庫(kù)不可寫(xiě)。
?
3.3、主從復(fù)制崩潰恢復(fù)
在主從復(fù)制中,主庫(kù)一般是禁用持久化的,因?yàn)閺膸?kù)已經(jīng)做數(shù)據(jù)備份了,禁用持久化可以提高性能。
從庫(kù)崩潰,直接重啟從庫(kù)即可
主庫(kù)崩潰,不能直接重啟主庫(kù),因?yàn)橹鲙?kù)禁用持久化,如果重啟主庫(kù)則直接丟失數(shù)據(jù),然后同步給從庫(kù),從庫(kù)也相應(yīng)地丟失數(shù)據(jù)。
為了避免數(shù)據(jù)丟失,當(dāng)主庫(kù)崩潰時(shí),需要做以下兩步操作:
在從庫(kù)執(zhí)行slave no one命令將從庫(kù)升級(jí)為主庫(kù)
重啟崩潰的主庫(kù),然后使用slave命令將其設(shè)置為新主庫(kù)的從庫(kù)
?
無(wú)論主庫(kù)崩潰還是從庫(kù)崩潰,都需要手動(dòng)操作,手動(dòng)操作不僅麻煩還容易出錯(cuò),因此redis提供哨兵這一機(jī)制來(lái)支持自動(dòng)操作。
?
4、哨兵
哨兵的功能:
- 監(jiān)控主從庫(kù)是否正常運(yùn)行;
- 主庫(kù)故障時(shí)自動(dòng)將主庫(kù)轉(zhuǎn)為從庫(kù);
可以部署多個(gè)哨兵,哨兵之間也會(huì)互相監(jiān)控。
哨兵甚至可以監(jiān)控多個(gè)主從系統(tǒng),通過(guò)在sentinel.conf中配置多行sentinel monitor配置來(lái)實(shí)現(xiàn)。
哨兵是一個(gè)可執(zhí)行文件,在redis的src目錄下面,名稱為redis-sentinel。
在sentinel.conf中,做如下配置。
sentinel monitor mymaster 127.0.0.1 6379 1mymaster是主庫(kù)名。
127.0.0.1:6379是主庫(kù)的ip和端口號(hào),sentinel.conf中只需要配置要監(jiān)控的主庫(kù)即可,而從庫(kù)sentinel會(huì)根據(jù)主庫(kù)自動(dòng)發(fā)現(xiàn)。
1表示至少需要1個(gè)哨兵節(jié)點(diǎn)同意。
然后執(zhí)行以下命令啟動(dòng)sentinel進(jìn)程
src/redis-sentinel? sentinel.conf
?
下面演示一下哨兵是如何自動(dòng)化監(jiān)控主從復(fù)制的。
為了簡(jiǎn)單起見(jiàn),現(xiàn)有一主一從,主庫(kù)為127.0.0.1::6379,從庫(kù)為127.0.0.1::6380。
以上三步哨兵的日志如下圖所示。
?
5、集群
雖然引入了哨兵,但主從復(fù)制中每個(gè)節(jié)點(diǎn)都存儲(chǔ)全量數(shù)據(jù),因此最大能存儲(chǔ)多少數(shù)據(jù)受限于內(nèi)存最小的那個(gè)節(jié)點(diǎn),形成木桶效應(yīng),因此需要對(duì)redis做數(shù)據(jù)分片。
客戶端分片:
- 舊版redis使用使用客戶端分片,即由客戶端決定每個(gè)鍵交由那個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)存儲(chǔ);
- 弊端:如果集群增刪節(jié)點(diǎn),則需要手動(dòng)遷移數(shù)據(jù),且為了保證遷移過(guò)程中的數(shù)據(jù)一致性需要將集群暫時(shí)下線;
redis3.0開(kāi)始支持集群。
集群特點(diǎn):
- 擁有和單機(jī)實(shí)例同樣的性能;
- 在網(wǎng)絡(luò)分區(qū)后提供一定的可訪問(wèn)性以及對(duì)主庫(kù)故障恢復(fù)的支持;
- redis集群并不支持處理多個(gè)key的命令(如mget),這是因?yàn)樵诓煌墓?jié)點(diǎn)間移動(dòng)數(shù)據(jù)會(huì)達(dá)不到像單機(jī)redis那樣的性能,在高負(fù)載的情況下可能會(huì)導(dǎo)致不可預(yù)料的錯(cuò)誤;
- 只能使用0號(hào)數(shù)據(jù)庫(kù),如果用select切換則報(bào)錯(cuò);
- 支持?jǐn)?shù)據(jù)分片和主從復(fù)制;
?
5.1、插槽
redis cluster沒(méi)有使用一致性hash,而是有一個(gè)哈希槽的概念,默認(rèn)有16384個(gè)插槽。
redis將每個(gè)鍵鍵名的有效部分使用CRC16算法計(jì)算出散列值,然后對(duì)16384取余。
有效部分:
- 如果鍵名中包含{至少一個(gè)字符},則有效部分為大括號(hào)里面的內(nèi)容,比如{user001}:username和{user001}:password這兩個(gè)鍵的有效部分都是user001,那么它們會(huì)被分配到一個(gè)結(jié)點(diǎn)上,可以使用涉及多鍵的命令(比如mget)去處理它們;
- 如果鍵名中不包含{至少一個(gè)字符},則整個(gè)鍵名都是有效部分;
- 如果有多個(gè)大括號(hào)則算法會(huì)在匹配第一個(gè)大括號(hào)就停止,然后進(jìn)行判斷。比如鍵a{b}cozvdkddzhkzd的有效部分為b,而a{}cozvdkddzhkzd的有效部分為整個(gè)鍵名;
集群中的每個(gè)主節(jié)點(diǎn)負(fù)責(zé)分配一部分插槽,cluster slots命令用于查看插槽分配情況,而從節(jié)點(diǎn)只負(fù)責(zé)備份主節(jié)點(diǎn)的插槽。
增刪節(jié)點(diǎn)怎么辦?
- 比如現(xiàn)在有A、B、C三個(gè)主節(jié)點(diǎn),假如想增加D節(jié)點(diǎn),那么只要將A、B、C節(jié)點(diǎn)中的部分槽遷移到D即可,如果想刪除B節(jié)點(diǎn),則只需要將B節(jié)點(diǎn)的槽遷移到A、C節(jié)點(diǎn)即可。
增刪節(jié)點(diǎn)或者是修改某個(gè)節(jié)點(diǎn)槽的數(shù)量都不會(huì)導(dǎo)致集群不可用。
?
5.2、集群的主從復(fù)制模型
redis集群是支持主從復(fù)制的,目的是為了提高可用性。
比如當(dāng)前集群有三個(gè)主節(jié)點(diǎn)A、B、C和三個(gè)從節(jié)點(diǎn)A1、B1、C1,則有以下情況:
主從節(jié)點(diǎn)只要不是都掛,則不需要開(kāi)啟持久化,如果都掛,那必須要開(kāi)啟持久化了。
如果你的redis cluster只用于緩存,那么為了最大程度提升性能,不需要開(kāi)啟持久化。
如果你的redis cluster用來(lái)做數(shù)據(jù)庫(kù),那么就要看情況了,如果主從同時(shí)掛掉的幾率不大且你對(duì)數(shù)據(jù)丟失的容忍度還行的話,就不需要開(kāi)啟持久化,否則需要。
?
5.3、集群一致性
redis集群不保證強(qiáng)一致性,導(dǎo)致不一致的可能原因有兩個(gè):
- 主從節(jié)點(diǎn)間是異步復(fù)制的;
- 某個(gè)主節(jié)點(diǎn)發(fā)生了網(wǎng)絡(luò)分區(qū),比如集群有A、B、C三個(gè)主節(jié)點(diǎn)以及對(duì)應(yīng)的從節(jié)點(diǎn)A1、B1、C1,此時(shí)主節(jié)點(diǎn)B與集群形成網(wǎng)絡(luò)分區(qū),在網(wǎng)絡(luò)分區(qū)期間某個(gè)客戶端往B節(jié)點(diǎn)寫(xiě)數(shù)據(jù),如果網(wǎng)絡(luò)分區(qū)很短暫,那數(shù)據(jù)就不會(huì)丟失;但如果在網(wǎng)絡(luò)分區(qū)期間集群重新選舉了B1節(jié)點(diǎn)為主節(jié)點(diǎn),那么數(shù)據(jù)就會(huì)丟失了;
形成網(wǎng)絡(luò)分區(qū)的節(jié)點(diǎn)的超時(shí)時(shí)間是可以通過(guò)cluster-node-timeout這個(gè)配置項(xiàng)配置的,如果沒(méi)有超時(shí),則客戶端可以正常向分區(qū)節(jié)點(diǎn)寫(xiě)數(shù)據(jù),如果超時(shí)則不能寫(xiě)入。
?
5.4、搭建集群
集群至少需要3個(gè)節(jié)點(diǎn)才能正常運(yùn)行,下面演示一下在單個(gè)centos系統(tǒng)上配置一個(gè)3主3從的redis集群。
集群重要配置如下。
cluster-enable yes cluster-node-timeout 5000 cluster-config-file nodes.conf集群文件夾結(jié)構(gòu)如下圖所示。
6381節(jié)點(diǎn)配置文件內(nèi)容如下,其它節(jié)點(diǎn)類似(關(guān)于模板配置文件見(jiàn)本文第6節(jié)-redis模板配置文件)。
include ../run/redis-cluster.conf port 6381 pidfile /usr/local/redis-cluster/run/redis-6381.pid logfile /usr/local/redis-cluster/run/redis-6381.log dir /usr/local/redis-cluster/6381/ cluster-config-file /usr/local/redis-cluster/run/nodes-6381.conf啟動(dòng)各個(gè)節(jié)點(diǎn),用redis-cli連接任意節(jié)點(diǎn)執(zhí)行info cluster命令可以查看集群狀態(tài),cluster_enable為1表示可用。
但此時(shí)還不能寫(xiě)數(shù)據(jù),比如在任意節(jié)點(diǎn)執(zhí)行set age 10命令時(shí),會(huì)報(bào)錯(cuò):(error) CLUSTERDOWN Hash slot not served。
這是因?yàn)榇藭r(shí)每個(gè)節(jié)點(diǎn)還是獨(dú)立狀態(tài),下面需要將各節(jié)點(diǎn)聯(lián)系在一起,即初始化集群。
如果是舊版本的redis,可以使用src/redis-trib(ruby語(yǔ)言編寫(xiě),安裝Ruby見(jiàn)本文第7節(jié)-安裝Ruby)來(lái)初始化集群,初始化集群的命令如下。
src/redis-trib.rb --replicas 1 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 127.0.0.1:6385 127.0.0.1:6386replicas 1表示每個(gè)主節(jié)點(diǎn)的副本個(gè)數(shù)為1。
如果執(zhí)行上述命令提示W(wǎng)ARNING: redis-trib.rb is not longer available!,則表示當(dāng)前版本的redis已經(jīng)不支持redis-trib.rb,具體的提示信息如下圖所示。
根據(jù)該提示,我們知道了應(yīng)該使用redis-cli來(lái)代替redis-trib.rb。
首先在redis-cli中執(zhí)行cluster help命令,查看與集群cluster相關(guān)的命令有哪些,如下所示。
ADDSLOTS <slot> [slot ...] -- 為當(dāng)前節(jié)點(diǎn)分配槽位 BUMPEPOCH -- Advance the cluster config epoch. COUNT-failure-reports <node-id> -- 根據(jù)<node-id>返回失敗報(bào)告的數(shù)量 COUNTKEYSINSLOT <slot> - 根據(jù)槽位返回key數(shù)量 DELSLOTS <slot> [slot ...] -- 在當(dāng)前節(jié)點(diǎn)刪除指定槽位 FAILOVER [force|takeover] -- 將當(dāng)前復(fù)制節(jié)點(diǎn)提升為主節(jié)點(diǎn) FORGET <node-id> -- 從集群中移除節(jié)點(diǎn) GETKEYSINSLOT <slot> <count> -- 返回當(dāng)前節(jié)點(diǎn)存儲(chǔ)在插槽中的鍵名 FLUSHSLOTS -- 刪除當(dāng)前節(jié)點(diǎn)的槽位信息 INFO - 返回關(guān)于集群的信息. KEYSLOT <key> -- 根據(jù)key返回hash槽 MEET <ip> <port> [bus-port] -- 將節(jié)點(diǎn)連接到工作集群 MYID -- 返回當(dāng)前節(jié)點(diǎn)id NODES -- 返回節(jié)點(diǎn)看到的集群配置。輸出格式:<id> <ip:port> <flags> <master> <pings> <pongs> <epoch> <link> <slot> ... <slot> REPLICATE <node-id> -- 配置當(dāng)前節(jié)點(diǎn)為<node-id>的復(fù)制節(jié)點(diǎn) RESET [hard|soft] -- 重置當(dāng)前節(jié)點(diǎn) (默認(rèn): soft). SET-config-epoch <epoch> - Set config epoch of current node. SETSLOT <slot> (importing|migrating|stable|node <node-id>) -- 設(shè)置槽位狀態(tài). REPLICAS <node-id> -- 返回指定主節(jié)點(diǎn)的副本節(jié)點(diǎn) SLOTS -- 返回關(guān)于槽范圍映射的信息。每個(gè)系列都是由:start, end, master and replicas IP addresses, ports and ids?
初始化集群步驟:
1、使用cluster meet命令將各個(gè)節(jié)點(diǎn)聯(lián)系在一起,如下圖所示。
再執(zhí)行cluster nodes命令,可以看到六個(gè)節(jié)點(diǎn)聯(lián)系在一起了,如下圖所示。但此時(shí)這六個(gè)節(jié)點(diǎn)都是主庫(kù),并且還沒(méi)有分配插槽。
2、使用cluster addslots命令為所有主庫(kù)分配插槽。
由于cluster addslots命令不支持批量添加插槽,所以我寫(xiě)了一個(gè)shell腳本利用for循環(huán)批量分配插槽,shell腳本如下。
for ((i=$3; i<=$4; i ++)) do6381/src/redis-cli -h $1 -p $2 cluster addslots $i > /dev/null done現(xiàn)在讓6381、6382、6383為主庫(kù),我們將16384個(gè)插槽分配給這三個(gè)主庫(kù),具體分配情況如下:
6381占0~5460號(hào)插槽,共5461個(gè)
6382占5461~10920號(hào)插槽,共5462個(gè)
6383占10921~16383號(hào)插槽,共5461個(gè)
執(zhí)行如下命令即可分配插槽:
./cluster-addslots.sh 127.0.0.1 6381 0 5460 ./cluster-addslots.sh 127.0.0.1 6382 5461 10920 ./cluster-addslots.sh 127.0.0.1 6383 10921 16383最新使用cluster slots命令查找插槽分配情況。
?
3、使用cluster replicate命令設(shè)置從庫(kù)
執(zhí)行如下命令,使得:
- 6384為6381的從庫(kù);
- 6383為6382的從庫(kù);
- 6384為6383的從庫(kù);
最后使用cluster nodes命令查看集群節(jié)點(diǎn)信息,即可看到有三個(gè)主庫(kù)和三個(gè)從庫(kù),如下圖所示。
?
集群搭建好后,我們使用redis-cli往集群寫(xiě)一些數(shù)據(jù)試試,但如果不幸運(yùn)的話寫(xiě)第一個(gè)數(shù)據(jù)就會(huì)報(bào)錯(cuò),如下圖所示。
這是因?yàn)閞edis-cli連接的是6381這個(gè)節(jié)點(diǎn),但user:1這個(gè)key會(huì)被分配到6382節(jié)點(diǎn),因此寫(xiě)入錯(cuò)誤。
解決辦法是,redis-cli支持以集群模式連接到某一個(gè)節(jié)點(diǎn),并且支持自動(dòng)重定向,如下圖所示。
?
6、redis模板配置文件
redis-5.0.5版本默認(rèn)配置文件(去除注釋)如下。
################################## INCLUDES ################################### ################################## MODULES ##################################### ################################## NETWORK ##################################### bind 127.0.0.1 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 ################################# GENERAL ##################################### daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo yes ################################ SNAPSHOTTING ################################ save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ ################################# REPLICATION ################################# replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-diskless-sync-delay 5 repl-disable-tcp-nodelay no replica-priority 100 ################################## SECURITY ################################### ################################### CLIENTS #################################### ############################## MEMORY MANAGEMENT ################################ ############################# LAZY FREEING #################################### lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no ############################## APPEND ONLY MODE ############################### appendonly no appendfilename "appendonly.aof" appendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes ################################ LUA SCRIPTING ############################### lua-time-limit 5000 ################################ REDIS CLUSTER ############################### ########################## CLUSTER DOCKER/NAT support ######################## ################################## SLOW LOG ################################### slowlog-log-slower-than 10000 slowlog-max-len 128 ################################ LATENCY MONITOR ############################## latency-monitor-threshold 0 ############################# EVENT NOTIFICATION ############################## notify-keyspace-events "" ############################### ADVANCED CONFIG ############################### hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes client-output-buffer-limit normal 0 0 0 client-output-buffer-limit replica 256mb 64mb 60 client-output-buffer-limit pubsub 32mb 8mb 60 hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes ########################### ACTIVE DEFRAGMENTATION #######################將默認(rèn)的配置文件做如下修改(如何修改具體看需求),使其變?yōu)樗泄?jié)點(diǎn)通用的模板配置文件:
- 注釋bind
- protected-mode改為no
- 注釋port
- daemonize改為yes
- 注釋pidfile
- 注釋logfile
- 注釋三個(gè)save
- 注釋dir
如果是集群模式,則還需要:
- 新增cluster-enabled yes;
然后再針對(duì)單個(gè)節(jié)點(diǎn)用include指令導(dǎo)入公共模板(注意使用相對(duì)路徑,否則啟動(dòng)會(huì)報(bào)錯(cuò)),然后再做一些本節(jié)點(diǎn)的特殊配置,如下所示:
include?../run/redis_useful.conf port 6379 pidfile /var/run/redis_6379.pid logfile /var/log/redis_6379.log dir /usr/local/redis-5.0.5/?
7、安裝Ruby
總結(jié)
以上是生活随笔為你收集整理的redis复制、哨兵、集群详细介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 我屮艸芔茻!!!什么情况,就刚才,百年之
- 下一篇: NES模拟器源码阅读