<kbd id="9plqc"><label id="9plqc"></label></kbd>

        <th id="9plqc"></th>
        1. <center id="9plqc"><video id="9plqc"></video></center>
          <sub id="9plqc"><form id="9plqc"><pre id="9plqc"></pre></form></sub>
          <nav id="9plqc"><form id="9plqc"><legend id="9plqc"></legend></form></nav>
          Redis Sentinel 高可用機(jī)制 您所在的位置:網(wǎng)站首頁(yè) 屬狗可以和屬雞相配嗎 Redis Sentinel 高可用機(jī)制

          Redis Sentinel 高可用機(jī)制

          2025-01-03 18:28| 來源: 網(wǎng)絡(luò)整理| 查看: 265

          前言

          Redis Sentinel是Redis官方建議的高可用(HA)解決方案,在我們搭建Redis集群時(shí),Redis本身并未集成主備切換功能,sentinel本身是獨(dú)立運(yùn)行的,能夠監(jiān)控多個(gè)Redis集群,發(fā)現(xiàn)master宕機(jī)后能夠自動(dòng)切換,選舉一個(gè)slave成為新的master,當(dāng)原master恢復(fù)之后,sentinel會(huì)自動(dòng)將其作為slave加入到集群中,整個(gè)過程不需要人工參與,完全自動(dòng)化。

          主要介紹

          sentinel主要功能

          定期監(jiān)控Redis服務(wù)是否運(yùn)行正常定期監(jiān)控其他sentinel服務(wù)是否正常能夠自動(dòng)切換master節(jié)點(diǎn)sentinel節(jié)點(diǎn)不存儲(chǔ)數(shù)據(jù)

          sentinel集群

          這個(gè)不難理解,如果我們用一個(gè)非高可用的sentinel去實(shí)現(xiàn)Redis的高可用,明顯是不科學(xué)的,當(dāng)這一臺(tái)sentinel宕機(jī)之后,Redis顯然無法繼續(xù)保持它的高可用,所以我們?cè)诓渴餾entinel的時(shí)候也會(huì)采用集群的方式

          優(yōu)勢(shì):

          ? 即使有sentinel服務(wù)宕機(jī),只要還有一臺(tái)sentinel運(yùn)行正常,就可以使Redis繼續(xù)保持高可用

          sentinel版本問題

          sentinel在Redis2.6版本中引入的,當(dāng)時(shí)是sentinel 1,貌似有蠻多問題,畢竟初版

          在Redis2.8版本中升級(jí)到sentinel 2,之后就非常穩(wěn)定了

          不過現(xiàn)在Redis已經(jīng)發(fā)展了很久,版本也越來越高,sentinel已經(jīng)非常值得信賴了

          sentinel中的定時(shí)任務(wù)

          每隔10秒向各個(gè)Redis服務(wù)器(master和slave節(jié)點(diǎn))發(fā)送INFO命令,根據(jù)回應(yīng)獲取master和slave信息,通過master的回復(fù)可以獲取到新增的slave節(jié)點(diǎn)每隔02秒向Redis的master服務(wù)器發(fā)送命令(hello消息),用于發(fā)現(xiàn)和監(jiān)視其他sentinel,sentinel之間的監(jiān)控不在額外創(chuàng)建訂閱每隔01秒向Redis和sentinel所有服務(wù)發(fā)送PING消息(sentinel本身的ip、端口、id等內(nèi)容),通過回復(fù)PONG判斷服務(wù)是否在線

          下線判斷

          主觀下線:當(dāng)前sentinel斷定master下線客觀下線:滿足sentinel配置文件中quorum數(shù)量的sentinel均斷定master下線

          配置文件解讀

          # sentinel運(yùn)行的端口,默認(rèn)為26379 port 26377 dir "/private/tmp" logfile "/var/log/redis/sentinel_26377.log" # 以守護(hù)進(jìn)程執(zhí)行 daemonize yes # 守護(hù)進(jìn)程運(yùn)行的pid保存文件 pidfile "/var/run/redis-sentinel.pid" # 格式:sentinel monitor # 該行的意思是::自定義 # :master主機(jī)的IP # :master的端口 # :表示在sentinel集群中,使master由主觀下線變?yōu)榭陀^下線的sentinel數(shù)量。 sentinel monitor cc_master 127.0.0.1 6379 2 # 格式:sentinel down-after-milliseconds # sentinel會(huì)向master發(fā)送心跳PING來確認(rèn)master是否存活,如果master在時(shí)間內(nèi)回應(yīng)的不是PONG,那么這個(gè)sentinel會(huì)主觀地認(rèn)為這個(gè)master下線了。的單位是毫秒,默認(rèn)30秒。 sentinel down-after-milliseconds cc_master 15000 # 格式:sentinel failover-timeout # failover過期時(shí)間,當(dāng)failover開始后,在此時(shí)間內(nèi)仍然沒有觸發(fā)任何failover作,當(dāng)前sentinel將會(huì)認(rèn)為此次failoer失敗。默認(rèn)180秒,即3分鐘。 sentinel failover-timeout cc_master 60000 # sentinel parallel-syncs # 在發(fā)生failover主備切換時(shí),這個(gè)選項(xiàng)指定了最多可以有多少個(gè)slave同時(shí)對(duì)新的master進(jìn)行同步,這個(gè)數(shù)字越小,完成failover所需的時(shí)間就越長(zhǎng),但是如果這個(gè)數(shù)字越大,就意味著越多的slave因?yàn)閞eplication而不可用。可以通過將這個(gè)值設(shè)為1來保證每次只有一個(gè)slave處于不能處理命令請(qǐng)求的狀態(tài)。 sentinel parallel-syncs cc_master 1 # 格式:sentinel auth-pass # sentinel連接的master節(jié)點(diǎn)的登錄密碼 sentinel auth-pass cc_master redis

          故障轉(zhuǎn)移

          sentinel使用Raft投票選舉出一個(gè)leader去執(zhí)行故障轉(zhuǎn)移 每一個(gè)將master標(biāo)記為主觀下線的sentinel節(jié)點(diǎn)發(fā)起投票其他sentinel節(jié)點(diǎn)收到投票后,若尚未參與投票(也就是尚未投票給其他sentinel),則同意,否則拒絕最終收到過半同意的sentinel節(jié)點(diǎn)作為leader若有兩個(gè)sentinel收到了過半投票,那么就再重新選舉選舉新的master節(jié)點(diǎn) 選擇replica-priority配置數(shù)字最高的slave節(jié)點(diǎn)為master,默認(rèn)為100若replica-priority相同,則選擇偏移量最大的slave節(jié)點(diǎn),偏移量是指slave從master同步的進(jìn)度,偏移量越大說明數(shù)據(jù)越完整,可以通過Redis的info命令查看(slave_repl_offset)當(dāng)前slave的偏移量若偏移量相同,則選擇最先啟動(dòng)的slave作為master更改master后,通知其他slave節(jié)點(diǎn)同步為新的master節(jié)點(diǎn)的slave節(jié)點(diǎn)原master節(jié)點(diǎn)恢復(fù)之后自動(dòng)加入到集群中,成為新master的slave節(jié)點(diǎn) 實(shí)戰(zhàn)

          在本機(jī)上啟動(dòng)3個(gè)Redis實(shí)例,采用1主2從的模式,以下只記錄redis.conf和sentinel.conf中關(guān)鍵內(nèi)容

          redis.conf

          redis-master.conf配置

          # 默認(rèn)端口 port 6379

          redis-slave1.conf配置

          # 端口 port 63791 # 格式:replicaof # 從節(jié)點(diǎn)歸屬的master節(jié)點(diǎn) replicaof 127.0.0.1 6379

          redis-slave2.conf配置

          # 端口 port 63792 # 格式:replicaof # 從節(jié)點(diǎn)歸屬的master節(jié)點(diǎn) replicaof 127.0.0.1 6379

          sentinel.conf

          sentinel0.conf

          # 端口 port 26379 sentinel myid 842c9102c48eb0cedeb06fe55e7d2258595ac267 # 監(jiān)控master sentinel monitor cc_master 127.0.0.1 6379 2

          sentinel1.conf

          # 端口 port 26378 sentinel myid 842c9102c48eb0cedeb06fe55e7d2258595ac266 # 監(jiān)控master sentinel monitor cc_master 127.0.0.1 6379 2

          sentinel2.conf

          # 端口 port 26377 sentinel myid 842c9102c48eb0cedeb06fe55e7d2258595ac265 # 監(jiān)控master sentinel monitor cc_master 127.0.0.1 6379 2

          啟動(dòng)

          啟動(dòng)sentinel

          redis-sentinel ~/Documents/develop_tools/tools/redis-5.0.5/sentinel0.conf redis-sentinel ~/Documents/develop_tools/tools/redis-5.0.5/sentinel1.conf redis-sentinel ~/Documents/develop_tools/tools/redis-5.0.5/sentinel2.conf

          啟動(dòng)Redis

          redis-server ~/Documents/develop_tools/tools/redis-5.0.5/redis-master.conf redis-server ~/Documents/develop_tools/tools/redis-5.0.5/redis-slave1.conf redis-server ~/Documents/develop_tools/tools/redis-5.0.5/redis-slave2.conf Redis通過info查看信息

          127.0.0.1:6379>info all

          # Server服務(wù)器信息 redis_version:5.0.5 # Redis 服務(wù)器版本 redis_git_sha1:00000000 # Git SHA1 redis_git_dirty:0 # Git dirty flag redis_build_id:6c6e38af7cea0726 # Redis構(gòu)建ID redis_mode:standalone # Redis運(yùn)行模式 os:Darwin 19.3.0 x86_64 # 運(yùn)行環(huán)境作系統(tǒng)版本 arch_bits:64 # 架構(gòu)(32 或 64 位) multiplexing_api:kqueue # Redis 所使用的事件處理機(jī)制 atomicvar_api:atomic-builtin gcc_version:4.2.1 # 編譯的GCC版本 process_id:61985 # 服務(wù)器進(jìn)程的 PID run_id:433b78ec513c8b782f3a46ba6b4ade1f12439aca # Redis 服務(wù)器的隨機(jī)標(biāo)識(shí)符(用于Sentinel和集群) tcp_port:6379 # Redis端口 uptime_in_seconds:108 # Redis運(yùn)行時(shí)長(zhǎng),秒 uptime_in_days:0 # Redis運(yùn)行市場(chǎng),天 hz:10 configured_hz:10 lru_clock:8363059 # 以分鐘為單位進(jìn)行自增的時(shí)鐘,用于 LRU 管理 executable:/Users/chuan/redis-server # 運(yùn)行命令 config_file: # 啟動(dòng)使用的配置文件 # Clients connected_clients:7 # 已連接客戶端的數(shù)量 client_recent_max_input_buffer:2 # 當(dāng)前連接的客戶端當(dāng)中,最長(zhǎng)的輸出列表 client_recent_max_output_buffer:0 # 當(dāng)前連接的客戶端當(dāng)中,最大輸入緩存 blocked_clients:0 # 正在等待阻塞命令(BLPOP、BRPOP、BRPOPLPUSH)的客戶端的數(shù)量 # Memory (太多了,不做解釋了) used_memory:2235920 # 由 Redis 分配器分配的內(nèi)存總量,以字節(jié)(byte)為單位 used_memory_human:2.13M # 以可讀的格式返回 Redis 分配的內(nèi)存總量 used_memory_rss:3153920 # 從作系統(tǒng)的角度,返回 Redis 已分配的內(nèi)存總量(俗稱常駐集大小)。這個(gè)值和top 、 ps 等命令的輸出一致。 used_memory_rss_human:3.01M # 以可讀的格式返回rss used_memory_peak:2317840 # Redis 的內(nèi)存消耗峰值(以字節(jié)為單位) used_memory_peak_human:2.21M used_memory_peak_perc:96.47% used_memory_overhead:2221526 used_memory_startup:987776 used_memory_dataset:14394 used_memory_dataset_perc:1.15% allocator_allocated:2271808 allocator_active:3116032 allocator_resident:3116032 total_system_memory:17179869184 total_system_memory_human:16.00G used_memory_lua:37888 used_memory_lua_human:37.00K used_memory_scripts:0 used_memory_scripts_human:0B number_of_cached_scripts:0 maxmemory:0 maxmemory_human:0B maxmemory_policy:noeviction allocator_frag_ratio:1.37 allocator_frag_bytes:844224 allocator_rss_ratio:1.00 allocator_rss_bytes:0 rss_overhead_ratio:1.01 rss_overhead_bytes:37888 mem_fragmentation_ratio:1.39 mem_fragmentation_bytes:882112 mem_not_counted_for_evict:0 mem_replication_backlog:1048576 mem_clients_slaves:33844 mem_clients_normal:151226 mem_aof_buffer:0 mem_allocator:libc active_defrag_running:0 lazyfree_pending_objects:0 # Persistence loading:0 # 服務(wù)器是否正在載入持久化文件 rdb_changes_since_last_save:1 # 距離最后一次成功創(chuàng)建持久化文件之后,改變了多少個(gè)鍵值 rdb_bgsave_in_progress:0 # 服務(wù)器是否正在創(chuàng)建RDB文件 rdb_last_save_time:1585421263 # 最近一次成功創(chuàng)建RDB文件的UNIX時(shí)間 rdb_last_bgsave_status:ok # 最后一次創(chuàng)建RDB文件的結(jié)果是成功還是失敗 rdb_last_bgsave_time_sec:0 # 最后一次創(chuàng)建RDB文件耗費(fèi)的秒數(shù) rdb_current_bgsave_time_sec:-1 # 記錄當(dāng)前創(chuàng)建RDB作已經(jīng)耗費(fèi)了多長(zhǎng)時(shí)間(單位為秒) rdb_last_cow_size:0 aof_enabled:0 # AOF是否處于打開狀態(tài) aof_rewrite_in_progress:0 # 服務(wù)器是否正在創(chuàng)建AOF文件 aof_rewrite_scheduled:0 # 是否需要執(zhí)行預(yù)約的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 # 最后一次寫入結(jié)果 aof_last_cow_size:0 # Stats (可以不做了解) total_connections_received:9 total_commands_processed:720 instantaneous_ops_per_sec:6 total_net_input_bytes:34197 total_net_output_bytes:229238 instantaneous_input_kbps:0.34 instantaneous_output_kbps:1.19 rejected_connections:0 sync_full:2 # 主從完全同步成功次數(shù) sync_partial_ok:0 # 主從部分同步成功次數(shù) sync_partial_err:0 # 主從部分同步失敗次數(shù) expired_keys:0 # 運(yùn)行以來過期的key的數(shù)量 expired_stale_perc:0.00 # 過期的比率 expired_time_cap_reached_count:0 # 過期計(jì)數(shù) evicted_keys:0 keyspace_hits:1 keyspace_misses:1 pubsub_channels:1 pubsub_patterns:0 latest_fork_usec:278 migrate_cached_sockets:0 slave_expires_tracked_keys:0 active_defrag_hits:0 active_defrag_misses:0 active_defrag_key_hits:0 active_defrag_key_misses:0 # Replication(master節(jié)點(diǎn)) role:master # 角色 master和slave connected_slaves:2 # slave節(jié)點(diǎn)數(shù) slave0:ip=127.0.0.1,port=63791,state=online,offset=20163,lag=1 # 從節(jié)點(diǎn)1 slave1:ip=127.0.0.1,port=63792,state=online,offset=20163,lag=0 # 從節(jié)點(diǎn)2 master_replid:895f219aa1e7ed5ecda50dcb1f77eea9f1ef9c3d # 主實(shí)例啟動(dòng)隨機(jī)字符串 master_replid2:0000000000000000000000000000000000000000 # 主實(shí)例啟動(dòng)隨機(jī)字符串2 master_repl_offset:20163 # 主從同步偏移量,此值如果和上面的offset相同說明主從一致沒延遲,與master_replid可被用來標(biāo)識(shí)主實(shí)例復(fù)制流中的位置。 second_repl_offset:-1 # 主從同步偏移量2,此值如果和上面的offset相同說明主從一致沒延遲 repl_backlog_active:1 # 復(fù)制積壓緩沖區(qū)是否開啟 repl_backlog_size:1048576 # 復(fù)制積壓緩沖大小 repl_backlog_first_byte_offset:1 # 復(fù)制緩沖區(qū)里偏移量的大小 repl_backlog_histlen:20163 # 此值等于 master_repl_offset - repl_backlog_first_byte_offset,該值不會(huì)超過repl_backlog_size的大小 # Replication(slave節(jié)點(diǎn)) role:slave # 角色 master和slave master_host:127.0.0.1 # master節(jié)點(diǎn)IP master_port:6379 # master節(jié)點(diǎn)端口 master_link_status:up # master通信 master_last_io_seconds_ago:1 # 主庫(kù)多少秒未發(fā)送數(shù)據(jù)到從庫(kù) master_sync_in_progress:0 # 從服務(wù)器是否在與主服務(wù)器進(jìn)行同步 slave_repl_offset:42262 # slave復(fù)制偏移量 slave_priority:100 # slave優(yōu)先級(jí) slave_read_only:1 # 從庫(kù)是否設(shè)置只讀 connected_slaves:0 # 連接的slave實(shí)例個(gè)數(shù) master_replid:895f219aa1e7ed5ecda50dcb1f77eea9f1ef9c3d master_replid2:0000000000000000000000000000000000000000 master_repl_offset:42262 # master偏移量,與slave_repl_offset相同則表示同步完整 second_repl_offset:-1 repl_backlog_active:1 # 復(fù)制積壓緩沖區(qū)是否開啟 repl_backlog_size:1048576 # 復(fù)制積壓緩沖大小 repl_backlog_first_byte_offset:1 # 復(fù)制緩沖區(qū)里偏移量的大小 repl_backlog_histlen:42262 # 此值等于 master_repl_offset - repl_backlog_first_byte_offset,該值不會(huì)超過repl_backlog_size的大小 # CPU used_cpu_sys:0.104404 # 將所有redis主進(jìn)程在核心態(tài)所占用的CPU時(shí)求和累計(jì)起來 used_cpu_user:0.079472 # 將所有redis主進(jìn)程在用戶態(tài)所占用的CPU時(shí)求和累計(jì)起來 used_cpu_sys_children:0.002037 # 將后臺(tái)進(jìn)程在核心態(tài)所占用的CPU時(shí)求和累計(jì)起來 used_cpu_user_children:0.000648 # 將后臺(tái)進(jìn)程在用戶態(tài)所占用的CPU時(shí)求和累計(jì)起來 # Cluster cluster_enabled:0 # 實(shí)例是否啟用集群模式 # Keyspace db0:keys=1,expires=0,avg_ttl=0 # db0的key的數(shù)量,以及帶有生存期的key的數(shù),平均存活時(shí)間


          【本文地址】

          公司簡(jiǎn)介

          聯(lián)系我們

          今日新聞

          推薦新聞

          專題文章
            CopyRight 2018-2019 實(shí)驗(yàn)室設(shè)備網(wǎng) 版權(quán)所有
            黄色免费网站在线看,韩国精品在线观看,韩国美女一区二区,99国产热 盐津县| 珲春市| 噶尔县| 蒙城县| 乌恰县| 谢通门县| 儋州市| 阿拉善左旗| 甘肃省| 绥滨县| 台安县| 白水县| 中超| 深圳市| 邮箱| 洪江市| 磐石市| 大港区| 定安县| 高清| 陵川县| 长岭县| 梅河口市| 台山市| 永修县| 福建省| 新宾| 华坪县| 扎兰屯市| 福贡县| 桂阳县| 威远县| 安塞县| 封开县| 格尔木市| 乌兰察布市| 东辽县| 鄂伦春自治旗| 绥化市| 旬邑县| 英吉沙县| http://444 http://444 http://444 http://444 http://444 http://444