第2節:部署Redis的主從集羣模式redis
爲確保數據安全和更高的讀寫性能,Redis存儲系統通常採用集羣的模式,目前常見的Redis集羣實現方案有如下五種:數據庫
採用主從模式:該模式優勢是命令全兼容,直連redis性能無損耗;缺點是容量受單機限制,擴容較麻煩。vim
Twemproxy代理模式:該模式優勢是支持sharding和自動容災;缺點是不支持在線擴容,比較適合緩存的場景。後端
Redis cluster模式:該模式優勢是直連Redis性能無損耗;缺點是Redis節點既要處理業務數據又要負責集羣管理,邏輯比較重,給升級和運維都形成了困難。Redis cluster還須要smart client客戶端的支持,而目前穩定版的smart client還不多。緩存
Codis集羣:codis模式和Twemproxy都屬於代理模式,相比Twemproxy他的優勢是支持簡單的管理頁面和在線擴容。缺點是模塊較多,搭建和維護比較複雜,並且一個集羣只支持一個實例,若是須要使用多個實例須要從新部署多套同樣的codis集羣,大大提高了運維的複雜度。安全
自行研發:若是以爲以上幾種模式都不適合本身的業務場景,能夠自行研發一套適合本身業務場景的Redis集羣系統服務器
一、構建Redis的主從模式app
Redis的主從原理:運維
Redis主從複製能夠根據是不是全量分爲全量同步和增量同步。ide
1、全量同步
Redis全量複製通常發生在Slave初始化階段,這時Slave須要將Master上的全部數據都複製一份。具體步驟以下:
1)從服務器鏈接主服務器,發送SYNC命令;
2)主服務器接收到SYNC命名後,開始執行BGSAVE命令生成RDB文件並使用緩衝區記錄此後執行的全部寫命令;
3)主服務器BGSAVE執行完後,向全部從服務器發送快照文件,並在發送期間繼續記錄被執行的寫命令;
4)從服務器收到快照文件後丟棄全部舊數據,載入收到的快照;
5)主服務器快照發送完畢後開始向從服務器發送緩衝區中的寫命令;
6)從服務器完成對快照的載入,開始接收命令請求,並執行來自主服務器緩衝區的寫命令;
2、增量同步
Redis增量複製是指Slave初始化後開始正常工做時主服務器發生的寫操做同步到從服務器的過程。增量複製的過程主要是主服務器每執行一個寫命令就會向從服務器發送相同的寫命令,從服務器接收並執行收到的寫命令。
主從剛剛鏈接的時候,進行全量同步;全同步結束後,進行增量同步。固然,若是有須要,slave 在任什麼時候候均可以發起全量同步。redis 策略是,不管如何,首先會嘗試進行增量同步,如不成功,要求從機進行全量同步。
配置步驟:
1、Master配置:
[root@localhost ~]# vim /usr/local/redis/redis.conf
修改:
bind 192.168.1.1 //服務所綁定的IP地址,填寫自身Master自身IP
port 6379 //監聽端口
requirepass 123.com //認證密碼密碼
2、Slave配置:
[root@localhost ~]# vim /usr/local/redis/redis.conf
修改:
bind 192.168.1.2
port 6378
slaveof 192.168.1.1 6379 //指定主的IP及端口號
masterauth 123.com //主的認證密碼
requirepass 123.com
3、從新啓動redis服務
[root@localhost ~]# netstat -anpt | grep redis
[root@localhost ~]# killall -9 redis-server 或者使用柔和一點,平緩退出的方式:killall -s QUIT redis-server
或者
[root@localhost ~]# service redis stop
[root@localhost ~]# rm -rf /usr/local/redis/pid/redis.pid
[root@localhost ~]# service redis start
4、驗證:
1)查看redis日誌
Master服務器的日誌
[root@localhost ~]# tailf /usr/local/redis/log/redis.log
4916:M 16 Feb 15:52:51.127 * DB loaded from disk: 0.000 seconds
4916:M 16 Feb 15:52:51.127 * The server is now ready to accept connections on port 6379
4916:M 16 Feb 15:53:07.104 * Slave 192.168.1.2:6379 asks for synchronization
4916:M 16 Feb 15:53:07.104 * Full resync requested by slave 192.168.1.2:6379
4916:M 16 Feb 15:53:07.104 * Starting BGSAVE for SYNC with target: disk
4916:M 16 Feb 15:53:07.105 * Background saving started by pid 4919
4919:C 16 Feb 15:53:07.120 * DB saved on disk
4919:C 16 Feb 15:53:07.121 * RDB: 6 MB of memory used by copy-on-write
4916:M 16 Feb 15:53:07.192 * Background saving terminated with success
4916:M 16 Feb 15:53:07.192 * Synchronization with slave 192.168.1.2:6379 succeeded
Slave服務器的日誌
[root@localhost ~]# tailf /usr/local/redis/log/redis.log
4747:S 16 Feb 15:53:07.098 * Connecting to MASTER 192.168.1.1:6379
4747:S 16 Feb 15:53:07.099 * MASTER <-> SLAVE sync started
4747:S 16 Feb 15:53:07.100 * Non blocking connect for SYNC fired the event.
4747:S 16 Feb 15:53:07.103 * Master replied to PING, replication can continue...
4747:S 16 Feb 15:53:07.104 * Partial resynchronization not possible (no cached master)
4747:S 16 Feb 15:53:07.106 * Full resync from master: ae1ddd593e87630fdf33de99e45b4b98340d96c3:1
4747:S 16 Feb 15:53:07.193 * MASTER <-> SLAVE sync: receiving 92 bytes from master
4747:S 16 Feb 15:53:07.193 * MASTER <-> SLAVE sync: Flushing old data
4747:S 16 Feb 15:53:07.193 * MASTER <-> SLAVE sync: Loading DB in memory
4747:S 16 Feb 15:53:07.193 * MASTER <-> SLAVE sync: Finished with success
2、查看rdb快照文件
Master中:
[root@localhost ~]# ls /usr/local/redis/db/
Slave中:
[root@localhost ~]# ls /usr/local/redis/db/
3、數據同步
Master中:
[root@localhost ~]# redis-cli -a 123.com -h 192.168.1.1 -p 6379
192.168.1.1:6379> info
192.168.1.1:6379> set key2 kokokoko
192.168.1.1:6379> get key2
Slave中:
[root@localhost ~]# redis-cli -a 123.com -h 192.168.1.2 -p 6378
192.168.1.2:6378> info
192.168.1.2:6378> get key2
2、數據的持久化
Redis支持數據的持久化,若機器重啓,Redis會從磁盤文件中重建內存數據,因此愈來愈多的公司爲獲取更高的讀和寫性能,將Redis做爲持久化的數據庫,後端不接其餘數據庫,這種場景相比作緩存的場景的優點是除了能提高系統的讀性能外,還能提高系統的寫性能。
數據的持久化的方式:
1、snapshotting方式 snapshotting:快照
快照是默認的持久化方式。這種方式是就是將內存中數據以快照的方式寫入到二進制文件中,
默認的文件名爲dump.rdb。
配置:vim /usr/local/redis/redis.conf
save 900 1 #900 秒內若是超過1 個key 被修改,則發起快照保存
save 300 10 #300 秒內容如超過10 個key 被修改,則發起快照保存
save 60 10000
2、aof 方式
因爲快照方式是在必定間隔時間作一次的,因此若是redis 意外down 掉的話,就會丟失最後一次快照後的全部修改。redis 會將每個收到的寫命令都經過write 函數追加到文件中(默認是appendonly.aof)。當redis 重啓時會經過從新執行文件中保存的寫命令來在內存中重建整個數據庫的內容。
配置:vim /usr/local/redis/redis.conf
appendonly yes //啓用aof 持久化方式
# appendfsync always //收到寫命令就當即寫入磁盤,最慢,可是保證徹底的持久化
appendfsync everysec //每秒鐘寫入磁盤一次,在性能和持久化方面作了很好的折中
# appendfsync no //徹底依賴os,性能最好,持久化沒保證 不寫入磁盤,加了#號,表示不推薦
三、使用redis-desktop-manager軟件
在Windows中安裝redis-desktop-manager軟件。實現圖形界面中管理redis數據庫。
軟件:http://down.51cto.com/data/2287754