搭建 Redis 哨兵(Sentinel)集群,確保 Redis 服務具有高可用性。以下是詳細的步驟,從 Redis 安裝、配置主從復制到配置和啟動 Sentinel 集群,并結合相關的代碼示例。
步驟 1:安裝 Redis
首先,需要在服務器上安裝 Redis。以下以 Linux 系統為例。
sudo apt update
sudo apt install redis-server
步驟 2:配置主從復制
配置主節點
創建并編輯主節點配置文件 redis-master.conf
:
port 6379
bind 0.0.0.0
dir /var/lib/redis
appendonly yes
啟動主節點:
redis-server redis-master.conf
配置從節點
創建并編輯從節點配置文件 redis-slave.conf
:
port 6380
bind 0.0.0.0
dir /var/lib/redis
appendonly yes
slaveof 127.0.0.1 6379
啟動從節點:
redis-server redis-slave.conf
步驟 3:配置和啟動 Sentinel
創建并編輯 Sentinel 配置文件 sentinel.conf
:
port 26379
dir /tmp
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 60000
啟動 Sentinel:
redis-sentinel sentinel.conf
以下是 Sentinel 配置文件中各參數的解釋:
port 26379
:指定 Sentinel 監聽的端口。dir /tmp
:用于保存 Sentinel 配置文件的目錄。sentinel monitor <master-name> <ip> <port> <quorum>
:定義要監控的主節點,其中<quorum>
是判斷主節點失效所需的 Sentinel 數量。sentinel down-after-milliseconds <master-name> <milliseconds>
:定義在多少毫秒之后認為主節點不可用。sentinel parallel-syncs <master-name> <number>
:在故障轉移時,允許多少個從節點同時與新主節點進行同步。sentinel failover-timeout <master-name> <milliseconds>
:故障轉移的超時時間。
步驟 4:測試故障轉移
為了測試 Sentinel 的故障轉移功能,可以手動停止主節點,然后觀察 Sentinel 是否能夠將從節點提升為新的主節點。
redis-cli -p 6379 shutdown
觀察 Sentinel 日志輸出,確認它已經成功將從節點提升為新的主節點。
Java 客戶端示例
使用 Jedis 庫連接 Redis 哨兵集群,并進行簡單的 Redis 操作。
引入 Jedis 庫
在 Maven 項目中添加 Jedis 依賴:
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>4.0.1</version>
</dependency>
Java 代碼示例
以下 Java 代碼展示了如何使用 Jedis 庫連接和操作帶有 Sentinel 的 Redis 集群。
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisSentinelPool;import java.util.HashSet;
import java.util.Set;public class RedisSentinelExample {private static final String MASTER_NAME = "mymaster";public static void main(String[] args) {// 定義 Sentinel 節點Set<String> sentinels = new HashSet<>();sentinels.add("127.0.0.1:26379");// 創建 JedisSentinelPool 對象try (JedisSentinelPool sentinelPool = new JedisSentinelPool(MASTER_NAME, sentinels);Jedis jedis = sentinelPool.getResource()) {// Perform Redis operationsjedis.set("mykey", "myvalue");String value = jedis.get("mykey");System.out.println("mykey: " + value);// Output details of connected master nodeSystem.out.println("Connected to master: " + jedis.getClient().getHost() + ":" + jedis.getClient().getPort());} catch (Exception e) {System.err.println("Error: " + e.getMessage());}}
}
總結
通過上述步驟和代碼示例,成功搭建了 Redis 哨兵集群,實現了高可用性的 Redis 服務。主要步驟包含:
- 安裝 Redis。
- 配置主從復制。
- 配置和啟動 Sentinel。
- 測試故障轉移。
- 使用 Jedis 庫連接和操作 Redis 哨兵集群。
這些步驟確保了 Redis 服務的高可用性和可靠性,在主節點出現故障時,Sentinel 能夠自動進行故障轉移,提升從節點為新的主節點,保證系統的正常運行。