高級命令三:主從複製linux
一、主從複製:目的是實現讀寫分離redis
·Master能夠擁有多個slave數據庫
·多個slave能夠鏈接同一個Master外,還能夠鏈接其餘的slave緩存
·主從複製不會阻塞master,在同步數據時,master能夠繼續處理client請求服務器
·提升系統的延伸性app
二、主從複製過程:ide
1)slave與master創建鏈接,發送sync同步命令;性能
2)master開啓後臺進程,將數據庫快照保存到文件中,同時master主進程會開始收集新的寫命令並緩存;spa
3)後臺完成保存後,就將文件發送給slave;日誌
4)slave將此文件保存到硬盤上;
三、主從複製配置:
準備3臺linux服務器,分別192.168.90.121(主)、192.168.90.12二、192.168.90.123;分別安裝redis;
步驟:修改redis.conf配置文件
第一步:slaveof <masterIp> <masterport> 舉例:slaveof 192.168.1.121 6379
第二部:masterauth<master-password> 舉例:masterauth wlan
高級命令四:哨兵
在主從複製之後,若是想對主從服務器進行監控,實現高可用。redis2.6之後提供了一個哨兵機制。哨兵的含義就是監控redis系統的運行情況,主要功能有兩點:
1. 監控主數據庫和從數據庫是否運行正常。
2. 主服務器出現故障時,能夠自動將從服務器轉換爲主服務器。
實現步驟:在其中一臺從服務器中或者另外用別的服務器進行配置
(1)修改sentinel.conf配置文件
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 192.168.1.121 6379 2 //名稱 IP 端口號 投票選舉次數
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 5000 //默認多久檢測一次主節點
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 2 //從節點數量
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster wlan
(2)啓動sentinel哨兵
[root@wlan121 bin]# redis-server /usr/local/redis/etc/sentinel.conf --sentinel &
(3)查看哨兵相關信息
[root@wlan121 bin]# redis-cli -h 192.168.1.122 -p 26379 info Sentinel
高級命令六:持久化
redis是一個支持持久化的內存數據庫,也就是說redis須要常常將內存中的數據同步到硬盤來保證持久化。
redis持久化的兩種方式:
(1)snapshotting快照方式,默認。將內存以快照的方式寫入到二進制文件中。默認爲dump.rdb。能夠配置redis在n秒內若是超過m個key則修改就自動作快照。快照方式是必定時間間隔作一次。
save 900 1 #900秒內若是超過1個key被修改,則發起快照保存
save 300 10 #300秒內若是超過10個key被修改,則發起快照保存
(2)append-only file(aof)的方式,因爲快照方式是在必定時間間隔作一次,因此可能會發生redis意外down的狀況就會丟失最後一次快照後全部修改的數據。而使用aof時,該機制以日誌的形式記錄服務器所處理的每個寫操做,在redis服務器啓動之初讀取該文件來從新構建數據庫,以保證啓動後數據庫中的數據是完整的。文件在bin目錄下:appendonly.aof。aof不是當即寫到硬盤上。能夠經過配置文件修改強制寫到硬盤中。
aof設置:
1)appendonly yes //啓動aof持久化方式有三種修改方式
2)追加的模式
appendfsync always //收到寫命令就當即寫入磁盤,效率慢可是保證了徹底的持久化
appendfsync everysec //每秒寫入磁盤一次,在性能和持久化作了作好的折中
appendfsync no //從不一樣步。高效可是數據不會被持久化