Mac 搭建 Redis Sentinel 集羣

1. 建立目錄並啓動主從節點

1. 主節點

執行如下命令:git

➜  ~ mkdir redisSentinel
➜  ~ cd redisSentinel 
➜  redisSentinel mkdir master
➜  redisSentinel cp /usr/local/redis-3.2.8/redis.conf master/redis.conf

此時主節點目錄已經建立好了,而後,配置主節點配置:redis

port 8000
daemonize yes

就簡單修改這兩個配置好了。 而後自動這個主節點:測試

➜  redisSentinel cd master 
➜  master redis-server redis.conf

檢查一下:spa

➜  master redis-cli -p 8000 ping
PONG

主節點就行了,接下來建立從節點。命令行

2. 從節點

➜  master cd ..
➜  redisSentinel mkdir slave

拷貝配置文件到從節點中:code

➜  redisSentinel cp master/redis.conf slave/redis-8001.conf
➜  redisSentinel cp master/redis.conf slave/redis-8002.conf

這裏咱們將兩個從節點的端口定爲 8001 和 8002,而後修改配置。server

port 800X
damonnize yes
slaveof 127.0.0.1 8000

加入了一個 slaveof 配置,代表該節點的主節點是 127.0.0.1:8000.blog

而後啓動:ip

➜  redisSentinel cd slave 
➜  slave redis-server redis-8001.conf 
➜  slave redis-server redis-8002.conf

如今主從節點已經關聯好了,如今經過 info 命令看看是否成功。部署

➜  slave redis-cli -p 8000 info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=8001,state=online,offset=505,lag=1
slave1:ip=127.0.0.1,port=8002,state=online,offset=505,lag=1
master_repl_offset:505
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:504

進入了 8000 主節點中查看,看見 role 是 master,而且有 2 個從節點,8001 和 8002. 成功!

接着開始部署哨兵節點.

2. 部署哨兵節點

首先建立配置文件:

➜  slave cd ..
➜  redisSentinel mkdir sentinel
➜  redisSentinel cd sentinel 
➜  sentinel cp /usr/local/redis-3.2.8/redis.conf redis-sentinel-26379.conf
➜  sentinel cp /usr/local/redis-3.2.8/redis.conf redis-sentinel-26380.conf
➜  sentinel cp /usr/local/redis-3.2.8/redis.conf redis-sentinel-26381.conf

哨兵節點的默認端口是 26739。咱們這裏弄了 3 個哨兵節點。

而後修改配置文件:

port 26379
daemonize yes
sentinel monitor mymaster 127.0.0.1 8000 2

這裏比較關鍵的是:sentinel monitor mymaster 127.0.0.1 8000 2,這個配置表示該哨兵節點須要監控 8000 這個主節點, 2 表明着判斷主節點失敗至少須要 2 個 Sentinel 節點贊成。

啓動 Sentinel 節點:

➜  sentinel redis-sentinel redis-sentinel-26379.conf 
➜  sentinel redis-sentinel redis-sentinel-26380.conf
➜  sentinel redis-sentinel redis-sentinel-26381.conf

啓動成功後,看看哨兵的相關信息:

➜  sentinel redis-cli -p 26380 info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=127.0.0.1:8000,slaves=2,sentinels=3

經過進入 26380 節點,使用 info Sentinel 命令,看到有個 master 節點,名稱是 mymaster,地址是咱們剛剛配置的 8000, 從節點有 2 個,哨兵有 3 個。

此時一個高可用的 Redis 集羣就搭建好了。

固然若是是生產環境,全部實例建議部署在不一樣的機器上。

部署後的拓撲圖以下:

3. 使用 Jedis 測試

先在命令行往主節點寫入一條數據:

➜  cachecloud git:(master) ✗ redis-cli -p 8000 set "hello" "world"
OK

Jedis 代碼測試:

public static void main(String[] args) {

    Set<String> sentinelSet = new HashSet<>();
    sentinelSet.add("127.0.0.1:26379");
    sentinelSet.add("127.0.0.1:26380");
    sentinelSet.add("127.0.0.1:26381");

    String masterName = "mymaster";

    JedisSentinelPool sentinelPool = new JedisSentinelPool(masterName, sentinelSet, new GenericObjectPoolConfig(),
        10000, 10000, null, Protocol.DEFAULT_DATABASE);
    System.out.println(sentinelPool.getResource().get("hello"));
  }

結果:

world

成功!!!

4. 總結

Sentinel 節點實際上就是個特殊的 Redis 節點。 回頭看看搭建過程:

  1. 搭建主從節點,經過修改配置文件,關聯主從節點。
  2. 搭建哨兵節點集羣,修改配置文件,經過 slaveof 監控主節點。

就好啦。

相關文章
相關標籤/搜索