標籤:
主從配置
首先正常安裝並配置兩個redis服務,master上需要添加如下配置:
port port
logfile logfile
其中port為master伺服器的連接埠,logfile為master的日誌輸出地址及記錄檔名。
然後修改想要配置為slave服務的redis的設定檔redis.conf並加入如下配置:
port port1
slaveof ip2 port2
masterauth pwd
其中port1為slave伺服器的連接埠,ip2和port2為master伺服器的ip地址和連接埠,pwd為master的串連密碼(如果master沒有設定串連密碼則不需要配置)。
執行個體:
1、安裝兩個redis服務(可在不同機器上)如:
redis1:
redis2:
2、將redis1作為主redis服務,設定檔中需要修改如下參數:
# 設定主服務的連接埠
port 6379
# 設定redis連線逾時(單位毫秒)
timeout 30000
# 設定redis服務日誌輸出地址(完整路徑+檔案名稱)
logfile /data/cachedb1/redis1.log
# 關閉主服務上的Snapshot(取消設定檔中save參數的設定)
# save 900 1
# save 300 10
# save 60 10000
# 關閉dump檔案輸出(取消設定檔中dump輸出檔案名稱及目錄的設定)
# dbfilename dump1.rdb
# dir /data/cachedb1/
# 關閉AOF
appendonly no
# 取消AOF輸出檔案名設定
#appendfilename appendonly1.aof
# 設定AOF方式為no
appendfsync no
將redis2作為從redis服務,設定檔中需要修改如下參數:
# 設定主服務的連接埠
port 6380
# 設定redis連線逾時(單位毫秒)
timeout 30000
# 設定redis服務日誌輸出地址(完整路徑+檔案名稱)
logfile /data/cachedb2/redis2.log
# 設定主服務上的Snapshot時間
save 900 1
save 300 10
save 60 10000
# 設定dump檔案輸出檔案名
# dbfilename dump2.rdb
# 設定dump檔案輸出檔案目錄
# dir /data/cachedb2/
# 設定主服務IP、連接埠
slaveof 127.0.0.1 6379
# 開啟AOF
appendonly yes
# 設定AOF輸出檔案名
appendfilename appendonly2.aof
# 設定AOF方式為每秒一次
appendfsync everysec
3、啟動主服務:
啟動從服務:
4、驗證服務是否啟動正常:
驗證主服務:
驗證從服務:
驗證主服務輸出檔案:
驗證從服務輸出檔案:
附錄:容災策略
基本的redis的容災策略為:
1、採用master-slave方式
2、為了得到好的讀寫效能,master不做任何的持久化
3、slave同時開啟Snapshot和AOF來進行持久化,保證資料的安全性
4、當master掛掉後,修改slave為master(或使用第三方主從自動切換工具來完成)
5、拷貝slave上的rdb檔案到原master上來恢複原master資料,修改原master為slave,啟動slave
6、原master恢複後再把它恢複成master,並把原slave恢複為slave
7、若master與slave都掛掉後,調用命令通過aof和snapshot進行恢複
關閉Snapshot的方法為取消redis.conf中所有“save xxx xxx”的配置。其中xxx為具體數值。
關閉AOF的方法為在redis.conf中添加如下配置:
appendonly no
redis的主從自動切換功能也需要第三方的支援,可以使用keepalive工具來實現,但相對較麻煩,需要編寫shell指令碼。
分布式儲存
目前,Redis本身並不支援叢集功能,Redis自身的叢集功能還在研發中,官方預計在3.0版本中才會加入此功能。因此,在分布式叢集方面目前只能通過用戶端工具來實現一致性雜湊分布儲存,即key分區儲存。這裡推薦使用Jedis,Jedis 是 Redis 官方首選的 Java 用戶端開發包。
項目地址:https://github.com/xetorthio/jedis
架構:
/- Redis (node 1)
Client 1 ---\ /-- Redis (node 2)
Jedis --- Redis (node 3)
Client 2 --- / \-- Redis (node 4)
\- Redis (node 5)
使用Jedis進行分布式儲存需要根據業務情境及資料特點對Jedis做適當封裝。
情境及分析
目前主要用到Redis的地方有兩個:裝置上線介面和日誌接收介面
裝置上線介面:
在redis中的儲存類型:hash
特點:資料量有限且相對穩定,每條資料內容較小,讀操作大於寫操作,儲存的資料可能需要長時間儲存在redis裡,資料可靠性要求較高。
鑒於以上特點要求redis具有高可用性及快速讀取響應能力。
設計叢集部署方案如下:
說明:
1、由Jedis完成redis的分布式儲存,並進行封裝對用戶端提供統一介面。
2、以一個master-slave為一組的方式搭建叢集。master上不做持久化以滿足高響應速度的需求,只在slave端開啟Snapshot和AOF來保證資料的可靠性。
3、在每個master-slave上都是用keepalive來實現自動接管,以保證redis服務的高可用性。
日誌接收介面:
在redis中的儲存類型:hash
特點:資料量不固定,每條資料內容較大,讀寫平均,儲存的資料不需要長時間儲存在redis裡,宕機後允許丟失部分資料。
鑒於以上特點對redis要求較低,保證穩定和可擴容即可。
設計叢集部署方案如下:
說明:
由Jedis完成redis的分布式儲存,並進行封裝對用戶端提供統一介面。每個redis服務都開啟Snapshot和AOF來保證資料的可靠性。
其他
推薦一些redis的監控工具如下:
監控服務
-Sentinel
Sentinel 是 Redis 內建的工具,它可以對 Redis 主從複製進行監控,並實現主掛掉之後的自動容錯移轉。在轉移的過程中,它還可以被配置去執行一個使用者自訂的指令碼,在指令碼中我們就能夠實現警示通知等功能。
-Redis Live
Redis Live 是一個更通用的 Redis 監控方案,它的原理是定時在 Redis 上執行 MONITOR 命令,來擷取當前 Redis 當前正在執行的命令,並通過統計分析,產生web頁面的可視化分析報表。
-Redis Faina
Redis Faina 是由著名的圖片分享應用 instagram 開發的 Redis 監控服務,其原理和 Redis Live 類似,都是對通過 MONITOR 來做的。
資料分布
弄清 Redis 中資料存放區分布是一件很難的是,比如你想知道哪類型的 key 值佔用記憶體最多。下面是一些工具,可以協助你對 Redis 的資料集進行分析。
-Redis-sampler
Redis-sampler 是 Redis 作者開發的工具,它通過採樣的方法,能夠讓你瞭解到當前 Redis 中的資料的大致類型,資料及分布狀況。
-Redis-audit
Redis-audit 是一個指令碼,通過它,我們可以知道每一類 key 對記憶體的使用量。它可以提供的資料有:某一類 key 值的訪問頻率如何,有多少值設定了到期時間,某一類 key 值使用記憶體的大小,這很方便讓我們能排查哪些 key 不常用或者壓根不用。
-Redis-rdb-tools
Redis-rdb-tools 跟 Redis-audit 功能類似,不同的是它是通過對 rdb 檔案進行分析來取得統計資料的。
Redis主從配置