常見的主從形式
第三種是因為slave太多,都從master同步數據,master IO壓力很大,所以拿一部分slave也作為master。
一個slave只能有一個master,一個master可以有多個slave。
主從復制不會阻塞redis服務器,redis服務器在主從復制的同時仍可以處理客戶端請求。
主從復制的作用
- 數據冗余(數據備份)
- 讀寫分離:從slave讀取數據、master負責數據的寫操作,提高服務器性能
- 負載均衡:多個從節點都負責讀,可使用nginx進行讀的負載均衡
- 高可用:master出現問題,可使用一個slave作為master;部分slave出現問題,其它slave可用
全量復制、偏移量
slave第一次連接master后,會從master復制全部數據,稱為全量復制。
之后每次從master同步,都只復制偏移量(offset,距離上一次同步,期間做的修改)。如果偏移量復制失敗,則嘗試進行全量復制。
當然,如果有需要,slave 在任何時候都可以發起全量同步。
redis主從同步配置
有2種方式:配置文件方式、命令方式。
redis 5.0之后的版本用replicaof代替了slaveof,雖然在5.0中slaveof還能用(向下兼容),但早晚要被取消,盡量用replicaof。
此處以5.0版本為例,若使用的是5.0之前的版本,把所有的replicaof都換成slaveof即可。
要模擬的話,在VMware上克隆虛擬機,就有多個Linux了,不必修改使用的端口號。
如果在一個虛擬機上模擬(使用多個redis服務器),將之前的redis復制多份,放到/usr/local/redis下,重命名為redis1、redis2....並修改redis.conf中的端口號、各種文件保存位置。
如何查看redis的版本?
cd到redis的bin目錄,以下4句命令任選一句執行:
./redis-cli -v ./redsi-cli --version #全稱是2根- ./redis-server -v ./redis-server --version
配置文件方式(推薦)
修改redis.conf中的配置。
1、master的配置
replicaof、masterauth的配置要注釋掉。
master宕機后,把某個slave的replicaof配置注釋掉,作為新的master,再把其它slave指向此節點。
設置slave只讀(讀寫分離)。
其實這些都是默認值,看一下只是怕之前改過。
看一下有沒有設置密碼。
如果做了修改,需重啟redis。
2、slave的設置
設置一下master的ip、port,如果master設置了密碼,此處還需要寫上master的密碼。
重啟下redis生效。
連上master,看下主從復制信息:
info replication
連接的slave的個數,各slave的ip、port、state、偏移量都可以看到。
那個replid即replication id,每次復制完都會用replid打一個標記復制至此,距上一replid之間的內容就是偏移量(增量)。
我們隨便set一個鍵值對,比如set user hasagei
連上slave,同樣的方式看下:
master的信息、本slave的信息都可以看到,包括slave是否只讀、偏移量等等。
有個參數是connected_slaves,是本節點的從節點個數(層疊,從節點也可以作為主節點),如果有,也會列出各從節點的信息。
get一下剛才在master中設置的key,能獲取到值;
set一個鍵值對,報錯,即只讀。
命令方式(了解即可)
(1)連接到要做為主節點的redis服務器
replicaof no one
使之成為主節點
config set replica-read-only yes
設置slave只讀
也可以先查看,不符合要求再設置:
config get replica-read-only
(2)連接到要作為slave的redis服務器
replicaof no one
可能之前就是某個master的從屬,先去掉雜七雜八的主人。
replicaof 192.168.1.7 6379 #master的ip、port
缺點:
- 配置不是永久性的,只在本次連接期間有效,下次還需要配置,麻煩
- 如果master設置了密碼,則連不上
也可以手動同步:
sync #馬上執行主從同步