Redis 哨兵高模式搭建及Java代碼配置
準(zhǔn)備配置文件
# 配置文件進(jìn)行了精簡(jiǎn),完整配置可自行和官方提供的完整conf文件進(jìn)行對(duì)照。端口號(hào)自行對(duì)應(yīng)修改 # 后臺(tái)啟動(dòng)的意思 daemonize yes # 端口號(hào) port 6380 # IP綁定,redis不建議對(duì)公網(wǎng)開放,直接綁定0.0.0.0沒(méi)毛病 bind 0.0.0.0 # redis數(shù)據(jù)文件存放的目錄 dir /usr/local/redis/data # 開啟AOF appendonly yes # 開啟集群 cluster-enabled yes # 會(huì)自動(dòng)生成在上面配置的dir目錄下 cluster-config-file nodes-6381.conf cluster-node-timeout 5000 # 這個(gè)文件會(huì)自動(dòng)生成 pidfile /var/run/redis_6381.pid
分別準(zhǔn)備三個(gè)server的配置文件
[root@hadoop-master conf]# ll |grep redis | grep -v 6379 -rw-r--r-- 1 root root 489 7月 28 14:49 redis-6380.conf -rw-r--r-- 1 root root 571 7月 28 18:09 redis-6381.conf -rw-r--r-- 1 root root 600 7月 28 18:09 redis-6382.conf
啟動(dòng)三個(gè)server
#使用 redis-server 命令,并指定配置文件 /mnt/redis/bin/redis-server /mnt/redis/conf/redis-6380.conf /mnt/redis/bin/redis-server /mnt/redis/conf/redis-6381.conf /mnt/redis/bin/redis-server /mnt/redis/conf/redis-6382.conf
配置主從
#通過(guò) redis-cli客戶端命令將指定端口下的服務(wù)作為指定ip端口下的從屬節(jié)點(diǎn) /mnt/redis/bin/redis-cli -p 6381 192.168.16.40 6380 /mnt/redis/bin/redis-cli -p 6382 192.168.16.40 6380 #此時(shí)6380為主節(jié)點(diǎn)其他節(jié)點(diǎn)為從屬節(jié)點(diǎn)
檢查集群是否已經(jīng)就緒
# 此命令可查看redis集群中的 server/Clients/memory/persistence/stats # replication/cpu/modules/cluster/keyspace等信息 /mnt/redis/bin/redis-cli -p 6380 info # 通過(guò)指定replication獲取集群信息 /mnt/redis/bin/redis-cli -p 6380 info replication
redis-cli info 命令各數(shù)值含義對(duì)照
# Server redis_version:3.2.0 #redis 版本 redis_git_sha1:00000000 redis_git_dirty:0 redis_build_id:85def9ed04ebeee4 redis_mode:cluster #運(yùn)行模式(standalone,cluster) os:Linux 3.0.13-0.27-default x86_64 #運(yùn)行系統(tǒng)內(nèi)核版本 arch_bits:64 #字長(zhǎng) multiplexing_api:epoll #Redis使用的事件處理機(jī)制 gcc_version:4.3.4 #編譯Redis時(shí)所使用的GCC版本 process_id:26327 #Redis進(jìn)程PID run_id:e833bf79e98daa5b5917c510b4d9f056cfc5059c #Redis服務(wù)器的編號(hào)(用于集群) tcp_port:7001 #監(jiān)聽(tīng)的端口 uptime_in_seconds:587882 #已運(yùn)行秒數(shù) uptime_in_days:6 #已運(yùn)行天數(shù) hz:10 #用于執(zhí)行后臺(tái)任務(wù)的函數(shù)被調(diào)用的頻率 lru_clock:10570417 #用于LRU管理的計(jì)時(shí)器,單位為分鐘 executable:/home/rediscluster/7001/redis/./bin/redis-server #bin文件位置 config_file:/home/rediscluster/7001/redis/./config/redis.conf #配置文件位置 # Clients connected_clients:1 #連接的客戶端數(shù) client_longest_output_list:0 #當(dāng)前客戶端連接中最長(zhǎng)的輸出列表 client_biggest_input_buf:0 #當(dāng)前客戶端連接中最大的輸入緩存 blocked_clients:0 #阻塞的客戶端數(shù) # Memory used_memory:2421816 #消耗的內(nèi)存 used_memory_human:2.31M used_memory_rss:3973120 #操作系統(tǒng)分配給Redis的內(nèi)存 used_memory_rss_human:3.79M used_memory_peak:2421816 #內(nèi)存消耗的峰值 used_memory_peak_human:2.31M total_system_memory:8250241024 #系統(tǒng)總內(nèi)存 total_system_memory_human:7.68G used_memory_lua:37888 #Lua腳本消耗的內(nèi)存 used_memory_lua_human:37.00K maxmemory:0 #內(nèi)存使用限制 maxmemory_human:0B maxmemory_policy:noeviction #超出內(nèi)存限制時(shí)的行為 mem_fragmentation_ratio:1.64 #內(nèi)存碎片率(=used_memory_rss/used_memory) mem_allocator:jemalloc-4.0.3 #內(nèi)存分配器 # Persistence loading:0 #是否正在載入持久化文件 rdb_changes_since_last_save:0 #上次持久化以來(lái)修改的鍵值數(shù) rdb_bgsave_in_progress:0 #是否正在后臺(tái)保存RDB文件 rdb_last_save_time:1469670746 #上次RDB持久化的時(shí)間戳 rdb_last_bgsave_status:ok #上次RDB持久化的結(jié)果 rdb_last_bgsave_time_sec:0 #上次創(chuàng)建RDB文件消耗的秒數(shù) rdb_current_bgsave_time_sec:-1 #如果正在創(chuàng)建RDB文件,記錄已經(jīng)消耗了多少時(shí)間 aof_enabled:1 #是否啟用AOF持久化 aof_rewrite_in_progress:0 #是否正在重寫AOF文件 aof_rewrite_scheduled:0 #是否將要重寫AOF文件 aof_last_rewrite_time_sec:-1 #上次AOF重寫消耗的時(shí)間 aof_current_rewrite_time_sec:-1 #當(dāng)前AOF重寫已消耗的時(shí)間 aof_last_bgrewrite_status:ok #上次重寫AOF文件的結(jié)果 aof_last_write_status:ok #上次寫入AOF文件的結(jié)果 aof_current_size:54 #當(dāng)前AOF文件的大小 aof_base_size:0 #上一個(gè)AOF文件的大小 aof_pending_rewrite:0 #是否有AOF重寫操作在等待RDB文件的創(chuàng)建 aof_buffer_length:0 #AOF寫入緩沖區(qū)大小 aof_rewrite_buffer_length:0 #AOF重寫緩沖區(qū)大小 aof_pending_bio_fsync:0 #正在I/O隊(duì)列中等待的fsync()的數(shù)量 aof_delayed_fsync:0 #被延遲執(zhí)行的fsync()的數(shù)量 # Stats total_connections_received:9 #服務(wù)器已接受的連接請(qǐng)求數(shù) total_commands_processed:586729 #服務(wù)器已經(jīng)執(zhí)行的命令數(shù)量 instantaneous_ops_per_sec:1 #當(dāng)前每秒執(zhí)行的命令數(shù)量 total_net_input_bytes:22855989 #接受的數(shù)據(jù)包總大小 total_net_output_bytes:849760 #發(fā)送的數(shù)據(jù)包總大小 instantaneous_input_kbps:0.05 #當(dāng)前下行速率 instantaneous_output_kbps:0.01 #當(dāng)前上行速率 rejected_connections:0 #被拒絕的連接請(qǐng)求數(shù) sync_full:1 #主從同步狀態(tài) sync_partial_ok:0 sync_partial_err:0 expired_keys:0 #過(guò)期的鍵數(shù) evicted_keys:0 #因內(nèi)存達(dá)到上限被剔除的鍵數(shù) keyspace_hits:0 #命中key的次數(shù) keyspace_misses:0 #未命中的次數(shù) pubsub_channels:0 #當(dāng)前被訂閱的頻道和模式數(shù) pubsub_patterns:0 latest_fork_usec:640 #最后一次fork()消耗的毫秒數(shù) migrate_cached_sockets:0 #為節(jié)點(diǎn)遷移緩存的TCP連接數(shù) # Replication role:master #主節(jié)點(diǎn)還是從節(jié)點(diǎn) connected_slaves:1 #已連接的從節(jié)點(diǎn)數(shù) slave0:ip=127.0.0.1,port=7004,state=online,offset=821435,lag=1 #從節(jié)點(diǎn)信息 ip 端口 數(shù)據(jù)新度等 master_repl_offset:821435 #主節(jié)點(diǎn)數(shù)據(jù)新度 repl_backlog_active:1 #是否為主從同步啟用積壓空間 repl_backlog_size:1048576 #積壓空間大小 repl_backlog_first_byte_offset:2 #積壓空間開頭的數(shù)據(jù)新度 repl_backlog_histlen:821434 #積壓空間當(dāng)前數(shù)據(jù)量 # CPU used_cpu_sys:255.39 #核心態(tài)CPU時(shí)間 used_cpu_user:257.42 #用戶態(tài)CPU時(shí)間 used_cpu_sys_children:0.00 #子進(jìn)程核心態(tài)CPU時(shí)間 used_cpu_user_children:0.00 #子進(jìn)程用戶態(tài)CPU時(shí)間 # Cluster cluster_enabled:1 #是否啟用集群 # Keyspace db0:keys=1,expires=0,avg_ttl=0 #各數(shù)據(jù)庫(kù)的鍵數(shù)、過(guò)期鍵數(shù)、數(shù)據(jù)庫(kù)中鍵的平均過(guò)期時(shí)間戳估測(cè)值
準(zhǔn)備哨兵配置文件(3個(gè)節(jié)點(diǎn))
# 配置文件:sentinel.conf,在sentinel運(yùn)行期間是會(huì)被動(dòng)態(tài)修改的 # sentinel如果重啟時(shí),根據(jù)這個(gè)配置來(lái)恢復(fù)其之前所監(jiān)控的redis集群的狀態(tài) # 綁定IP bind 0.0.0.0 # 后臺(tái)運(yùn)行 daemonize yes # 默認(rèn)yes,沒(méi)指定密碼或者指定IP的情況下,外網(wǎng)無(wú)法訪問(wèn) protected-mode no # 哨兵的端口,客戶端通過(guò)這個(gè)端口來(lái)發(fā)現(xiàn)redis port 26380 # 哨兵自己的IP,手動(dòng)設(shè)定也可自動(dòng)發(fā)現(xiàn),用于與其他哨兵通信 # sentinel announce-ip # 臨時(shí)文件夾 dir "/tmp" # 日志 logfile "/mnt/redis/logs/sentinel-26380.log" # sentinel監(jiān)控的master的名字叫做mymaster,初始地址為 192.168.16.40 6380,2代表兩個(gè)及以上哨兵認(rèn)定為死亡,才認(rèn)為是真的死亡 sentinel myid fa62676c970da6800e30b28b9cc732e2cee85952 # 發(fā)送心跳PING來(lái)確認(rèn)master是否存活 # 如果master在“一定時(shí)間范圍”內(nèi)不回應(yīng)PONG 或者是回復(fù)了一個(gè)錯(cuò)誤消息,那么這個(gè)sentinel會(huì)主觀地(單方面地)認(rèn)為這個(gè)master已經(jīng)不可用了 sentinel deny-scripts-reconfig yes # 如果在該時(shí)間(ms)內(nèi)未能完成failover操作,則認(rèn)為該failover失敗 sentinel monitor mymaster 192.168.16.40 6381 2 # 指定了在執(zhí)行故障轉(zhuǎn)移時(shí),最多可以有多少個(gè)從Redis實(shí)例在同步新的主實(shí)例,在從Redis實(shí)例較多的情況下這個(gè)數(shù)字越小,同步的時(shí)間越長(zhǎng),完成故障轉(zhuǎn)移所需的時(shí)間就越長(zhǎng) sentinel down-after-milliseconds mymaster 1000
增加三個(gè)配置文件
[root@hadoop-master conf]# ll | grep sentinel -rw-r--r-- 1 root root 1989 7月 28 18:09 sentinel-26380.conf -rw-r--r-- 1 root root 1989 7月 28 18:09 sentinel-26381.conf -rw-r--r-- 1 root root 1989 7月 28 18:09 sentinel-26382.conf
啟動(dòng)哨兵節(jié)點(diǎn)
# 可使用redis-server + sentinel參數(shù)啟動(dòng) /mnt/redis/bin/redis-server /mnt/redis/conf/sentinel-26380.conf --sentinel /mnt/redis/bin/redis-server /mnt/redis/conf/sentinel-26381.conf --sentinel /mnt/redis/bin/redis-server /mnt/redis/conf/sentinel-26382.conf --sentinel # 直接使用redis-sentinel啟動(dòng) /mnt/redis/bin/redis-sentinel /mnt/redis/conf/sentinel-26380.conf /mnt/redis/bin/redis-sentinel /mnt/redis/conf/sentinel-26381.conf /mnt/redis/bin/redis-sentinel /mnt/redis/conf/sentinel-26382.conf
# 停掉master,主從切換過(guò)程
啟動(dòng)哨兵(客戶端通過(guò)哨兵發(fā)現(xiàn)Redis實(shí)例信息)
哨兵通過(guò)連接master發(fā)現(xiàn)主從集群內(nèi)的所有實(shí)例信息
哨兵監(jiān)控redis實(shí)例的健康狀況
哨兵一旦發(fā)現(xiàn)master不能正常提供服務(wù),則通知給其他哨兵
當(dāng)一定數(shù)量的哨兵都認(rèn)為master掛了
選舉一個(gè)哨兵作為故障轉(zhuǎn)移的執(zhí)行者
執(zhí)行者在slave中選取一個(gè)作為新的master
將其他slave重新設(shè)定為新master的從屬
# 因?yàn)?380的端口是主節(jié)點(diǎn) [root@hadoop-master bin]# ps -ef | grep redis| grep 6380 root 30325 1 0 19:09 ? 00:00:00 /mnt/redis/bin/redis-server 0.0.0.0:6380 root 30415 1 0 19:10 ? 00:00:01 /mnt/redis/bin/redis-sentinel 0.0.0.0:26380 [sentinel] [root@hadoop-master bin]# kill -9 30325
從日志中分析哨兵間的通信及新mater的生成
####################################啟動(dòng)日志####################################### 31551:X 28 Jul 2020 19:35:23.289 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo 31551:X 28 Jul 2020 19:35:23.289 # Redis version=6.0.5, bits=64, commit=00000000, modified=0, pid=31551, just started 31551:X 28 Jul 2020 19:35:23.289 # Configuration loaded 31552:X 28 Jul 2020 19:35:23.293 * Running mode=sentinel, port=26380. 31552:X 28 Jul 2020 19:35:23.293 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128. 31552:X 28 Jul 2020 19:35:23.294 # Sentinel ID is fa62676c970da6800e30b28b9cc732e2cee85952 31552:X 28 Jul 2020 19:35:23.294 # +monitor master mymaster 192.168.16.40 6380 quorum 2 31552:X 28 Jul 2020 19:35:24.344 # +sdown sentinel 4cabf69629c1401289b6d3d239eba18b45da0041 192.168.16.40 26381 @ mymaster 192.168.16.40 6380 31552:X 28 Jul 2020 19:35:24.345 # +sdown sentinel 20d8240e06a10cd887b752026c00de0318761eb8 192.168.16.40 26382 @ mymaster 192.168.16.40 6380 31552:X 28 Jul 2020 19:35:26.471 # -sdown sentinel 4cabf69629c1401289b6d3d239eba18b45da0041 192.168.16.40 26381 @ mymaster 192.168.16.40 6380 31552:X 28 Jul 2020 19:35:29.621 # -sdown sentinel 20d8240e06a10cd887b752026c00de0318761eb8 192.168.16.40 26382 @ mymaster 192.168.16.40 6380 ####################################殺掉主節(jié)點(diǎn)之后日志1################################### 31552:X 28 Jul 2020 19:37:42.950 # +sdown master mymaster 192.168.16.40 6380 31552:X 28 Jul 2020 19:37:43.018 # +new-epoch 3 31552:X 28 Jul 2020 19:37:43.019 # +vote-for-leader 4cabf69629c1401289b6d3d239eba18b45da0041 3 31552:X 28 Jul 2020 19:37:44.023 # +odown master mymaster 192.168.16.40 6380 #quorum 3/2 31552:X 28 Jul 2020 19:37:44.023 # Next failover delay: I will not start a failover before Tue Jul 28 19:37:49 2020 31552:X 28 Jul 2020 19:37:44.098 # +config-update-from sentinel 4cabf69629c1401289b6d3d239eba18b45da0041 192.168.16.40 26381 @ mymaster 192.168.16.40 6380 31552:X 28 Jul 2020 19:37:44.098 # +switch-master mymaster 192.168.16.40 6380 192.168.16.40 6381 31552:X 28 Jul 2020 19:37:44.098 * +slave slave 192.168.16.40:6382 192.168.16.40 6382 @ mymaster 192.168.16.40 6381 31552:X 28 Jul 2020 19:37:44.098 * +slave slave 192.168.16.40:6380 192.168.16.40 6380 @ mymaster 192.168.16.40 6381 31552:X 28 Jul 2020 19:37:45.169 # +sdown slave 192.168.16.40:6380 192.168.16.40 6380 @ mymaster 192.168.16.40 6381 ####################################殺掉主節(jié)點(diǎn)之后日志2################################### 31557:X 28 Jul 2020 19:37:42.952 # +sdown master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:43.014 # +odown master mymaster 192.168.16.40 6380 #quorum 2/2 31557:X 28 Jul 2020 19:37:43.014 # +new-epoch 3 31557:X 28 Jul 2020 19:37:43.014 # +try-failover master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:43.016 # +vote-for-leader 4cabf69629c1401289b6d3d239eba18b45da0041 3 31557:X 28 Jul 2020 19:37:43.019 # fa62676c970da6800e30b28b9cc732e2cee85952 voted for 4cabf69629c1401289b6d3d239eba18b45da0041 3 31557:X 28 Jul 2020 19:37:43.019 # 20d8240e06a10cd887b752026c00de0318761eb8 voted for 4cabf69629c1401289b6d3d239eba18b45da0041 3 31557:X 28 Jul 2020 19:37:43.087 # +elected-leader master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:43.087 # +failover-state-select-slave master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:43.140 # +selected-slave slave 192.168.16.40:6381 192.168.16.40 6381 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:43.140 * +failover-state-send-slaveof-noone slave 192.168.16.40:6381 192.168.16.40 6381 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:43.216 * +failover-state-wait-promotion slave 192.168.16.40:6381 192.168.16.40 6381 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:44.023 # +promoted-slave slave 192.168.16.40:6381 192.168.16.40 6381 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:44.023 # +failover-state-reconf-slaves master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:44.097 * +slave-reconf-sent slave 192.168.16.40:6382 192.168.16.40 6382 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:45.095 * +slave-reconf-inprog slave 192.168.16.40:6382 192.168.16.40 6382 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:45.095 * +slave-reconf-done slave 192.168.16.40:6382 192.168.16.40 6382 @ mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:45.172 # -odown master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:45.172 # +failover-end master mymaster 192.168.16.40 6380 31557:X 28 Jul 2020 19:37:45.172 # +switch-master mymaster 192.168.16.40 6380 192.168.16.40 6381 31557:X 28 Jul 2020 19:37:45.172 * +slave slave 192.168.16.40:6382 192.168.16.40 6382 @ mymaster 192.168.16.40 6381 31557:X 28 Jul 2020 19:37:45.172 * +slave slave 192.168.16.40:6380 192.168.16.40 6380 @ mymaster 192.168.16.40 6381 31557:X 28 Jul 2020 19:37:46.226 # +sdown slave 192.168.16.40:6380 192.168.16.40 6380 @ mymaster 192.168.16.40 6381 ####################################殺掉主節(jié)點(diǎn)之后日志3################################### 31563:X 28 Jul 2020 19:37:42.970 # +sdown master mymaster 192.168.16.40 6380 31563:X 28 Jul 2020 19:37:43.018 # +new-epoch 3 31563:X 28 Jul 2020 19:37:43.019 # +vote-for-leader 4cabf69629c1401289b6d3d239eba18b45da0041 3 31563:X 28 Jul 2020 19:37:43.023 # +odown master mymaster 192.168.16.40 6380 #quorum 3/2 31563:X 28 Jul 2020 19:37:43.023 # Next failover delay: I will not start a failover before Tue Jul 28 19:37:49 2020 31563:X 28 Jul 2020 19:37:44.098 # +config-update-from sentinel 4cabf69629c1401289b6d3d239eba18b45da0041 192.168.16.40 26381 @ mymaster 192.168.16.40 6380 31563:X 28 Jul 2020 19:37:44.098 # +switch-master mymaster 192.168.16.40 6380 192.168.16.40 6381 31563:X 28 Jul 2020 19:37:44.098 * +slave slave 192.168.16.40:6382 192.168.16.40 6382 @ mymaster 192.168.16.40 6381 31563:X 28 Jul 2020 19:37:44.098 * +slave slave 192.168.16.40:6380 192.168.16.40 6380 @ mymaster 192.168.16.40 6381 31563:X 28 Jul 2020 19:37:45.124 # +sdown slave 192.168.16.40:6380 192.168.16.40 6380 @ mymaster 192.168.16.40 6381
哨兵同步pubsub機(jī)制發(fā)出來(lái)的消息
# https://redis.io/topics/sentinel#pubsub-messages +reset-master <instance details> -- 當(dāng)master被重置時(shí). +slave <instance details> -- 當(dāng)檢測(cè)到一個(gè)slave并添加進(jìn)slave列表時(shí). +failover-state-reconf-slaves <instance details> -- Failover狀態(tài)變?yōu)閞econf-slaves狀態(tài)時(shí) +failover-detected <instance details> -- 當(dāng)failover發(fā)生時(shí) +slave-reconf-sent <instance details> -- sentinel發(fā)送SLAVEOF命令把它重新配置時(shí) +slave-reconf-inprog <instance details> -- slave被重新配置為另外一個(gè)master的slave,但數(shù)據(jù)復(fù)制還未發(fā)生時(shí)。 +slave-reconf-done <instance details> -- slave被重新配置為另外一個(gè)master的slave并且數(shù)據(jù)復(fù)制已經(jīng)與master同步時(shí)。 -dup-sentinel <instance details> -- 刪除指定master上的冗余sentinel時(shí) (當(dāng)一個(gè)sentinel重新啟動(dòng)時(shí),可能會(huì)發(fā)生這個(gè)事件). +sentinel <instance details> -- 當(dāng)master增加了一個(gè)sentinel時(shí)。 +sdown <instance details> -- 進(jìn)入SDOWN狀態(tài)時(shí); -sdown <instance details> -- 離開SDOWN狀態(tài)時(shí)。 +odown <instance details> -- 進(jìn)入ODOWN狀態(tài)時(shí)。 -odown <instance details> -- 離開ODOWN狀態(tài)時(shí)。 +new-epoch <instance details> -- 當(dāng)前配置版本被更新時(shí)。 +try-failover <instance details> -- 達(dá)到failover條件,正等待其他sentinel的選舉。 +elected-leader <instance details> -- 被選舉為去執(zhí)行failover的時(shí)候。 +failover-state-select-slave <instance details> -- 開始要選擇一個(gè)slave當(dāng)選新master時(shí)。 +no-good-slave <instance details> -- 沒(méi)有合適的slave來(lái)?yè)?dān)當(dāng)新master +selected-slave <instance details> -- 找到了一個(gè)適合的slave來(lái)?yè)?dān)當(dāng)新master +promoted-slave -- 確認(rèn)成功 +failover-state-reconf-slaves -- 開始對(duì)slaves進(jìn)行reconfig操作 +slave-reconf-sent -- 向指定的slave發(fā)送“slaveof”指令,告知此slave跟隨新的master +slave-reconf-inprog -- 此slave正在執(zhí)行slaveof + SYNC過(guò)程,slave收到“+slave-reconf-sent”之后將會(huì)執(zhí)行slaveof操作 +slave-reconf-done -- 此slave同步完成,此后leader可以繼續(xù)下一個(gè)slave的reconfig操作 failover-state-send-slaveof-noone <instance details> -- 當(dāng)把選擇為新master的slave的身份進(jìn)行切換的時(shí)候。 failover-end-for-timeout <instance details> -- failover由于超時(shí)而失敗時(shí)。 failover-end <instance details> -- failover成功完成,故障轉(zhuǎn)移結(jié)束 switch-master <master name> <oldip> <oldport> <newip> <newport> -- 當(dāng)master的地址發(fā)生變化時(shí)。通常這是客戶端最感興趣的消息了。 +tilt -- 進(jìn)入Tilt模式。
至此,Redis哨兵模式基本上可以健壯運(yùn)行了。
Java使用哨兵模式
@Configuration publicclass SentinelRedisAppConfig { @Bean public LettuceConnectionFactory redisConnectionFactory() { System.out.println("使用哨兵版本"); RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration() .master("mymaster") // 哨兵地址 .sentinel("192.168.16.40", 26380) .sentinel("192.168.16.40", 26381) .sentinel("192.168.16.40", 26381); return new LettuceConnectionFactory(sentinelConfig); } }
到此這篇關(guān)于Redis 哨兵高模式搭建及Java代碼配置的文章就介紹到這了,更多相關(guān)Redis 哨兵高模式搭建內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Redis主從架構(gòu)和高可用性實(shí)現(xiàn)過(guò)程
本文詳細(xì)介紹了使用Redis主從架構(gòu)和Linux虛擬服務(wù)器(LVS)實(shí)現(xiàn)高可用性的方法,并回顧了最近完成的Redis集群遷移部署過(guò)程,主從架構(gòu)通過(guò)復(fù)制數(shù)據(jù)來(lái)提高性能和數(shù)據(jù)冗余,而LVS用于實(shí)現(xiàn)負(fù)載均衡和故障切換,感興趣的朋友跟隨小編一起看看吧2024-09-09解析Redis 數(shù)據(jù)結(jié)構(gòu)之簡(jiǎn)單動(dòng)態(tài)字符串sds
Redis 的 string 類型為何使用sds而不是 C 字符串,本文主要介紹 string 的數(shù)據(jù)結(jié)構(gòu)—— 簡(jiǎn)單動(dòng)態(tài)字符串(Simple Dynamic String) 簡(jiǎn)稱sds的相關(guān)知識(shí),需要的朋友可以參考下2021-11-11redis分布式Jedis類型轉(zhuǎn)換的異常深入研究
這篇文章主要介紹了redis分布式Jedis類型轉(zhuǎn)換的異常深入研究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Redis結(jié)合 Docker 搭建集群并整合SpringBoot的詳細(xì)過(guò)程
這篇文章主要介紹了Redis結(jié)合Docker搭建集群并整合SpringBoot的詳細(xì)過(guò)程,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-06-06