1、安裝從服務器
a)、找到redis實例,直接復制一份出來,如下圖
b)、修改從庫端口號,打開從庫文件夾找到redis.windows.conf和redis.windows-service.conf文件,修改端口
修改完成之后,cd到從庫安裝目錄,輸入redis-server.exe redis.windows.conf,使用cmd就可以連接從庫了。
但是這也樣每次都需要cd到文件夾進行啟動,需要設置成服務,命令如下:
redis-server --service-install redis.windows.conf --maxmemory 200m --service-name redis6380
2、配置主從
a)、可以使用 SLAVEOF 命令, master 會開啟一個跟 slave 間的同步,如果當前從服務器已經依賴了其他主服務器,那么會丟失掉舊主服務器的數據,對新主服務器進行數據同步, 如果想把從服務器升級為主服務器,使用SLAVEOF NO ONE就可以把從服務器升級成主服務器,這個命令不會丟失掉以前主從同步的數據。
b)、配置永久復制
打開redis.windows.conf文件,找到# slaveof <masterip> <masterport>這個地方,添加slaveof master的ip地址 master的端口
測試
3、主從同步的工作原理
每一個 Redis master 都有一個 replication ID :這是一個較大的偽隨機字符串,標記了一個給定的數據集。每個 master 也持有一個偏移量,master 將自己產生的復制流發送給 slave 時,發送多少個字節的數據,自身的偏移量就會增加多少,目的是當有新的操作修改自己的數據集時,它可以以此更新 slave 的狀態。復制偏移量即使在沒有一個 slave 連接到 master 時,也會自增,所以基本上每一對給定的
Replication ID, offset
都會標識一個 master 數據集的確切版本。
當 slave 連接到 master 時,它們使用 PSYNC 命令來發送它們記錄的舊的 master replication ID 和它們至今為止處理的偏移量。通過這種方式, master 能夠僅發送 slave 所需的增量部分。但是如果 master 的緩沖區中沒有足夠的命令積壓緩沖記錄,或者如果 slave 引用了不再知道的歷史記錄(replication ID),則會轉而進行一個全量重同步:在這種情況下, slave 會得到一個完整的數據集副本,從頭開始。
無需磁盤參與的復制
正常情況下,一個全量重同步要求在磁盤上創建一個 RDB 文件,然后將它從磁盤加載進內存,然后 slave以此進行數據同步。
如果磁盤性能很低的話,這對 master 是一個壓力很大的操作。Redis 2.8.18 是第一個支持無磁盤復制的版本。在此設置中,子進程直接發送 RDB 文件給 slave,無需使用磁盤作為中間儲存介質。
無磁盤復制可以使用 repl-diskless-sync 配置參數。repl-diskless-sync-delay 參數可以延遲啟動數據傳輸
安全性問題
如果開啟了主從復制,一定要開啟主從服務器的持久化,如果不開啟持久化並且主服務器又是配置的默認自動啟動,那么當主服務器掛了,然后在重新啟動主服務器的時候,因為沒有配置持久化,那么這個時候主服務器就是空數據集合,這個時候從服務器去復制主服務器的數據,發現主服務器是空的,那么會銷毀從服務器自身的數據。這是非常危險的。所以如果沒有開啟持久化,那么自動啟動這項服務應該要禁用