一、Redis集群三種方式的優缺點
Redis集群主要有三種方式,分別是:一主一從、一主多從、三主三從。它們各自有優缺點:
一主一從:利用主從複製來實現數據備份,當主節點宕機時,從節點可以頂替主節點成為主節點,實現高可用性。這種方式的優點是部署簡單,不需要考慮負載均衡、數據拆分等問題。缺點則是數據容災能力有限,擴展性不夠。
一主多從:一個主節點可以配多個從節點,實現讀寫分離和負載均衡,即主節點可讀寫,從節點只讀。這種方式的優點是可擴展性較好,可根據需求調整從節點數量以滿足負載需求;能夠有效利用多台機器的計算資源,提高系統整體吞吐量;同時主節點出現故障時,從節點之間可以選舉出一台作為主節點,實現高可用性。缺點是容災能力相對一主一從模式也有限,而且主節點過多時容易導致節點間通信負擔加重。
三主三從:與一主多從類似,三個主節點通過Paxos算法協商確定,主節點之間進行複製,從節點對主節點進行讀寫分離。三主三從的優點是數據容災能力強,可擴展性較好,同時也能夠容忍多個主節點之間出現故障,具備高可用性。
二、Redis集群三種方式的配置
Redis集群的三種方式都需要在配置文件redis.conf中進行相應的配置。
1、一主一從配置
# Master節點配置 port 6379 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis_6379.log dir /var/lib/redis/6379 requirepass xyqzyh5678 # Slave節點配置 slaveof 127.0.0.1 6379 port 6380 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6380.pid loglevel notice logfile /var/log/redis/redis_6380.log dir /var/lib/redis/6380
2、一主多從配置
# Master節點配置 port 6379 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6379.pid loglevel notice logfile /var/log/redis/redis_6379.log dir /var/lib/redis/6379 requirepass xyqzyh5678 # Slave節點配置 slaveof 127.0.0.1 6379 port 6380 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6380.pid loglevel notice logfile /var/log/redis/redis_6380.log dir /var/lib/redis/6380 slaveof 127.0.0.1 6379 port 6381 daemonize yes bind 127.0.0.1 pidfile /var/run/redis_6381.pid loglevel notice logfile /var/log/redis/redis_6381.log dir /var/lib/redis/6381
3、三主三從配置
# 節點1的配置 port 7001 daemonize yes pidfile /var/run/redis_7001.pid cluster-enabled yes cluster-config-file /etc/redis/7001.conf cluster-node-timeout 15000 appendonly yes # 節點2的配置 port 7002 daemonize yes pidfile /var/run/redis_7002.pid cluster-enabled yes cluster-config-file /etc/redis/7002.conf cluster-node-timeout 15000 appendonly yes # 節點3的配置 port 7003 daemonize yes pidfile /var/run/redis_7003.pid cluster-enabled yes cluster-config-file /etc/redis/7003.conf cluster-node-timeout 15000 appendonly yes # 節點4的配置 port 7004 daemonize yes pidfile /var/run/redis_7004.pid cluster-enabled yes cluster-config-file /etc/redis/7004.conf cluster-node-timeout 15000 appendonly yes # 節點5的配置 port 7005 daemonize yes pidfile /var/run/redis_7005.pid cluster-enabled yes cluster-config-file /etc/redis/7005.conf cluster-node-timeout 15000 appendonly yes # 節點6的配置 port 7006 daemonize yes pidfile /var/run/redis_7006.pid cluster-enabled yes cluster-config-file /etc/redis/7006.conf cluster-node-timeout 15000 appendonly yes
三、Redis集群三種方式原理
1、一主一從原理:主從複製
主從複製是Redis提供的一種高可用性方案,它的實現原理是主節點將自身的數據以異步方式複製到從節點中,同時從節點可以在不影響主節點的情況下,對複製過來的數據進行讀取操作。
主從複製的實現利用的是Redis的RDB文件,當主節點執行寫操作時,Redis會將同步方式同時將命令更新到AOF文件和內存數據庫中,隨後向綁定的所有從節點發送同步命令,從節點根據同步命令更新自己的內存數據庫。
2、一主多從原理:主從複製+讀寫分離
一主多從結構與一主一從類似,在此不再詳細闡述。它的讀寫分離實現原理是將寫操作全部交給主節點處理,而讀操作則可以由主節點和從節點共同承擔。當從節點發起讀操作時,Redis會將同步命令發送到主節點,讓主節點將最新的數據同步到從節點中,然後從節點就能夠對數據進行讀操作了。
3、三主三從原理:Paxos算法實現數據同步
三主三從模式是Redis集群的最佳實踐,它使用Paxos算法實現數據同步,從而保證在任意節點故障或網絡分區的情況下,系統仍然能夠正常運行。
Paxos算法是由Leslie Lamport於1990年提出的一種基於消息傳遞的一致性算法。它的實質是通過消息傳遞機制,保證多個進程在數值上的一致性。在Redis中,三個主節點通過Paxos算法協商確定數據的一致性,從節點對主節點進行讀寫分離,每個主節點都會將數據複製到其他兩個主節點和它們的從節點,從而實現數據的同步和備份。
四、Redis集群節點
在Redis集群中,節點可以分為主節點和從節點兩種類型。主節點負責數據的存儲和管理,從節點則通過主節點進行數據的同步和讀寫分離。
Redis集群中有三種角色,分別是:主節點、從節點和無狀態節點。在三主三從結構中,每個主節點綁定兩個從節點,同時充當無狀態節點以處理請求。
主節點的職責是負責數據的寫入和同步。當它的一個從節點崩潰時,它會自動選出一個從節點充當備份。
從節點則負責數據的讀取,並通過心跳機制與主節點保持同步。當主節點故障時,從節點之間會選舉出一台作為新的主節點,其他從節點則成為新的從節點。
無狀態節點(Non-Data-Sharing Node)既不保存數據,也不影響數據的分割和分發,僅用於處理客戶端發來的請求。每個主節點在接收到請求時,會通過哈希函數將其轉發給對應的無狀態節點,該節點負責將請求的變更同步到主節點和從節點中。
五、Redis集群搭建
1、Redis單節點搭建
首先安裝Redis並執行以下命令啟動服務:
sudo apt install redis-server sudo systemctl start redis-server
然後在redis.conf配置文件中添加以下內容:
dbfilename dump.rdb appendonly yes
運行以下命令重啟Redis:
sudo systemctl restart redis-server
至此,Redis單節點搭建完成。
2、Redis三主三從集群搭建
首先下載安裝Redis,並將其安裝在三個不同的服務器上。安裝完成後在每個節點的redis.conf配置文件中添加以下內容:
port 7000 pidfile /var/run/redis_7000.pid cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 15000 appendonly yes
然後啟動三個節點的Redis,使用以下命令創建集群:
redis-cli --cluster create 192.168.1.2:7000 192.168.1.3:7000 192.168.1.4:7000
在通過正常的Redis客戶端進行連接和操作前,需要先進行節點驗證:
redis-cli --cluster check 192.168.1.2:7000 redis-cli --cluster check 192.168.1.3:7000 redis-cli --cluster check 192.168.1.4:7000
至此,Redis三主三從集群搭建完成。
六、Redis集群原理
Redis集群的工作方式是,將數據按一定規則分散到多個節點上,同時每個節點維護一份部分數據的拷貝,當需要訪問數據時,會先計算出該數據應該在哪個節點上,然後進行訪問。
Redis集群內部採用的哈希槽分配算法,將哈希值在0~16383之間的整數劃分為16384個桶,每個桶對應一個槽。當執行SET、GET等操作時,根據操作的key計算出哈希值,並根據哈希值計算出對應的槽,然後將數據存儲在該槽對應的節點上。如果對應節點宕機,則由備份節點接管槽的數據。
Redis集群的節點之間使用Gossip通信,用於集群的成員發現和狀態更新。每個節點都會向集群中的一部分節點發送PING消息,在收到PING消息時,節點會回復PONG消息,用於確認集群中的節點是否正常工作。當節點感知到集群中有節點宕機時,會將宕機信息廣播給其他節點。
七、Redis Cluster集群
Redis Cluster是Redis官方提供的集群方案,它基於Redis的多節點模型,以一定規則將數據分散到多個節點上,從而保證數據的高可用性和負載均衡。
Redis Cluster的主要特點是:
- 分布式:數據在多個節點之間分
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/271294.html