精华内容
下载资源
问答
  • 一主二从三哨兵
    2021-10-28 21:48:21

    Redis集群方案(高可用)之哨兵模式(一主二从三哨兵)

    Linux:conts7
    
    Redis版本: 5.0.14
        官网下载网页链接:https://redis.io/download
    
    第三方Redis连接工具推荐:RedisDesktopManager
        官网下载:https://redisdesktop.com/download
    

    1 一主二从三哨兵介绍

    一主二从三哨兵,1个master主节点,2个slave从节点,对所有3个Redis配置sentinel哨兵模式。 当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性。

    哨兵的主要功能:

    1.集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
    2.消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
    3.故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
    4.配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。
    PS:根据推举机制,集群中哨兵数量最好为奇数(3、5....)
    

    一主二从三哨兵优缺点:

    优点:能满足高可用,且在满足高可用的情况下使用服务器资源最少(相较于主从与集群模式)
    缺点:但是选举时会间断。扩展难,有性能瓶颈。--(每台机器上的缓存数据都是一样的,受制于单台机器的机器配置)
    

    2 一主二从三哨兵搭建

    环境:

    IP地址端口角色Redis版本
    192.168.2.2036379redis-master,sentinel5.0.14
    192.168.2.2056379redis-slave1,sentinel5.0.14
    192.168.2.2066379redis-slave2,sentinel5.0.14

    Redis安装见:[Linux安装Redis教程](https://github.com/zlk-github/common-test/blob/master/common-redis-test/README-INIT.md# Linux安装Redis教程)

    2.1 配置Redis主节点(redis-master)

    2.1.1 主Redis配置文件redis.conf

    vi redis.conf
    

    redis.conf修改内容如下:

    bind 0.0.0.0            # 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind 192.168.2.203
    daemonize yes             # 允许redis后台运行
    logfile "/var/log/redis.log"    # 设置redis日志存放路径
    requirepass "123456"        # 设置redis密码
    protected-mode no      # 设置为no,允许外部网络访问
    port 6376             # 修改redis监听端口(可以自定义)
    pidfile /var/run/redis.pid  # pid存放目录
    dir /usr/local/redis/redis-5.0.14/tmp   # 工作目录,需要创建好目录,可自定义
    masterauth 123456    # 主从同步master的密码
    

    2.1.2 主Redis修改Sentinel(哨兵)配置

    vi sentinel.conf
    

    sentinel.conf修改内容如下:

    
    port 2700 # 修改Sentinel监听端口
    daemonize yes  # 允许Sentinel后台运行     
    logfile "/var/log/redis-sentinel.log"   # 设置Sentinel日志存放路径
    dir /usr/local/redis/redis-5.0.14/tmp   # 工作目录,需要创建好目录,可自定义
    
    # redis01:master名称可自定义
    # 192.168.2.203 6379 :redis主节点IP和端口
    # 2 :表示多少个Sentinel认为redis主节点失效时,才算真正失效
    sentinel monitor redis01 192.168.2.203 6379 2    # Sentinel监听redis主节点
    
    # 配置失效时间,master会被这个sentinel主观地认为是不可用的,单位毫秒      
    sentinel down-after-milliseconds redis01 10000
            
    # 若sentinel在该配置值内未能完成master/slave自动切换,则认为本次failover失败。        
    sentinel failover-timeout redis01 60000
    
    # 在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步。
    sentinel parallel-syncs redis01 2
    
    # 设置连接master和slave时的密码,注意的是sentinel不能分别为master和slave设置不同的密码,因此master和slave的密码应该设置相同
    sentinel auth-pass redis01 123456
    

    注:注意:含有mymaster的配置,都必须放置在sentinel monitor mymaster 192.168.2.203 6379 2之后,否则会出现问题

    2.2 配置Redis从节点

    从节点1(redis-slave1)与从节点2(redis-slave1)

    2.2.1 从节点Redis配置文件redis.conf

    复制主节点的redis.conf,修改replicaof与bind。

    redis-slave1对应redis.conf

    # 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind  192.168.2.205 
    bind 0.0.0.0            
    # 主库为主虚拟机1的地址
    replicaof 192.168.2.203 6379
    

    redis-slave2对应redis.conf

    # 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind  192.168.2.205 
    bind 0.0.0.0            
    # 主库为主虚拟机1的地址
    replicaof 192.168.2.203 6379
    

    2.2.2 从Redis修改Sentinel(哨兵)配置

    复制主节点的sentinel.conf即可。需要的话可以改 bind 从节点本机id

    # 表示redis允许所有地址连接。默认127.0.0.1,仅允许本地连接。也可以bind  192.168.2.205 
    bind 0.0.0.0  
    

    3 启动Redis

    3.1 设置Redis开机启动

    将Redis启动与配置路径添加到系统 /etc/rc.d/rc.local后保存。

    进入编辑: vim /etc/rc.d/rc.local
        添加如下内容(redis的bin目录启动相关与配置文件目录):
        /usr/local/redis/redis-5.0.14/bin/redis-server  /usr/local/redis/redis-5.0.14/etc/redis.conf
        /usr/local/redis/redis-5.0.14/bin/redis-sentinel  /usr/local/redis/redis-5.0.14/etc/sentinel.conf
    

    3.2 设置软链接,方便启动服务

    ln -s /usr/local/redis/redis-5.0.14/bin/redis-server /usr/bin/redis-server
    ln -s /usr/local/redis/redis-5.0.14/bin/redis-cli /usr/bin/redis-cli
    ln -s /usr/local/redis/redis-5.0.14/bin/redis-sentinel /usr/bin/redis-sentinel
    

    3.2 Redis集群启动

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    启动Redis集群
    1.启动Redis,顺序主->从
    redis-server /usr/local/redis/redis-5.0.14/etc/redis.conf
    
    2.启动Sentinel,顺序主->从
    redis-sentinel /usr/local/redis/redis-5.0.14/etc/sentinel.conf
    

    4访问&验证Redis集群

    4.1 访问redis主节点(redis-master)

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456
    
    查看集群:info replication
    

    master集群结果如下:

      [root@localhost bin]# redis-cli -h 127.0.0.1 -p 6379 -a 123456
      Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
      127.0.0.1:6379> info replication
      # Replication
      # 个人注释:当前节点为主节点
      role:master
      # 个人注释:从节点2个,192.168.2.205 6379与192.168.2.206 6379
      connected_slaves:2 
      slave0:ip=192.168.2.206,port=6379,state=online,offset=167962,lag=0
      slave1:ip=192.168.2.205,port=6379,state=online,offset=167684,lag=1
      master_replid:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c
      master_replid2:0000000000000000000000000000000000000000
      master_repl_offset:167962
      second_repl_offset:-1
      repl_backlog_active:1
      repl_backlog_size:1048576
      repl_backlog_first_byte_offset:1
      repl_backlog_histlen:167962
    

    4.2 访问redis从节点1(redis-slave1)

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456
    
    查看集群:info replication
    

    redis-slave1集群结果如下:

    127.0.0.1:6379> info replication
    # Replication
     # 个人注释:当前节点为从节点
    role:slave
    # 个人注释:主节点192.168.2.203 6379
    master_host:192.168.2.203
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:1
    master_sync_in_progress:0
    slave_repl_offset:249823
    slave_priority:100
    # 个人注释:从节点只读
    slave_read_only:1
    connected_slaves:0
    master_replid:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:249823
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:249823
    

    4.3 访问redis从节点2(redis-slave2)

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456
    
    查看集群:info replication
    

    redis-slave2集群结果如下:

    127.0.0.1:6379> info replication
    # Replication
     # 个人注释:当前节点为从节点
    role:slave
    # 个人注释:主节点192.168.2.203 6379
    master_host:192.168.2.203
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:0
    master_sync_in_progress:0
    slave_repl_offset:291664
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:291664
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:183
    repl_backlog_histlen:291482
    

    4.4 从节点只读测试(redis-slave2)

    哨兵模式:从节点允许读,不允许写入。

    127.0.0.1:6379> set key 123456
    (error) READONLY You can't write against a read only replica.
    

    4.5 主节点写入,复制到从节点

    redis-master

    127.0.0.1:6379> set key1001 600
    OK
    

    redis-slave1

    127.0.0.1:6379> get key1001
    "600"
    

    redis-slave2

    127.0.0.1:6379> get key1001
    "600"
    

    4.6 验证Redis故障转移

    4.6.1 停止主节点192.168.2.203(redis-master)

    进入目录:  cd /usr/local/redis/redis-5.0.14/bin
    
    停止服务(密码123456): redis-cli -a 123456 shutdown    (注:不要使用kill -9 PID,可能导致备份丢数据)
    

    4.6.2 查看主节点(redis-slave1与redis-slave2)

    原来redis-slave1

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456
    
    查看集群:info replication
    

    结果如下,192.168.2.205(原来从节点)变为了主节点。从节点只剩下192.168.2.206。 原来主节点192.168.2.203被剔除。

    192.168.2.205集群信息。

    127.0.0.1:6379> info replication
    # Replication
    role:master
    connected_slaves:1
    slave0:ip=192.168.2.206,port=6379,state=online,offset=18702889,lag=1
    master_replid:10dc8efe5dca92037d2cc945fd16a76981afec85
    master_replid2:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c
    master_repl_offset:18702889
    second_repl_offset:18664112
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:17654314
    repl_backlog_histlen:1048576
    

    192.168.2.206集群信息:

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456
    
    查看集群:info replication
    

    结果如下,192.168.2.205(原来从节点1)变为了主节点。 从节点192.168.2.206还是从节点2。

    192.168.2.206集群信息。

    127.0.0.1:6379> info replication
    # Replication
    role:slave
    master_host:192.168.2.205
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:0
    master_sync_in_progress:0
    slave_repl_offset:18826183
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:10dc8efe5dca92037d2cc945fd16a76981afec85
    master_replid2:f259bbbd3b0b0c3439460c9e2f666dc68ac6166c
    master_repl_offset:18826183
    second_repl_offset:18664112
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:17777608
    repl_backlog_histlen:1048576
    

    4.6.1 启动192.168.2.203(原来的主节点redis-master)

    进入bin目录(设置软应用不需要): cd /usr/local/redis/redis-5.0.14/bin
    
    启动服务:redis-server /usr/local/redis/redis-5.0.14/etc/redis.conf
    
    进入redis-cli: redis-cli -h 127.0.0.1 -p 6379 -a 123456
    
    查看集群:info replication
    

    192.168.2.203(原来主节点)现在变为了从节点。主节点由变成原来的192.168.2.206(原来的从节点)。

    127.0.0.1:6379> info replication
    # Replication
    role:slave
    master_host:192.168.2.205
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:2
    master_sync_in_progress:0
    slave_repl_offset:18780158
    slave_priority:100
    slave_read_only:1
    connected_slaves:0
    master_replid:10dc8efe5dca92037d2cc945fd16a76981afec85
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:18780158
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:18771309
    repl_backlog_histlen:8850
    

    5 Springboot2.0 集成一主二从三哨兵

    参考

    Redis集群 https://www.cnblogs.com/yufeng218/p/13688582.html
    
    Redis官网 https://www.redis.net.cn/tutorial/3501.html || https://redis.io/download
    
    Redis源码地址:https://github.com/redis/redis
    更多相关内容
  • 这是本人在工作中搭建集群的实践经验,当时遇到很多问题,困扰了我好久,最后查看了好多文章成功解决所有问题,主从集群,哨兵监听都成功。现在分享出来,我就以台服务器模拟搭建三台服务器的集群。请务必阅读每...
  • Redis哨兵模式(一主二从三哨兵

    千次阅读 2022-04-25 18:31:33
    目录环境:安装redis:使用Redis主从复制的作用:配置redis一主二从:redis启动前的准备工作:配置redis三哨兵: 环境: 环境:redis6.2.6 linux虚拟机一台,contos7的 一主两从三哨兵集群,当master节点宕机时,...

    一、redis环境:

    环境:redis6.2.6
    linux虚拟机一台,contos7;

    二、哨兵介绍:

    1.一主二从三哨兵理论图:
    在这里插入图片描述

    一主两从三哨兵集群,当master节点宕机时,通过哨兵(sentinel)重新推选出新的master节点,保证集群的可用性。

    2.哨兵的主要功能:
    1.集群监控:负责监控 Redis master 和 slave 进程是否正常工作。
    2.消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。
    3.故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。
    4.配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。

    PS:根据推举机制,集群中哨兵数量最好为奇数(3、5…)

    3.哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。

    • 故障转移时,判断一个 master node 是否宕机了,需要大部分的哨兵都同意才行,涉及到了分布式选举的问题。
    • 即使部分哨兵节点挂掉了,哨兵集群还是能正常工作的,因为如果一个作为高可用机制重要组成部分的故障转移系统本身是单点的,那就很坑爹了。

    4.哨兵的核心知识:

    • 哨兵至少需要 3 个实例,来保证自己的健壮性。
    • 哨兵 + redis 主从的部署架构,是不保证数据零丢失的,只能保证 redis 集群的高可用性
    • 对于哨兵 + redis 主从这种复杂的部署架构,尽量在测试环境和生产环境,都进行充足的测试和演练。

    三、安装redis:

    此处省略redis的安装。

    四、使用Redis主从复制的作用:

    主从复制,是指将一台Redis主节点服务器的数据,复制到其他的Redis从节点服务器。

    主节点称为(master/leader),从节点称为(slave/follower);

    1,数据冗余:主从复制实现了数据的热备份,这也是持久化实现的另一种方式。

    2,故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。

    3,读写分离:master服务主要用来写,slave服务主要用来读数据。可以提高服务器的负载能力,可以根据需求的变化,添加从节点的数量。

    4,负载均衡:同时配合读写分离,由主节点提供写服务,从节点提供读服务,分担服务器的负载。在写少读多的情况下,通过多个从节点分担读负载,能够大大提高Redis服务的并发量和负载。

    5,高可用的基石,主从复制是哨兵和集群模式能够实施的基础。

    五、配置redis一主二从:

    在正常的生产中我们是准备多台服务器,比如三台,每台都在各自的linux系统中安装redis。

    但是此处为了演示方便,我使用一台电脑安装虚拟机,在虚拟机上安装三份redis服务,来模拟一主二从的效果。

    第一步:修改原redis.conf配置文件:

    redis.conf配置文件采用默认的混合持久化,也可以采用单独的RDB持久化,因为主从复制的本质是RDB方式,所以要有RDB方式参与即可。

    原redis.conf配置文件需要修改的几个地方:

    1.先在网络部分注释掉单机连接那一行,即注释掉bind 127.0.0.1 
    2.同样我们要将后台运行打开:daemonize no,设置为yes。
    3.将 保护模式关闭:protected-mode yes 改为:protected-mode no 
    
    
    4.打开RDB持久化配置:
    #RDB持久化策略 默认三种方式,[900秒内有1次修改],
    #[300秒内有10次修改],[60秒内有10000次修改]即触发RDB持久化,
    #我们可以手动修改该参数或新增策略
    save 900 1
    save 300 10
    save 60 10000 
    #RDB文件名
    dbfilename dump.rdb
    #RDB文件存储路径
    dir ./
    策略配置:
    #在seconds秒内有changes次数据修改就触发RDB持久化
    
    
    5.开启AOF持久化配置
    appendonly yes
    #AOF文件名
    appendfilename "appendonly.aof"
    #AOF文件存储路径 与RDB是同一个参数,共用一个文件路径
    dir ./  #即bin目录下
    #AOF策略,一般都是选择第一种[always:每个命令都记录],
    #[everysec:每秒记录一次],[no:看机器的心情高兴了就记录,linux一般半个小时同步一次]
    #appendfsync always
    appendfsync everysec
    # appendfsync no
    #aof文件大小比起上次重写时的大小,增长100%(配置可以大于100%)时,触发重写。
    #[假如上次重写后大小为10MB,当AOF文件达到20MB时也会再次触发重写,以此类推
    auto-aof-rewrite-percentage 100 
    #aof文件大小超过64MB*2时,触发重写,
    #为何要乘以2,因为auto-aof-rewrite-percentage 100 是翻倍即100%,
    #达到翻倍时才重写
    auto-aof-rewrite-min-size 64mb 
    
    6.打开混合持久化:
    #6.aof-use-rdb-preamble yes # 检查混合持久化是否打开,redis5.0后默认开启
    
    

    第二步:将修改后的redis.conf配置文件复制出来三份:

    1.进入redis默认的安装路径:cd /usr/local/bin
    ll #查看文件夹内容
    cp redis.conf redis_bk.conf #尽量备份一个配置文件,防止修改错了,可以重新用
    cp redis.conf redis6379.conf
    cp redis.conf redis6380.conf
    cp redis.conf redis6381.conf

    第三步:分别修改三个配置文件:

    vim redis6379.conf
    修改的内容:
    pidfile /var/run/redis_6379.pid
    port 6379
    dbfilename dump6379.rdb

    vim redis6380.conf
    修改的内容:
    pidfile /var/run/redis_6380.pid
    port 6380
    dbfilename dump6380.rdb

    vim redis6381.conf
    修改的内容:
    pidfile /var/run/redis_6381.pid
    port 6381
    dbfilename dump6381.rdb

    redis启动前的准备工作:

    查看虚拟机防火墙是否关闭,需要关闭防火墙
    1:查看防火状态

    systemctl status firewalld

    service iptables status

    2:暂时关闭防火墙

    systemctl stop firewalld

    service iptables stop

    3:永久关闭防火墙

    systemctl disable firewalld

    chkconfig iptables off

    关闭后再查看防火墙状态

    三:开放指定端口6379:

    开放指定端口的方式一:
    在linux中执行: /sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
    redis默认端口号6379是不允许进行远程连接的,所以在防火墙中设置6379开启远程服务;

    开放指定端口的方式二:
    先开启防火墙才能开放指定端口的:systemctl start firewalld
    firewall-cmd --zone=public --add-port=6379/tcp --permanent

    第四步:启动三台redis服务器,并查看是否启动成功:

    redis-server redis6379.conf
    redis-server redis6380.conf
    redis-server redis6381.conf
    ps -ef | grep redis

    第五步:配置从库不配置主库 :
    先连接上redis客户端:

    redis-cli -p 6380

    然后将6380机器配置成从机:

    slaveof 主机ip 主机端口号
    #slaveof 127.0.0.1 6379
    info replication
    在这里插入图片描述

    然后将6381机器配置成从机:

    redis-cli -p 6381
    #slaveof 主机ip 主机端口号
    slaveof 127.0.0.1 6379
    info replication
    在这里插入图片描述

    在主机查看从机信息:发现配置成功。

    redis-cli -p 6379
    info replication
    在这里插入图片描述

    六、配置redis三哨兵:

    将官方自带的sentinel.conf(此文件在redis的源码目录下,即解压路径下)复制到/usr/local/bin:

    在这里插入图片描述

    然后复制出来三份:

    在这里插入图片描述

    修改的内容如下:

    vim sentinel0.conf
    文件修改内容如下:
    protected-mode no
    daemonize yes
    port 26379 #sentinel 端口
    dir “/usr/local/bin”
    sentinel monitor mymaster 127.0.0.1 6379 2

    然后分别修改sentinel1.conf信息如下:
    protected-mode no
    daemonize yes
    port 26380 # sentinel 端口,因为我们在一台虚拟机上,所以端口要不一样
    dir “/usr/local/bin”
    sentinel monitor mymaster 127.0.0.1 6379 2 #这里的mymaster 两个副本的要一样,mymaster同一个主机名

    然后分别修改sentinel2.conf信息如下:
    protected-mode no
    daemonize yes
    port 26381 # sentinel 端口,因为我们在一台虚拟机上,所以端口要不一样
    dir “/usr/local/bin”
    sentinel monitor mymaster 127.0.0.1 6379 2 #这里的mymaster 两个副本的要一样

    配置文件详解
    哨兵的配置主要就是修改sentinel.conf配置文件中的参数,在Redis安装目录即可看到此配置文件,各参数详解如下:

    # 哨兵sentinel实例运行的端口,默认26379  
    port 26379
    # 哨兵sentinel的工作目录
    dir ./
    # 是否开启保护模式,默认开启。
    protected-mode:no
    # 是否设置为后台启动。
    daemonize:yes
    
    # 哨兵sentinel的日志文件
    logfile:./sentinel.log
    
    # 哨兵sentinel监控的redis主节点的 
    ## ip:主机ip地址
    ## port:哨兵端口号
    ## master-name:可以自己命名的主节点名字
    ## quorum:当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 
    #客观上认为主节点失联了  
    # sentinel monitor <master-name> <ip> <redis-port> <quorum>  
    sentinel monitor mymaster 127.0.0.1 6379 2
    
    # 当在Redis实例中开启了requirepass,所有连接Redis实例的客户端都要提供密码。
    # sentinel auth-pass <master-name> <password>  
    sentinel auth-pass mymaster 123456  
    
    # 指定主节点应答哨兵sentinel的最大时间间隔,超过这个时间,哨兵主观上认为主节点下线,
    #默认30秒  
    # sentinel down-after-milliseconds <master-name> <milliseconds>
    sentinel down-after-milliseconds mymaster 30000  
    
    # 指定了在发生failover主备切换时,最多可以有多少个slave同时对新的master进行同步。
    #这个数字越小,完成failover所需的时间就越长;反之,但是如果这个数字越大,就意味着
    #越多的slave因为replication而不可用。可以通过将这个值设为1,来保证每次只有一个slave,
    #处于不能处理命令请求的状态。
    # sentinel parallel-syncs <master-name> <numslaves>
    sentinel parallel-syncs mymaster 1  
    
    # 故障转移的超时时间failover-timeout,默认三分钟,可以用在以下这些方面:
    ## 1. 同一个sentinel对同一个master两次failover之间的间隔时间。  
    ## 2. 当一个slave从一个错误的master那里同步数据时开始,直到slave被纠正为从正确
    #的master那里同步数据时结束。  
    ## 3. 当想要取消一个正在进行的failover时所需要的时间。
    ## 4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,
    #即使过了这个超时,slaves依然会被正确配置为指向master,
    但是就不按parallel-syncs所配置的规则来同步数据了
    # sentinel failover-timeout <master-name> <milliseconds>  
    sentinel failover-timeout mymaster 180000
    
    # 当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),
    #将会去调用这个脚本。一个脚本的最大执行时间为60s,如果超过这个时间,
    #脚本将会被一个SIGKILL信号终止,之后重新执行。
    # 对于脚本的运行结果有以下规则:  
    ## 1. 若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10。
    ## 2. 若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。  
    ## 3. 如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
    # sentinel notification-script <master-name> <script-path>  
    sentinel notification-script mymaster /var/redis/notify.sh
    
    # 这个脚本应该是通用的,能被多次调用,不是针对性的。
    # sentinel client-reconfig-script <master-name> <script-path>
    sentinel client-reconfig-script mymaster /var/redis/reconfig.sh
    

    最后是先启动三个服务,然后起送三个哨兵,然后客户端;
    启动哨兵:

    redis-sentinel sentinel0.conf
    redis-sentinel sentinel1.conf
    redis-sentinel sentinel2.conf

    启动后查看sentinel信息:redis-cli -p sentinel的端口号

    redis-cli -p 26379
    info sentinel

    在这里插入图片描述

    展开全文
  • 主要介绍了基于Docker搭建Redis一主从三哨兵的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 台主机两台机,三台哨兵主机,如果实例宕机,哨兵将将机升级为主机。实现高可用。 配置方法 1.IP地址配置如下 127.0.0.1 6001 127.0.0.1 6002 127.0.0.1 6003 哨兵 127.0.0.1 16001 ...

    概述

    在部署redis 的时候,如果redis宕机,缓存将不可用,redis提供了哨兵模式保证redis实现高可用。

    即一台主机两台从机,三台哨兵主机,如果主实例宕机,哨兵将将一台从机升级为主机。实现高可用。

    配置方法

    1.IP地址配置如下

    主 127.0.0.1 6001

    从 127.0.0.1 6002

    从 127.0.0.1 6003

    哨兵

    127.0.0.1 16001

    127.0.0.1 16002

    127.0.0.1 16002

    2.修改配置

    将 redis.con 拷贝两份 redis1.conf redis2.conf

    修改配置如下:

    编辑 redis.conf

    bind 192.168.1.88 127.0.0.1

    protected-mode no

    daemonize yes

    port 6001

    pidfile "/var/run/redis_6001.pid"

    编辑 redis1.conf

    bind 192.168.1.88 127.0.0.1

    protected-mode no

    daemonize yes

    port 6002

    pidfile "/var/run/redis_6002.pid"

    slaveof 127.0.0.1 6001

    编辑 redis2.conf 

    bind 192.168.1.88 127.0.0.1

    protected-mode no

    port 6003

    daemonize yes

    pidfile "/var/run/redis_6003.pid"

    slaveof 127.0.0.1 6001

    编辑 哨兵文件

    将哨兵文件拷贝两份

    sentinel.conf sentinel1.conf sentinel2.conf

    编辑 sentinel.conf

    port 16001

    daemonize yes

    sentinel monitor mymaster 127.0.0.1 6001 2

    编辑 sentinel1.conf

    port 16002

    daemonize yes

    sentinel monitor mymaster 127.0.0.1 6001 2

    编辑 sentinel2.conf

    port 16003

    daemonize yes

    sentinel monitor mymaster 127.0.0.1 6001 2

    配置完成

    注意

    这里如果需要使用哨兵模式连接的话,注意不能使用 127.0.0.1 需要使用对外的IP地址。

    3.启动 redis

    ./bin/redis-server etc/redis.conf 

    ./bin/redis-server etc/redis1.conf

    ./bin/redis-server etc/redis2.conf  

    启动哨兵

    ./bin/redis-sentinel ./etc/sentinel.conf 

    ./bin/redis-sentinel ./etc/sentinel1.conf 

    ./bin/redis-sentinel ./etc/sentinel2.conf 

    验证

    新开一个命令行窗口进入redis的src目录,用redis-cli工具登录其中一个哨兵

    ./bin/redis-cli -p 16001

    连接成功后运行如下命令

    sentinel master mymaster

    我们可以看到主机端口为 6001

    我们手工关闭 6001的实例。

    可以看到 6001 断开了。

    可以看到6002 变为主机了。可以看到 6002 的配置文件 slaveof 127.0.0.1 6001 没有了。

    测试设置数据:

    连接到 6002

    ./bin/redis-cli -p 6002

    set name redis

    连接到6001

    get name 

    可以获取到数据 redis

    我们连接到6003 ,设置数据,我们可以从机是不能设置数据的。

    sentinel 作用

    A、Master 状态监测

    B、如果Master 异常,则会进行Master-slave 转换,将其中一个Slave作为Master,将之前的Master作为Slave 

    C、Master-Slave切换后,redis.conf、redis1.conf和redis2.conf,sentinel.conf 的内容都会发生改变,sentinel.conf的监控目标会随之调换 

    sentinel monitor mymaster 127.0.0.1 6002 2

    来源:redis 的一主二从三哨兵模式 - 自由港 - 博客园 (cnblogs.com)

    展开全文
  • Redis集群、一主二从三哨兵的搭建

    Redis集群至少需要3个master节点,1个master节点需要对应一个slave节点,所以redis集群至少需要6个节点

    至少需要3个maser节点原因:master节点的选举需要大半数的集群master节点同意才能选举成功,如果只有2个master节点,当其中一个挂了,是达不到选举新master的条件的

    推荐节点数为奇数的原因:举个例子:3个master节点与4个master节点,同时都有2个master节点宕机,那么都不能进行选举新的master节点,但是3个master节点

    • Redis集群的搭建

    首先在自己的服务器上下载Redis

    参考文档:
    CentOS7(Linux)源码安装Redis - 腾讯云开发者社区-腾讯云

    (最后可以先不用设置密码,如果设置了,进入redis时不要忘记输入密码)

    环境搭建好了之后,就可以进行对redis单机集群的搭建了,因为是单机上,所以多创建几个redis节点,修改端口号(7001-7006),来充当集群节点

    1.我这里都是在/usr/local目录下进行的,创建一个redis-cluster文件夹,为了方便区分创建相对应端口号的文件夹

    2.将redis中bin目录复制到每个文件夹中

     

    bin目录中上面aof、rdb是持久化文件,在集群搭建成功之前请先删除,nodes-7001.conf是集群搭建成功后自动生成的

    3.然后进行对每个端口号里面的redis.conf配置文件进行修改

            port:修改为相对应的端口号

            cluster-enabled:修改为yes(redis服务器在启动时会根据cluster-enabled配置选项是否为yes来决定是否开启服务器的集群模式)

            cluster-config-file:修改为相对应的端口号

            pidfile:修改为相对应的端口号文件(服务器记录守护程序的进程id的文件)

            protected-mode:修改为no(关闭protected-mode模式,此时外部网络可以直接访问;开启protected-mode保护模式后,需配置bind ip或者设置访问密码)

    4.修改完配置文件后,启动7001-7006的redis节点:./redis-server redis.conf

    这里写了一个sh脚本用于快捷启动多个redis,内容如下

    cd 7001/bin 
    ./redis-server redis.conf
    cd ../../


    cd 7002/bin
    ./redis-server redis.conf
    cd ../../


    cd 7003/bin
    ./redis-server redis.conf
    cd ../../


    cd 7004/bin
    ./redis-server redis.conf
    cd ../../


    cd 7005/bin
    ./redis-server redis.conf
    cd ../../


    cd 7006/bin
    ./redis-server redis.conf
    cd ../../

     别忘了给脚本执行权限

    chmod +x start-all.sh

     解读:就是cd切换到不同的端口号目录下,然后使用命令启动redis

    5.可以使用 ps aux | grep redis来查看redis是否启动

    6.以上就是对redis节点的创建,然后切换到redis目录中bin文件下进行集群的搭建

     执行命令:

    ./redis-cli --cluster create --cluster-replicas 1 110.40.154.201:7001 110.40.154.201:7002 110.40.154.201:7003 110.40.154.201:7004 110.40.154.201:7005 110.40.154.201:7006

    中间的1表示比例,这样创建成功后,会默认是一主一从的形式

    执行完之后,中间会让你输入yes

     最后集群搭建成功

    如果输入完yes后中间一直是等待,则可能你的端口号没有全部开启,再开启7001-7006的同时也需要将17001-17006开启:redis集群不仅需要开通redis客户端连接的端口,而且需要开通集群总线端口,集群总线端口为redis客户端连接的端口 + 10000

    redis集群 Waiting for the cluster to join 一直等待_海拉姆的博客-CSDN博客

    以上就是对集群搭建的过程,最后可以测试一下,在7001的redis上存储,看是否能在其他节点上获取

    • 一主二从三哨兵搭建

     直接在redis的bin目录下进行配置,其中8001是主节点,8002、8003是从节点

    redis.conf的修改port、dbfilename、pidfile为对应的端口号

    启动三个redis服务

    ./redis-server redis8001.conf &

    可以开启三个客户端分别连接不同的redis

    ./redis-cli -h 127.0.0.1 -p 8001

     (如果设置了密码,别忘了输入密码: auth 密码)

    在8002、8003中输入

    slaveof 127.0.0.1 8001   //将8002、8003设置为8001的从库

     回到8001中输入

    info replication  //查看主从关系

     

    slaveof no one  //表示断开与主节点的主从关系

     以上就搭建好了一主二从,接下来是三哨兵

    也是在redis的bin目录下进行配置

     分别修改红框里的文件,redis自带有一个哨兵文件redis-sentinel,然后复制出来三个就好

    port 26379   //一次加一 别忘了开端口

    protected-mode no

    daemonize no

    sentinel monitor mymaster 127.0.0.1 8001 2

     哨兵的配置文件可以参考这个博客

    Redis学习之哨兵模式配置文件详解_倪家李子的博客-CSDN博客_redis哨兵模式配置文件

     然后分别开启这三个哨兵

    ./redis-sentinel sentinel1.conf

     到此三哨兵就搭建完毕

    最后进行测试

    8001正常时:

    8001的主从信息:

    8002的主从信息:

    8003的主从信息

    模拟8001宕机

    ./redis-cli -h 127.0.0.1 -p 8001 shutdown

     8003的主从信息:

    8002的主从信息:

    三个哨兵通过选举,将8003选举成为新的master (一下是三个哨兵进行的操作,看不懂。。。)

    展开全文
  • Redis Sentinel是Redis 的高可用性解决方案,由个或多个Sentinel(哨兵)实例组成。它可以监视任意多个服务器,以及这些服务器属下的所有服务器,并在被监视的服务器进入下线状态时,自动将下线服务器...
  • 文章目录一、前言二、docker-compose部署redis一主二从三哨兵模式docker-compose-redis-master-slave-sentinel.ymlredis.confredis-sentinel.conf三、测试四、其它解决情况1:端口映射问题解决情况2:redis由于安全...
  • Windows部署Redis哨兵
  • 说明当前安装部署指引只在一台宿主机服务器上启动个(一主二从)redis容器节点和三个哨兵容器节点。
  • Redis一主二从三哨兵的配置

    千次阅读 2022-04-17 09:51:45
    一主二从的搭建在前面已经介绍过了,请见https://blog.csdn.net/m0_51212267/article/details/123718396?spm=1001.2014.3001.5502 搭建完成后: 下面来介绍哨兵的配置和搭建 在myredis下建立个sentinel文件 ...
  • :搭建 下载redis安装包 启动redis服务 指定配置文件 启动哨兵服务 但是由于读写都在服务节点上,压力比较大,可以采用redis集群部署解决此问题,下章中讲解,谢谢大家 ...
  • 一、验证环境1、操作系统:win102、redis版本:redis-2.8.22、验证步骤:本次验证方案为:采用一主(master)二从(slave)(sentinel)的架构模式master ip:127.0.0.1 port:6379slave0 ip:127.0.0.1 port:6380slave1 ...
  • 一、准备环境 ...二、配置一主二从 (配置文件) redis.conf (master) bind 0.0.0.0 port 6379 daemonize yes ​ requirepass "123456" ​ logfile "/usr/local/redis/log/redis.log" dbfilename "te
  • 搭建redis集群,一主二从三哨兵

    千次阅读 2022-03-16 20:17:21
    如何安装redis本文就不做记录了 redis配置文件主要是修改以下几个点 port 6379(每个节点的端口号) ...然后将配置文件复制份,只是端口不同,在两个机的结尾添加句话 #表示当前节点为10.10.0.14 6379
  • 其中含有redis安装包,主从+哨兵配置,部署和启停脚本,需修改后再使用,修改的地方用中文标注
  • 哨兵配置文件 哨兵端口 master centos7 redis-5.0.12 192.168.17.128 6379 /home/redis redis.conf sentinel.conf 26379 slave1 centos7 redis-5.0.12 192.168.17.129 6379 /home/redis redis.conf sentinel....
  • centos7 搭建redis一主二从三哨兵 安装redis 下载安装包 wget https://download.redis.io/releases/redis-5.0.14.tar.gz #解压 tar -xvf redis-5.0.14.tar.gz 如果需要其他版本的redis可以到官网进行下载 编译 ...
  • Redis持久化和一主二从三哨兵

    千次阅读 2022-01-06 15:06:52
    3.哨兵模式(一主二从三哨兵)1.一主二从2.哨兵模式 1.Redis有哪些优缺点 优点 读写性能优异。 支持数据持久化,支持AOF和RDB两种持久化方式。 支持事务,Redis的所有操作都是原子性的,同时Redis还支持对几个操作...
  • 目录 环境: 摘要说明: 步骤: 、安装redis ...、主从配置 ...哨兵配置 ...redis主从配置:部署多...当master挂掉之后会slave中选出台作为master; 哨兵配置:当主从配置成功后,有个问题来了,如何监控...
  • 、单机安装 1.登录服务器输入命令:wget https://download.redis.io/releases/redis-5.0.14.tar.gz,给服务器下载安装包 下载很快 2.解压安装包:tar -xvfredis-5.0.14.tar.gz (这里执行了个cd opt 切换...
  • redis一主二从+三哨兵配置
  • Redis一主二从三哨兵

    2020-05-22 15:10:03
    下载完成后进行解压,然后复制两份作为成员,构成一主二从。在主服务器上使用一份,服务器上使用二份。 主从配置 主redis配置 编辑文件夹下redis.windows.conf文件,设置bind和port,因为要用
  • docker整合redis哨兵模式(一主二从三哨兵) Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都没有实现自动进行...
  • Redis搭建一主二从三哨兵总结文档,常见问题,配置文件
  • redis 2.8 以后提供了 Redis Sentinel 哨兵机制,如果实例宕机,哨兵机升级为主机,实现高可用 模式类型 主从模式(redis2.8版本之前的模式)、哨兵sentinel模式(redis2.8及之后的模式)、redis ...
  • Docker搭建Redis集群-Redis-Cluster、Redis-Cluster1.1 Redis配置文件、Docker Compose编排服务、集群配置四、集群测试4.1 查看集群通信是否正常4.2 测试简单存储4.3 查看集群状态4.4 查看slots分片4.5 查看...
  • 一、安装虚拟机 在VM上安装个虚拟机,centos下载地址https://www.centos.org/download/,步骤省略。 二、获取个虚拟机的地址(以下ip为...安装redis并配置一主二从 1)cd /usr/local 2)wget http://download.redi

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 17,118
精华内容 6,847
关键字:

一主二从三哨兵