Redis-3. Redis高級命令
- 2020 年 1 月 14 日
- 筆記
高級命令三:主從複製
1、主從複製:目的是實現讀寫分離
·Master可以擁有多個slave
·多個slave可以連接同一個Master外,還可以連接其他的slave
·主從複製不會阻塞master,在同步數據時,master可以繼續處理client請求
·提高系統的延伸性
2、主從複製過程:
1)slave與master建立連接,發送sync同步命令;
2)master開啟後台進程,將資料庫快照保存到文件中,同時master主進程會開始收集新的寫命令並快取;
3)後台完成保存後,就將文件發送給slave;
4)slave將此文件保存到硬碟上;
3、主從複製配置:
準備3台linux伺服器,分別192.168.90.121(主)、192.168.90.122、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 //從不同步。高效但是數據不會被持久化
