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 63793.從節點2
bind 127.0.0.1 port 6382 slaveof 127.0.0.1 63794.運行命令
./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.sh3.哨兵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.sh4.啟動哨兵
./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=35.查看哨兵詳細信息
?./bin/redis-cli -p 26379
 ?獲取詳細信息
獲取主服務器地址和端口。
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=33.可以看到節點自動切換。
查看哨兵故障轉移日志,可以看從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
查看哨兵服務器信息,可以看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=34.再次訪問哨兵服務器信息,查看JAVA REDISSION客戶端輸出信息
o.redisson.connection.MasterSlaveEntry : master 10.100.8.103/10.100.8.103:6389 has changed to /10.100.8.103:63915.調用接口可以正常訪問,程序無需重啟和修改。
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:7896.再次啟動前次關閉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=07.再次關閉此從節點
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 主从哨兵模式搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: springboot 加载mybatis
 - 下一篇: netty 管道和handler的加载和