Redis主從配置
主從配置
首先正常安裝并配置兩個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為具體數值。
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里,數據可靠性要求較高。
鑒于以上特點要求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 文件進行分析來取得統計數據的。