您现在的位置是:网站首页> 编程资料编程资料

Redis哨兵模式介绍_Redis_

2023-05-27 508人已围观

简介 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
                
                

-六神源码网