一、引言
Redis有三種集群模式,第一個就是主從模式,第二種“哨兵”模式,第三種是Cluster集群模式,第三種的集群模式是在Redis 3.x以后的版本才增加進來的,我們今天就來說一下Redis第一種集群模式:主從集群模式。
二、配置說明
實現主從復制(Master-Slave Replication)的工作原理:Slave從節點服務啟動並連接到Master之后,它將主動發送一個SYNC命令。Master服務主節點收到同步命令后將啟動后台存盤進程,同時收集所有接收到的用於修改數據集的命令,在后台進程執行完畢后,Master將傳送整個數據庫文件到Slave,以完成一次完全同步。而Slave從節點服務在接收到數據庫文件數據之后將其存盤並加載到內存中。此后,Master主節點繼續將所有已經收集到的修改命令,和新的修改命令依次傳送給Slaves,Slave將在本次執行這些數據修改命令,從而達到最終的數據同步。
如果Master和Slave之間的鏈接出現斷連現象,Slave可以自動重連Master,但是在連接成功之后,一次完全同步將被自動執行
主從復制配置:
第一步:修改從節點的配置文件:slaveof <masterip> <masterport>
第二步:如果設置了密碼,就要設置:masterauth <master-password>
主從復制的配置很簡單,主要操作從節點的配置文件,主節點不需要任何改動。我們可以使用info查看role角色即可知道是主服務或從服務。
版本特點:測試版本為redis-5.0.5
REPLICATION,主從模式的配置。注意,之前版本的redis,配置為slave of,現在改為REPLICATION。
主從模式,可以是樹狀的,從服務屬於多台主服務,且從服務也可以有從服務。
主從模式,可實現讀寫分離;高可用模式下,主服務出現問題,也可以通過哨兵切換從服務為主服務;
可實現主服務不用數據持久化,從服務進行持久化工作,減輕主服務負擔等等。
- replicaof <masterip> <masterport>:配置主服務的ip和端口。配置之后,就是這台機器的小弟了。主服務也能知道誰是他的小弟。
- masterauth <master-password>:如果主服務需要密碼認證,這里需要配置從服務連接主服務的密碼。
- replica-read-only:默認為yes,配置從服務默認為只讀模式。
三、主從模式的配置
1.redis主從
1)創建主從目錄
/usr/software/redis/redis-ms/
mkdir 7001
mkdir 7002
mkdir 7003
2)復制redis.conf到主從目錄
cp /usr/software/redis/redis.conf /usr/software/redis/redis-ms/7001
cp/usr/software/redis/redis.conf /usr/software/redis/redis-ms/7002
cp /usr/software/redis/redis.conf /usr/software/redis/redis-ms/7003
3)修改主./7001/redis.conf
vim ./7001/redis.conf
#修改如下key的值
bind 0.0.0.0#任意ip都可以連接 protected-mode no#關閉保護,允許非本地連接 port 7001#端口號 daemonize yes#后台運行 pidfile /var/run/redis_7001.pid#進程守護文件,就是存放該進程號相關信息的地方 dir /usr/software/redis/redis-ms/7001/data//#db等相關目錄位置 logfile "/usr/software/redis/redis-ms/7001/log/redis.log" appendonly yes#開啟日志形式 requirepass XX#密碼
4)修改從./7002/redis.conf
vim ./7002/redis.conf
#修改如下key的值
bind 0.0.0.0#任意ip都可以連接 protected-mode no#關閉保護,允許非本地連接 port 7002#端口號 daemonize yes#后台運行 pidfile /var/run/redis_7002.pid#進程守護文件,就是存放該進程號相關信息的地方 dir /usr/software/redis/redis-ms/7002/data//#db等相關目錄位置 logfile "/usr/software/redis/redis-ms/7002/log/redis.log" replicaof <masterip> <masterport>#主信息 masterauth <master-password>#主信息 appendonly yes#開啟日志形式 requirepass XX#密碼
5)修改從./7003/redis.conf
vim ./7003/redis.conf
#修改如下key的值
bind 0.0.0.0#任意ip都可以連接 protected-mode no#關閉保護,允許非本地連接 port 7003#端口號 daemonize yes#后台運行 pidfile /var/run/redis_7003.pid#進程守護文件,就是存放該進程號相關信息的地方 dir /usr/software/redis/redis-ms/7003/data//#db等相關目錄位置 logfile "/usr/software/redis/redis-ms/7003/log/redis.log" replicaof <masterip> <masterport>#主信息 masterauth <master-password>#主信息 appendonly yes#開啟日志形式 requirepass XX#密碼
2.啟動測試
1)啟動
redis-server /usr/software/redis/redis-ms/7001/redis.conf
redis-server /usr/software/redis/redis-ms/7002/redis.conf
redis-server /usr/software/redis/redis-ms/7003/redis.conf
ps -ef|grep redis
#查看主從是否搭建成功
/redis-cli -p 7001 -a password
info
如圖:
2)測試
redis-cli -p 7001 -a ww
redis-cli -p 7002 -a ww
--raw 中文顯示
主7001設置name值,可以在從7002、7003取到,但是從不能設置值。
四、主從模式的優缺點
1、Redis的Replication的特點和優點:
1】、同一個Master可以同步多個Slaves。
2】、Slave同樣可以接受其它Slaves的連接和同步請求,這樣可以有效的分載Master的同步壓力。因此我們可以將Redis的Replication架構視為圖結構。
3】、Master Server是以非阻塞的方式為Slaves提供服務。所以在Master-Slave同步期間,客戶端仍然可以提交查詢或修改請求。
4】、Slave Server同樣是以非阻塞的方式完成數據同步。在同步期間,如果有客戶端提交查詢請求,Redis則返回同步之前的數據。
5】、為了分載Master的讀操作壓力,Slave服務器可以為客戶端提供只讀操作的服務,寫服務仍然必須由Master來完成。即便如此,系統的伸縮性還是得到了
很大的提高。
6】、Master可以將數據保存操作交給Slaves完成,從而避免了在Master中要有獨立的進程來完成此操作。
7】、支持主從復制,主機會自動將數據同步到從機,可以進行讀寫分離。
2、Redis的Replication的缺點:
1】、Redis不具備自動容錯和恢復功能,主機從機的宕機都會導致前端部分讀寫請求失敗,需要等待機器重啟或者手動切換前端的IP才能恢復。
2】、主機宕機,宕機前有部分數據未能及時同步到從機,切換IP后還會引入數據不一致的問題,降低了系統的可用性。
3】、Redis的主從復制采用全量復制,復制過程中主機會fork出一個子進程對內存做一份快照,並將子進程的內存快照保存為文件發送給從機,
這一過程需要確保主機有足夠多的空余內存。若快照文件較大,對集群的服務能力會產生較大的影響,而且復制過程是在從機新加入集群或者從機和
主機網絡斷開重連時都會進行,也就是網絡波動都會造成主機和從機間的一次全量的數據復制,這對實際的系統運營造成了不小的麻煩。
4】、Redis較難支持在線擴容,在集群容量達到上限時在線擴容會變得很復雜。為避免這一問題,運維人員在系統上線時必須確保有足夠的空間,
這對資源造成了很大的浪費。
五、結束
其實redis的主從模式很簡單,在實際的生產環境中是很少使用的,我也不建議在實際的生產環境中使用主從模式來提供系統的高可用性,之所以不建議使用都是由它的缺點造成的,在數據量非常大的情況,或者對系統的高可用性要求很高的情況下,主從模式也是不穩定的。雖然這個模式很簡單,但是這個模式是其他模式的基礎,所以必須深刻的理解,對其他模式的學習才會有幫助作用。