如今遇到高併發場景時,緩存技術應該算是性能優化的第一步,緩解數據庫壓力的同時還能提升訪問效率,而Redis應該是絕大多數應用場景的首選。可是儘快Redis性能再優秀,在當今高併發場景下,一臺服務器負責讀寫,機器的性能和內存的瓶頸確定避免不了,到這確定有小夥伴會想到集羣, 對的,思路沒錯,只是在集羣以前,主從複製模式的優化策略能解決不少問題,若是主從模式還抗不住高併發,那再來集羣也不晚;這裏先來講說Redis的主從複製。node
爲了更好的演示,搞了一臺雲服務器,Linux環境; 方便的同時,也能更符合實際應用場景;redis
主從複製:主從指有多臺Redis服務器,其中一臺爲主服務器,其餘爲從服務器,能夠經過命令或配置實現主從關係;複製指將主服務器的數據同步到從服務器,數據只能從主服務器向從服務器單向同步;其做用以下:數據庫
好啦,老規矩,瞭解其做用以後,接下來就先實操再總結。緩存
每一臺Redis服務器啓動時,默認都是主服務器(Master),能夠經過命令info replication
查看,以下圖所示:安全
開始實操搭建一主二從的環境,以下:性能優化
1. 配置文件修改服務器
因爲是在同一臺機器上模擬,因此將redis配置文件拷貝三份出來,主要修改項以下:網絡
2. 啓動redis服務器架構
而後分別指定配置文件啓動redis-server,在redis中bin目錄下執行./redis-server redis.conf
、./redis-server redis6388.conf
、./redis-server redis6399.conf
命令便可,能夠經過命令ps -ef | grep redis
查看啓動redis效果,以下:併發
3.1 使用命令實現主從關係
默認狀況下,啓動的三臺服務器默認都是主服務器,如今能夠經過簡單的命令實現一主二從的關係,這裏以6379這臺服務器爲主,6388和6399兩臺服務器爲從,配置主從關係只針對從節點服務器配置便可,以下:
分別連上6388和6399兩臺服務器,執行slaveof masterip masterport
便可:
從節點顯示沒問題,看看主節點狀態信息,連上6379這臺看看,以下:
主從關係維護好了,接下來看看數據複製,一般主節點負責寫,將數據同步到從節點,從節點負責讀; 如今三臺服務器都沒數據,接下來往主節點中寫入點數據,看看是否能同步到從節點:
注:若是經過命令方式實現主從關係,那當從服務器重啓時,主從關係就丟了,還得手動再執行命令,因此推薦配置文件的形式進行配置;
3.2 經過配置文件實現主從配置
仍是很簡單的,主服務器不用動,僅修改從服務器配置文件,而後重啓便可,根據前面章節的學習經驗,打開配置文件,直接找到REPLICATION模塊進行以下配置修改:
replicaof <masterip> <masterport>
:指定主節點ip和端口便可,如:replicaof 127.0.0.1 6379
;masterauth <master-password>
:指定主節點密碼,若是主節點配置密碼,直接經過這配置就行;修改完這兩項,重啓服務器便可,和命令行同樣簡單,只是經過配置文件搭建的主從關係不會由於關閉服務器而丟失;這裏配置文件的演示就不截圖了,只是實現方式不同,其餘都是和命令行一致;
配從不配主,即只針對從服務器配置便可,主服務器無需配置;
一個主節點有多個從節點,從節點只能有一個主節點;從節點也能夠做爲其餘從節點的主節點,以下:
這種方式的演示截圖就不提供了,小夥伴實操一把,這裏說明一下,雖然6388是6399的主節點,但扮演的角色仍是6379的從節點,只是它下面鏈接了其餘從節點而已;
若是用命令方式實現主從,主服務器斷開後,從新鏈接,主從關係還在;從服務器斷開以後重連關係消失,須要手動執行命令從新指定主節點;
若是但願斷開重連主從關係還在,推薦配置文件方式實現;
實現主從複製的搭建是否是很簡單,不論是命令仍是配置文件的方式,都很輕鬆實現;但小夥伴是否是也有疑問: 主從節點之間的數據是如何同步的?關於主從複製的其餘參數有什麼用?
經過上面實操,在主服務器中寫入的數據,在無感知的狀況下就同步到各個從服務器,中間到底經歷了什麼呢? 接下來簡單的瞭解一下;
在Redis2.8以前同步方式都以全量方式同步,以後爲了提升效率,數據複製方式分爲兩種,一種爲全量複製,一種爲部分複製:
爲了方便查看日誌分析,使用兩臺redis服務器進行搭建主從, 將以前搭建的關係去除,經過修改配置文件重啓便可;
這裏以6388做爲主節點(Master),6399做爲從節點(Slave),當鏈接6399執行命令slaveof 127.0.0.1 6388
配置主從關係時,主從節點分別打印日誌以下:
上圖是剛開始創建主從關係時,進行了全量複製,大概流程以下:
簡要說明:
主從關係是經過網絡進行通信,可能出現網絡中斷或網絡抖動狀況,致使短期的數據不能及時同步到從節點上,理想狀況下,當鏈接恢復的時候,但願只同步中斷期間的數據,從而提升同步效率,流程大概以下:
簡要說明:
這裏就不模擬演示部分複製流程了,留給小夥伴操做。演示流程以下:已經搭建主從關係的兩臺機器,手動模擬網絡斷開,斷開期間在主服務器寫入數據,一會以後恢復網絡,查看主從服務器日誌打印狀況;
以上演示在配置文件中只是配置了部分參數,還有其餘參數的配置能夠輕鬆實現功能,這裏結合主從複製的內容能夠回顧一下相關配置參數的意義,以下:
主從複製緩解了單節點性能和存儲的瓶頸,那又帶來什麼問題呢?
slaveof no one
命令重寫回到主服務器角色,而後從新配置主從關係;主從複製演練看似簡單,但還須要不斷在實踐中獲取經驗,搭配相關配置參數,從而使得更加適合應用場景;配置沒有固定都同樣,而是應用場景是否適合。隨着主節點宕機不能自動選舉的問題,下次在此基礎上說說哨兵模式,讓自動選舉不是問題;
一個被程序搞醜的帥小夥,關注"Code綜藝圈",跟我一塊兒學~~~