日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

redis 主从哨兵模式搭建

發布時間:2025/3/19 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis 主从哨兵模式搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、REDIS主從模式,搭建三個節點,同一個機器,三個端口。

安裝包

wget http://download.redis.io/releases/redis-5.0.7.tar.gz

安裝步驟

https://blog.csdn.net/whg18526080015/article/details/110409465

1.主節點 這里綁定IP要寫外網IP。

bind 127.0.0.1protected-mode yesport 6379logfile "/usr/local/games/redis/redis-5.0.7/logs/26379.log"

2.從節點1

bind 127.0.0.1 port 6381 slaveof 127.0.0.1 6379

3.從節點2

bind 127.0.0.1 port 6382 slaveof 127.0.0.1 6379

4.運行命令

./redis-server.exe ./redis6382.conf
./redis-server.exe ./redis6381.conf
./redis-server.exe ./redis6379.conf

?./redis-cli.exe -p 6379

info?

查看集群信息為1主2從。

# Replication role:master connected_slaves:2 slave0:ip=127.0.0.1,port=6382,state=online,offset=34207,lag=1 slave1:ip=127.0.0.1,port=6381,state=online,offset=34207,lag=0 master_replid:475ae87d123e84ab11517a3c0e6be3ac4c63779b master_replid2:0000000000000000000000000000000000000000 master_repl_offset:34349 second_repl_offset:-1 repl_backlog_active:1 repl_backlog_size:1048576 repl_backlog_first_byte_offset:1 repl_backlog_histlen:34349

二、哨兵模式搭建3個節點進程

1.哨兵1,注意配置哨兵時 myid不要填,讓系統自動生成,否則如果一樣,會只運行一個哨兵節點。

notification-script腳本配置,在哨兵監視到REDIS主從服務器有SDOWN(主觀下線),ODOWN(客觀下線),UP(上線)時,會調用此腳本將消息內容傳遞過來,用來發郵件。

sed -i 's/\r$//' sentinel_warning.sh

用來將WINDOWS下的文件中的\r換行符去掉,因為LINUX換行符只有\n

port 26379 sentinel deny-scripts-reconfig yes sentinel monitor BF-20190319DBXF 127.0.0.1 6379 2 sentinel down-after-milliseconds BF-20190319DBXF 5000 sentinel notification-script mymaster /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh logfile "/usr/local/games/redis/redis-5.0.7/logs/26379.log"

2.哨兵2

port 26479 sentinel deny-scripts-reconfig yes sentinel monitor BF-20190319DBXF 127.0.0.1 6379 2 sentinel down-after-milliseconds BF-20190319DBXF 5000 sentinel notification-script mymaster /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh

3.哨兵3

port 26579 sentinel deny-scripts-reconfig yes sentinel monitor BF-20190319DBXF 127.0.0.1 6379 2 sentinel down-after-milliseconds BF-20190319DBXF 5000 sentinel notification-script mymaster /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh

4.啟動哨兵

./redis-server.exe ./sentinel26379.conf --sentinel
./redis-server.exe ./sentinel26479.conf --sentinel
./redis-server.exe ./sentinel26579.conf --sentinel

?./redis-cli.exe -p 6379

info?sentinel

查看哨兵集群信息

sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=BF-20190319DBXF,status=ok,address=127.0.0.1:6379,slaves=2,sentinels=3

5.查看哨兵詳細信息

?./bin/redis-cli -p 26379
?獲取詳細信息

127.0.0.1:26379> 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=10.100.8.103:6389,slaves=2,sentinels=1

獲取主服務器地址和端口。

127.0.0.1:26379> SENTINEL get-master-addr-by-name mymaster 1) "10.100.8.103" 2) "6389"

獲取所有的從服務器信息。

127.0.0.1:26379> SENTINEL slaves mymaster 1) 1) "name"2) "10.100.8.103:6391"3) "ip"4) "10.100.8.103"5) "port"6) "6391"33) "master-host"34) "10.100.8.103"35) "master-port"36) "6389"37) "slave-priority"38) "100"39) "slave-repl-offset"40) "1066685"

查看哨兵服務器信息。

127.0.0.1:26379> SENTINEL sentinels mymaster (empty list or set)

REDIS進程地址

?哨兵信息

[root@localhost redis-5.0.7]# ./bin/redis-cli -p 26379 127.0.0.1:26379> 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=10.100.8.103:6389,slaves=2,sentinels=3

三、JAVA客戶端連接集群

1.配置

redisson.masterName=BF-20190319DBXF redisson.schema=redis:// redisson.sentinelAddresses=redis://127.0.0.1:26379,redis://127.0.0.1:26479,redis://127.0.0.1:26579 redisson.password=

2.JAVA配置

package com.tpw.summaryday.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration;/*** @Author lin.qing* @date 2020-11-14 21:47*/ @Data @Configuration @ConfigurationProperties(prefix = "redisson") public class RedissonProperties {private int timeout = 3000;private String address;private String password;private int database = 0;private int connectionPoolSize = 64;private int connectionMinimumIdleSize=10;private int slaveConnectionPoolSize = 250;private int masterConnectionPoolSize = 250;private String[] sentinelAddresses;private String masterName; } package com.tpw.summaryday.config;import cn.hutool.core.util.StrUtil; import org.redisson.Redisson; import org.redisson.api.RedissonClient; import org.redisson.config.Config; import org.redisson.config.ReadMode; import org.redisson.config.SentinelServersConfig; import org.redisson.config.SingleServerConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.annotation.Order;/*** @Author lin.qing* @date 2020-11-14 21:38*/ @Order(value = 4001) @ConditionalOnProperty("redisson.password") @Configuration @EnableConfigurationProperties({RedissonProperties.class}) public class RedissonAutoConfiguration {public RedissonAutoConfiguration() {System.out.println("==========================redis 初始化成功=======================");}@Autowiredprivate RedissonProperties redissonProperties;@Bean(name = "redissonClient")@ConditionalOnProperty(name="redisson.address")RedissonClient redissonSingle() {Config config = new Config();config.setCodec(new FastJsonCodec());SingleServerConfig serverConfig = config.useSingleServer().setAddress(redissonProperties.getAddress()).setTimeout(redissonProperties.getTimeout()).setConnectionPoolSize(redissonProperties.getConnectionPoolSize()).setConnectionMinimumIdleSize(redissonProperties.getConnectionMinimumIdleSize());if(!StrUtil.isEmpty(redissonProperties.getPassword())) {serverConfig.setPassword(redissonProperties.getPassword());}return Redisson.create(config);}/*** 哨兵模式自動裝配* @return*/@Bean(name = "redissonClient")@ConditionalOnProperty(name="redisson.masterName")RedissonClient redissonSentinel() {Config config = new Config();config.setCodec(new FastJsonCodec());SentinelServersConfig serverConfig = config.useSentinelServers().addSentinelAddress(redissonProperties.getSentinelAddresses()).setMasterName(redissonProperties.getMasterName()).setTimeout(redissonProperties.getTimeout()).setMasterConnectionPoolSize(redissonProperties.getMasterConnectionPoolSize()).setSlaveConnectionPoolSize(redissonProperties.getSlaveConnectionPoolSize()).setReadMode(ReadMode.SLAVE);if(!StrUtil.isEmpty(redissonProperties.getPassword())) {serverConfig.setPassword(redissonProperties.getPassword());}return Redisson.create(config);}}

2.關閉主節點,看到自動切換6381從節點為主節點。

sentinel_masters:1 sentinel_tilt:0 sentinel_running_scripts:0 sentinel_scripts_queue_length:0 sentinel_simulate_failure_flags:0 master0:name=BF-20190319DBXF,status=ok,address=127.0.0.1:6381,slaves=2,sentinels=3

3.可以看到節點自動切換。

查看哨兵故障轉移日志,可以看從SDOWN->ODOWN->switch master

10077:X 27 Aug 2021 15:02:49.934 # +sdown master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:49.996 # +odown master mymaster 10.100.8.103 6389 #quorum 2/2 10077:X 27 Aug 2021 15:02:49.996 # +new-epoch 1 10077:X 27 Aug 2021 15:02:49.997 # +try-failover master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:50.000 # +vote-for-leader c454afb30066aed61ae914db1fa0f0b5d702b799 1 10077:X 27 Aug 2021 15:02:50.009 # 5cba3b41f9201f2429de246f8df3e0c5a645d42e voted for c454afb30066aed61ae914db1fa0f0b5d702b799 1 10077:X 27 Aug 2021 15:02:50.009 # 592eab302ddb51b3172a0c927d28aace28730d76 voted for c454afb30066aed61ae914db1fa0f0b5d702b799 1 10077:X 27 Aug 2021 15:02:50.060 # +elected-leader master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:50.060 # +failover-state-select-slave master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:50.145 # +selected-slave slave 10.100.8.103:6391 10.100.8.103 6391 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:50.145 * +failover-state-send-slaveof-noone slave 10.100.8.103:6391 10.100.8.103 6391 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:50.208 * +failover-state-wait-promotion slave 10.100.8.103:6391 10.100.8.103 6391 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:51.037 # +promoted-slave slave 10.100.8.103:6391 10.100.8.103 6391 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:51.037 # +failover-state-reconf-slaves master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:51.088 * +slave-reconf-sent slave 10.100.8.103:6390 10.100.8.103 6390 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:51.151 # -script-error /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh 0 2 10077:X 27 Aug 2021 15:02:52.066 * +slave-reconf-inprog slave 10.100.8.103:6390 10.100.8.103 6390 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:52.066 * +slave-reconf-done slave 10.100.8.103:6390 10.100.8.103 6390 @ mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:52.123 # -odown master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:52.123 # +failover-end master mymaster 10.100.8.103 6389 10077:X 27 Aug 2021 15:02:52.123 # +switch-master mymaster 10.100.8.103 6389 10.100.8.103 6391 10077:X 27 Aug 2021 15:02:52.123 * +slave slave 10.100.8.103:6390 10.100.8.103 6390 @ mymaster 10.100.8.103 6391 10077:X 27 Aug 2021 15:02:52.123 * +slave slave 10.100.8.103:6389 10.100.8.103 6389 @ mymaster 10.100.8.103 6391 10077:X 27 Aug 2021 15:02:52.127 # -script-error /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh 0 2 10077:X 27 Aug 2021 15:02:57.149 # +sdown slave 10.100.8.103:6389 10.100.8.103 6389 @ mymaster 10.100.8.103 6391 10077:X 27 Aug 2021 15:02:57.205 # -script-error /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh 0 2

查看REDIS主服務器信息

./bin/redis-cli -h 10.100.8.103 -p 6391
info

# Replication role:master connected_slaves:1 slave0:ip=10.100.8.103,port=6390,state=online,offset=1625794,lag=1

查看哨兵服務器信息,可以看MASTER地址已經變了。

?./bin/redis-cli -p 26379

info 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=10.100.8.103:6391,slaves=2,sentinels=3

4.再次訪問哨兵服務器信息,查看JAVA REDISSION客戶端輸出信息

o.redisson.connection.MasterSlaveEntry : master 10.100.8.103/10.100.8.103:6389 has changed to /10.100.8.103:6391

5.調用接口可以正常訪問,程序無需重啟和修改。

2021-08-27 15:17:31.006 DEBUG 38236 --- [nio-8115-exec-4] c.t.s.service.DirectGoodsService : commit redis SET transaction ok 2021-08-27 15:17:31.006 DEBUG 38236 --- [nio-8115-exec-4] c.t.s.service.DirectGoodsService : goodsId:789

6.再次啟動前次關閉REDIS節點,看到之前的主節點會變從節點,正常運行。

哨兵收到一個節點上線的消息。

10136:X 27 Aug 2021 15:21:05.451 # -sdown slave 10.100.8.103:6389 10.100.8.103 6389 @ mymaster 10.100.8.103 6391 10136:X 27 Aug 2021 15:21:05.551 # -script-error /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh 0 2

查看REDIS集群信息

# Replication role:master connected_slaves:2 slave0:ip=10.100.8.103,port=6390,state=online,offset=1747664,lag=0 slave1:ip=10.100.8.103,port=6389,state=online,offset=1747664,lag=0

7.再次關閉此從節點

10136:X 27 Aug 2021 15:23:52.768 # +sdown slave 10.100.8.103:6389 10.100.8.103 6389 @ mymaster 10.100.8.103 6391 10136:X 27 Aug 2021 15:23:52.821 # -script-error /usr/local/games/redis/redis-5.0.7/notify/sentinel_warning.sh 0 2 # Replication role:master connected_slaves:1 slave0:ip=10.100.8.103,port=6390,state=online,offset=1787545,lag=1 master_replid:11f151e51c6028073967f1bced44e8d63a3aa854

./bin/redis-cli -p 26379
sentinel slaves mymaster
獲取哨兵的從服務器信息,發現下線的節點還在,只是flags狀態改為了s_down,slave,disconnected,正常上線為?slave

總結

以上是生活随笔為你收集整理的redis 主从哨兵模式搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。