1. 程式人生 > >跟我一起學Redis之高可用從主從複製開始

跟我一起學Redis之高可用從主從複製開始

### 前言 現在遇到高併發場景時,快取技術應該算是效能優化的第一步,緩解資料庫壓力的同時還能提高訪問效率,而Redis應該是絕大多數應用場景的首選。但是儘快Redis效能再優秀,在當今高併發場景下,一臺伺服器負責讀寫,機器的效能和記憶體的瓶頸肯定避免不了,到這肯定有小夥伴會想到叢集, 對的,思路沒錯,只是在叢集之前,主從複製模式的優化策略能解決很多問題,如果主從模式還抗不住高併發,那再來叢集也不晚;這裡先來說說Redis的主從複製。 為了更好的演示,搞了一臺雲伺服器,Linux環境; 方便的同時,也能更符合實際應用場景; ### 正文 **主從複製**:主從指有多臺Redis伺服器,其中一臺為主伺服器,其他為從伺服器,可以通過命令或配置實現主從關係;複製指將主伺服器的資料同步到從伺服器,資料只能從主伺服器向從伺服器單向同步;其作用如下: - **讀寫分離**:主伺服器複製寫,各從伺服器負責讀;根據二八原則,80%的操作都是讀,只有20%進行寫,所以在一定程度上也解決了單機瓶頸問題; - **資料持久化更加安全**:主從多臺伺服器進行持久化操作,任意一臺服務宕機也不會影響資料恢復,避免了單點故障問題; - **其他**:主從複製是實現哨兵模式和Redis叢集的前提,這個後續會說到。 好啦,老規矩,瞭解其作用之後,接下來就先實操再總結。 #### 實現主從複製 每一臺Redis伺服器啟動時,預設都是主伺服器(Master),可以通過命令`info replication`檢視,如下圖所示: ![image-20201217153936026](https://i.loli.net/2020/12/17/yPTVFBYjo68O52J.png?ynotemdtimestamp=1608300254339) 開始實操搭建一主二從的環境,如下: ![image-20201218123349514](https://i.loli.net/2020/12/18/ejyR7YWDqwnmgIl.png?ynotemdtimestamp=1608300254339) **1. 配置檔案修改** 由於是在同一臺機器上模擬,所以將redis配置檔案拷貝三份出來,主要修改項如下: - 配置檔名稱:分別為redis.conf、redis6388.conf、redis6399.conf; - port:埠,三個配置檔案分別修改為6379、6388、6399,這是為了避免同一臺機器演示埠衝突; - pidfile:修改此檔名,避免檔案衝突,改檔名即可,分別修改為redis.pid、redis6388.pid、redis6399.pid; - dbfilename:持久化檔名,避免持久化檔案衝突,分別修改為dump.rdb、dump6388.rdb、dump6399.rdb; **2. 啟動redis伺服器** 然後分別指定配置檔案啟動redis-server,在redis中bin目錄下執行`./redis-server redis.conf`、`./redis-server redis6388.conf`、`./redis-server redis6399.conf`命令即可,可以通過命令`ps -ef | grep redis`檢視啟動redis效果,如下: ![image-20201217161153175](https://i.loli.net/2020/12/17/qfxviY37BMdrTe8.png?ynotemdtimestamp=1608300254339) **3.1 使用命令實現主從關係** 預設情況下,啟動的三臺伺服器預設都是主伺服器,現在可以通過簡單的命令實現一主二從的關係,這裡以6379這臺伺服器為主,6388和6399兩臺伺服器為從,配置主從關係只針對從節點伺服器配置即可,如下: 1. 分別連上6388和6399兩臺伺服器,執行`slaveof masterip masterport`即可: ![image-20201217170814190](https://i.loli.net/2020/12/17/Ob8sRZP7qcLayfD.png?ynotemdtimestamp=1608300254339) 2. 從節點顯示沒問題,看看主節點狀態資訊,連上6379這臺看看,如下: ![image-20201217171428807](https://i.loli.net/2020/12/17/JispmlQNzAMGfOy.png?ynotemdtimestamp=1608300254339) 3. 主從關係維護好了,接下來看看資料複製,通常主節點負責寫,將資料同步到從節點,從節點負責讀; 現在三臺伺服器都沒資料,接下來往主節點中寫入點資料,看看是否能同步到從節點: ![image-20201217172631976](https://i.loli.net/2020/12/17/CX1nAKxzGsFd934.png?ynotemdtimestamp=1608300254339) 注:如果通過命令方式實現主從關係,那當從伺服器重啟時,主從關係就丟了,還得手動再執行命令,所以推薦配置檔案的形式進行配置; **3.2 通過配置檔案實現主從配置** 還是很簡單的,主伺服器不用動,僅修改從伺服器配置檔案,然後重啟即可,根據前面章節的學習經驗,開啟配置檔案,直接找到**REPLICATION**模組進行如下配置修改: - `replicaof