您现在的位置是:网站首页> 编程资料编程资料
Redis哨兵模式介绍_Redis_
2023-05-27
505人已围观
简介 Redis哨兵模式介绍_Redis_
哨兵简介
主机"宕机"
- 将宕机的 master 下线
- 找一个 slave 作为 master
- 通知所有的 slave 连接新的 master
- 启动新的 master 和 slave
- 全量复制
*N+
部分复制*N
存在的问题:
- 谁来确认 master 宕机了
- 重新找一个新的 master ,怎么找法?
- 修改配置后,原来的 master 恢复了怎么办?
哨兵
哨兵(sentinal
)是一个分布式系统,用于对主从结构中的每台服务器进行监控
,当出现故障时通过投票机制选择
新的 master 并将所有的 slave 连接到新的 master。
哨兵的作用
- 监控
- 不断的检查 master 和 slave 是否正常运行
- master 存活检测、master 与 slave 运行情况检测
- 通知(提醒)
- 自动故障转移
- 断开 master 与 slave 连接,选取一个 slave 作为 master,将其他的 slave 连接到新的 master,并告知客户端新的服务器地址
注意:
- 哨兵也是一台
redis
服务器,只是不提供数据服务 - 通常哨兵配置的数量为
单数
启用哨兵模式
配置哨兵
配置一拖二的主从结构
配置三个哨兵(配置相同,端口不同)
- 参看
sentinel.conf
- 参看
启动哨兵
redis-sentinel sentinel-端口号.conf
哨兵配置项说明:
# 哨兵服务端口 port 26379 # 哨兵工作信息存储目录 dir /tmp # 监控 主 连接字符串 哨兵判挂标准(几个哨兵认定他挂了,就判定为主挂了,通常为哨兵数量的一半加一) sentinel monitor mymaster 127.0.0.1 6379 2 # 主 连接多长时间无响应,就认定它挂了(默认 30s) sentinel down-after-milliseconds mymaster 30000 # 主挂了之后,新的主上任同步数据的路线数量,数值越小,对服务器压力越小 sentinel parallel-syncs mymaster 1 # 新主同步数据时,多长时间同步完算有效 (默认 180s) sentinel failover-timeout mymaster 180000
主 redis-6379.conf
port 6379 daemonize no #logfile "6379.log" dir /redis-4.0.0/data dbfilename dump-6379.rdb rdbcompression yes rdbchecksum yes save 10 2 appendonly yes appendfsync always appendfilename appendonly-6379.aof bind 127.0.0.1 databases 16
从1 redis-6380.conf
port 6380 daemonize no #logfile "6380.log" dir /redis-4.0.0/data slaveof 127.0.0.1 6379
从2 redis-6381.conf
port 6381 daemonize no #logfile "6381.log" dir /redis-4.0.0/data slaveof 127.0.0.1 6379
哨兵1 sentinel-26379.conf
port 26379 dir /redis-4.0.0/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
哨兵2 sentinel-26380.conf
port 26380 dir /redis-4.0.0/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
哨兵3 sentinel-26381.conf
port 26381 dir /redis-4.0.0/data sentinel monitor mymaster 127.0.0.1 6379 2 sentinel down-after-milliseconds mymaster 30000 sentinel parallel-syncs mymaster 1 sentinel failover-timeout mymaster 180000
启动哨兵
redis-server /redis-4.0.0/conf/redis-6379.conf redis-server /redis-4.0.0/conf/redis-6380.conf redis-server /redis-4.0.0/conf/redis-6381.conf redis-sentinel /redis-4.0.0/conf/sentinel-26379.conf redis-sentinel /redis-4.0.0/conf/sentinel-26380.conf redis-sentinel /redis-4.0.0/conf/sentinel-26381.conf # 停止 主 Ctrl+C
官方原版配置文件:sentinel.conf
# Example sentinel.conf # *** IMPORTANT *** # # By default Sentinel will not be reachable from interfaces different than # localhost, either use the 'bind' directive to bind to a list of network # interfaces, or disable protected mode with "protected-mode no" by # adding it to this configuration file. # # Before doing that MAKE SURE the instance is protected from the outside # world via firewalling or other means. # # For example you may use one of the following: # # bind 127.0.0.1 192.168.1.1 # # protected-mode no # port# The port that this sentinel instance will run on port 26379 # By default Redis Sentinel does not run as a daemon. Use 'yes' if you need it. # Note that Redis will write a pid file in /var/run/redis-sentinel.pid when # daemonized. daemonize no # When running daemonized, Redis Sentinel writes a pid file in # /var/run/redis-sentinel.pid by default. You can specify a custom pid file # location here. pidfile /var/run/redis-sentinel.pid # Specify the log file name. Also the empty string can be used to force # Sentinel to log on the standard output. Note that if you use standard # output for logging but daemonize, logs will be sent to /dev/null logfile "" # sentinel announce-ip # sentinel announce-port # # The above two configuration directives are useful in environments where, # because of NAT, Sentinel is reachable from outside via a non-local address. # # When announce-ip is provided, the Sentinel will claim the specified IP address # in HELLO messages used to gossip its presence, instead of auto-detecting the # local address as it usually does. # # Similarly when announce-port is provided and is valid and non-zero, Sentinel # will announce the specified TCP port. # # The two options don't need to be used together, if only announce-ip is # provided, the Sentinel will announce the specified IP and the server port # as specified by the "port" option. If only announce-port is provided, the # Sentinel will announce the auto-detected local IP and the specified port. # # Example: # # sentinel announce-ip 1.2.3.4 # dir # Every long running process should have a well-defined working directory. # For Redis Sentinel to chdir to /tmp at startup is the simplest thing # for the process to don't interfere with administrative tasks such as # unmounting filesystems. dir /tmp # sentinel monitor # # Tells Sentinel to monitor this master, and to consider it in O_DOWN # (Objectively Down) state only if at least sentinels agree. # # Note that whatever is the ODOWN quorum, a Sentinel will require to # be elected by the majority of the known Sentinels in order to # start a failover, so no failover can be performed in minority. # # Replicas are auto-discovered, so you don't need to specify replicas in # any way. Sentinel itself will rewrite this configuration file adding # the replicas using additional configuration options. # Also note that the configuration file is rewritten when a # replica is promoted to master. # # Note: master name should not include special characters or spaces. # The valid charset is A-z 0-9 and the three characters ".-_". sentinel monitor mymaster 127.0.0.1 6379 2 # sentinel auth-pass # # Set the password to use to authenticate with the master and replicas. # Useful if there is a password set in the Redis instances to monitor. # # Note that the master password is also used for replicas, so it is not # possible to set a different password in masters and replicas instances # if you want to be able to monitor these instances with Sentinel. # # However you can have Redis instances without the authentication enabled # mixed with Redis instances requiring the authentication (as long as the # password set is the same for all the instances requiring the password) as # the AUTH command will have no effect in Redis instances with authentication # switched off. # # Example: # # sentinel auth-pass mymaster MySUPER--secret-0123passw0rd # sentinel auth-user # # This is useful in order to authenticate to instances having ACL capabilities, # that is, running Redis 6.0 or greater. When just auth-pass is provided the # Sentinel instance will authenticate to Redis using the old "AUTH " # method. When also an username is provided, it will use "AUTH ". # In the Redis servers side, the ACL to provide just minimal access to # Sentinel instances, should be configured along the following lines: # # user sentinel-user >somepassword +client +subscribe +publish \ # +ping +info +multi +slaveof +config +client +exec on # sentinel down-after-milliseconds # # Number of milliseconds the master (or any attached replica or sentinel) should # be unreachable (as in, not acceptable reply to PING, continuously, for the # specified period) in order to consider it in S_DOWN state (Subjectively # Down). # # Default is 30 seconds. sentinel down-after-milliseconds mymaster 30000 # requirepass # # You can configure Sentinel itself to require a password, however when doing # so Sentinel will try to authenticate with the same password to all the # other Sentinels. So you need to configure all your Sentinels in a given # group with the same "requirepass" password. Check the following documentation # for more info: https://redis.io/topics/sentinel # sentinel parallel-syncs # # How many replicas we can reconfigure to point to the new replica simultaneously # during the failover. Use a low number if you use the replicas to serve query # to avoid that all the replicas will be unreachable at about the same # time while performing the synchronization with the master. sentinel parallel-syncs mymaster 1 # sentinel failover-timeout # # Specifies the failover timeout in milliseconds. It is
相关内容
- Redis实现排名功能的示例代码_Redis_
- Redis命令处理过程源码解析_Redis_
- Redis+Lua脚本实现计数器接口防刷功能(升级版)_Redis_
- Spring Boot实战解决高并发数据入库之 Redis 缓存+MySQL 批量入库问题_Redis_
- 基于Redis zSet实现滑动窗口对短信进行防刷限流的问题_Redis_
- Redis exists命令bug分析(案例详解)_Redis_
- Spring+Redis+RabbitMQ开发限流和秒杀项目功能_Redis_
- 详解Redis 键和字符串常用命令_Redis_
- Redis Server启动过程的详细步骤_Redis_
- Redis分布式锁防止缓存击穿的实现_Redis_
点击排行
本栏推荐
