Redis(Remote Dictionary Server)是一個非常流行且廣泛使用的開源、快速、分散和高效的內存鍵值數據庫/數據結構伺服器。
它提供了豐富的功能,使其在各種用例中非常有效:作為數據庫、緩存層、消息代理或隊列;適用於 Web 應用程序、聊天和消息應用程序、遊戲、實時數據分析等等。
它支持靈活的數據結構,主從異步複製以擴展讀性能並防止數據損失,客戶端分片以擴展寫性能,兩種形式的持久性用於將內存數據寫入磁盤以緊湊格式存儲,集群和分區。它還具有自動故障切換功能,以實現高可用性部署,通過Redis Sentinel、Lua 腳本、事務等。更多功能。
作為一個NO SQL或非關聯式數據庫,Redis比傳統數據庫系統(例如MySQL/MariaDB、PostgreSQL等)提供了一些性能
Redis已成為越來越普遍的快取選擇,它允許重複使用快取數據(存儲在應用程序的主記憶體空間內),而不是總是查詢數據庫以獲取經常使用的數據。因此,它是RDMS(關聯式數據庫管理系統)的絕佳伴侶,最終提高應用程序的性能。
在這個三部曲的Redis教程系列中,我們將介紹如何設置和使用一些Redis的關鍵功能,包括複製、使用Redis Sentinel和Redis Cluster實現高可用性,文章包括:
本指南展示了如何在CentOS 8 Linux中設置Redis複製(使用集群模式已禁用),包括如何安裝Redis、配置主節點和副本,以及測試複製。
重要提示:具有已禁用集群模式的Redis集群(即複製集群)具有單個節點組(例如一個主節點和一個或兩個副本),而具有啟用集群模式的Redis集群可能包含兩個或更多個節點組(例如每個都有從屬節點的三個主節點或兩個主節點)。
先決條件:
測試環境設置
Redis Master Server: 10.42.0.247 Redis Replica1/Slave1: 10.42.0.21 Redis Replica2/Slave2: 10.42.0.34

在上述設定中(包含一個可讀寫的主節點/主節點和2個只讀的複本節點),我們有一個單一節點組,其中包含了每個節點的所有集群數據。一旦從節點連接到主節點,它會接收到完整數據庫的初始副本,並且原先從節點上的任何數據都將被丟棄。
此外,客戶端只能向主節點寫入數據,但可以從集群中的任何節點讀取數據。隨著在主節點上進行寫入操作,這些操作會被傳播到所有連接的從節點,以實時更新從節點數據集。
步驟一:在CentOS 8上安裝Redis
1.首先,通過SSH登錄到所有的CentOS 8節點,然後使用DNF包管理器如下所示在所有節點(主節點和複本)上安裝Redis包。
# dnf install @redis
2.完成Redis包安裝後,啟動Redis服務,使其在每次系統啟動時自動啟動,並按照以下方式檢查是否正在運行。
# systemctl start redis # systemctl enable redis # systemctl status redis
3.您還可以通過使用ss命令檢查監聽端口來確認Redis服務器是否正在運行,如下所示。
# ss -ltpn | grep redis-server

步驟二:配置Redis主服務器
4. Redis 是透過 /etc/redis.conf 配置文件來配置的,這是一個自記錄的範例配置文件。首先,備份原始文件,然後使用您的 命令行編輯器選擇 打開它進行編輯。
# cp /etc/redis.conf /etc/redis.conf.org # vi /etc/redis.conf
5. 默認情況下,一個 Redis 實例被配置為在 迴圈 接口上監聽和接受連接,使用 bind 指令。為了與副本通信,主節點應該被配置為在 IPv4 迴圈地址及其 LAN IP 地址,即 10.42.0.247 上監聽。
bind 127.0.0.1 10.42.0.247
6. 接下來,將 protected-mode 參數設置為 no
,以允許如所示與副本通信。
protected-mode no
此外,Redis 監聽在端口 6379,這是使用 port
指令設置的。這是用於與應用程序 API 或 CLI 客戶端通信的數據端口。
port 6379

7. 為了可選地保護 主-副本 通信,我們可以使用 requirepass 指令保護主節點,以便客戶端/副本在運行任何命令或開始複制同步過程之前必須發出身份驗證密碼,否則主節點將拒絕客戶端/副本的請求(記得設置一個安全的密碼)。
我們將使用以下選項進行演示,以展示其工作原理。
requirepass Securep@55Here

8. 此外,Redis 日誌存儲在 /var/log/redis/redis.log 文件中,這是通過設置 logfile 指令來實現的,默認的服務器詳細程度是 notice,通過 loglevel 參數定義。
loglevel notice logfile /var/log/redis/redis.log

9. 由於 systemd 是 CentOS 8 中的默認系統和服務管理器,您可以通過設置 Redis 的 supervised 參數為 systemd,使其與 systemd 監督樹進行交互。
supervised systemd

10. 完成所有必要的配置後,保存文件並關閉它。然後重啟 Redis 服務以應用新的更改。
# systemctl daemon-reload # systemctl restart redis
11. 要訪問 Redis 服務器,我們需要使用 redis-cli(一個命令行接口到 redis-server)。默認情況下,它會連接到 localhost(在 127.0.0.1 端口 6379)。請注意,由於服務器是通過密碼從客戶端進行保護的,因此在認證之前運行命令應該會失敗。
使用 auth 命令提供認證密碼,如下圖所示。
# redis-cli 127.0.0.1:6379> client list 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> client list

12. 要連接到 副本(在下一節中描述配置後),使用 -h
和 -p
選項分別指定副本的 IP 地址/主機名和端口(請注意,端口 6379 必須在副本的防火牆中打開)。
# redis-cli -h 10.42.0.21 -p 6379
13. 接下來,在防火牆中打開 Redis 伺服器數據端口,以允許主機的入站連接,然後使用 firewall-cmd 命令重新加載防火牆規則,如下所示。
# firewall-cmd --zone=public --permanent --add-port=6379/tcp # firewall-cmd --reload
第 3 步:配置 Redis 複製/從屬伺服器
14. 為了快速將一個 Redis 實例設置為即時複製,使用 redis-cli 實用程序,並調用如下所示的 REPLICAOF 命令。
# redis-cli replicaof 10.42.0.247 6379 OR # redis-cli 127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

15. 要使複製連接永久,您需要在配置文件中進行以下更改。 首先備份原始文件,然後打開進行編輯。
# cp /etc/redis.conf /etc/redis.conf.org # vi /etc/redis.conf
16. 為了允許客戶端連接到複製以讀取數據,將複製 IP 地址添加到 bind 指令。
# replica1 bind 127.0.0.1 10.42.0.21 # replica2 bind 127.0.0.1 10.42.0.34
設置 Redis 實例為複製
17. 要配置 Redis 實例為一個 複製,使用 replicaof 參數,並將主節點的 IP 地址(或主機名)和端口設置為值。
replicaof 10.42.0.247 6379
設置複製以對主節點進行身份驗證
18. 接下來,由於我們的主實例受到密碼保護,我們需要在複製配置中設置密碼,以使其能夠對主進行身份驗證,使用 masterauth 參數。
masterauth Securep@55Here
19. 此外,當副本與主節點失去連接,或者當複製進行中時,副本被配置為回應客戶端請求,可能會帶有“過時”的數據。但如果是第一次同步,那麼數據集可能只是空的。這種行為由replica-serve-stale-data參數控制。
並且,自Redis 2.6起,副本默認為只讀模式,這由replica-read-only參數控制。您可以根據應用程序的需要進行其他副本配置調整。
20. 進行所有必要的更改後,重新啟動所有副本上的Redis服務。
# systemctl restart redis
21. 此外,開放防火牆中的6379端口,允許來自主節點和客戶端對副本的連接,並重新加載防火牆規則。
# firewall-cmd --zone=public --permanenent --add-port=6379/tcp # firewall-cmd --reload
第四步:檢查主-副本複製狀態
22. 一旦主-副本複製配置完成,我們可以按照以下方式檢查設置是否正常運行。
在主節點上,運行以下命令。
# redis-cli 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> info replication

23. 同樣,在副本/從節點上檢查複製狀態,如下所示。
# redis-cli 127.0.0.1:6379> info replication


23. 現在讓我們通過在主實例中設置一個鍵值來測試複製,並檢查數據是否已同步到副本。
在主節點上,這樣做:
# redis-cli 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> set domain 'www.tecmint.com'

24. 然後檢查數據是否已如顯示的那樣同步到副本。
# redis-cli 127.0.0.1:6379> get domain

保護主實例以防止丟失部分寫入操作
25。Redis具有一項功能,可以使主實例在沒有足夠的副本可用的情況下,限制丟失某些寫入操作的風險,到指定的幾秒鐘內。
這意味著如果連接的副本少於N個,且延遲小於或等於M秒,主實例可以停止接受寫入操作,這是由min-replicas-to-write和min-replicas-max-lag選項分別控制的。
要設置它們,取消註釋並根據您的設置要求在/etc/redis.conf中設置值,如下圖所示。這個配置意味著,從最後一次對副本的ping開始,10秒後,如果在線副本少於2個,主實例將停止接受寫入。
min-replicas-to-write 2 min-replicas-max-lag 10

您可以在/etc/redis.conf配置文件的其餘部分找到更多選項,並且為了更詳細了解複制,請閱讀Redis文檔。
在下一篇文章中,我們將介紹如何在CentOS 8中使用Sentinel設置Redis高可用性。在此之前,請繼續關注,並記得使用我們下面的評論表單分享您的想法和問題,以便您聯繫我們。
Source:
https://www.tecmint.com/setup-redis-replication-in-centos-8/