redis哨兵集群 2|0redis-cluster

上回说到redis主从同步时,master(主库)如果宕机了怎么解决...

我给出了一个手动解决的办法!

但实际上,如果你配置了Sentinel,它能自动发现master宕机并且进行自动切换slave(从库)变master 。

sentinel(哨兵)主要功能如下:

  • 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
  • 如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
  • 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

1|2安装配置


实验环境:CentOS7虚拟机一台

配置:

  一主(6379)两从(6380,6381)

  三个 sentinel 检测主节点(26379,26380,26381)

存放位置自定义,运行程序时切换到改文件即可。

在正式环境中,需按照公司需求,安装配置在不同的linux上。

具体步骤请参考上一篇博客 本篇博客不做详细讲解~

1,先准备三个redis实例,

redis哨兵集群
2|0redis-cluster redis-6379.conf
redis哨兵集群
2|0redis-cluster redis-6380.conf
redis哨兵集群
2|0redis-cluster redis-6381.conf
redis哨兵集群
2|0redis-cluster 附:redis.conf详解

2,启动三个数据库实例

# redis-server  redis-6379.conf
# redis-server  redis-6380.conf
# redis-server  redis-6381.conf

3,准备三个哨兵文件,监控主从架构

redis哨兵集群
2|0redis-cluster redis-26379.conf

注意:避免冲突,复制前删除注释

redis哨兵集群
2|0redis-cluster redis-26380.conf
redis哨兵集群
2|0redis-cluster redis-26381.conf

4,分别启动三个哨兵实例

# redis-sentinel redis-26379.conf 
# redis-sentinel redis-26380.conf 
# redis-sentinel redis-26381.conf

注意: 如果发现不成功,需要删掉所有的哨兵配置文件,从新来过

5,检查哨兵状态是否正常,

 
# redis-cli -p 26379 info sentinel  # 查看配置

# 配置如下表示正常
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
# 哨兵主节点名字叫做mymaster,状态ok,监控地址是127.0.0.1:6379,有两个从节点,3个哨兵
 

1|3故障实验


大致思路

  • 杀掉主节点的redis进程6379端口,观察从节点是否会进行新的master选举,进行切换
  • 重新恢复旧的“master”节点,查看此时的redis身份

1,首先查看三个redis的进程状态

ps -ef|grep redis

2,干掉master , 然后等待其他俩个节点是否自动被哨兵切换主从身份

kill 进程pid  #干掉master进程

redis哨兵集群
2|0redis-cluster

3,再查看另外两个slave的状态

  发现其中一个节点变为主节点(随机的)

4,然后再开启主节点6379,检查三个节点的复制身份状态

  此时,6379状态已经变成 slave 了

redis哨兵集群
2|0redis-cluster第一个
redis哨兵集群
2|0redis-cluster第二个
redis哨兵集群
2|0redis-cluster第三个

2|1引入


  1,redis官方生成可以达到 10万/每秒,每秒执行10万条命令。

    假如业务需要每秒100万的命令执行呢?

  1,一台服务器内存正常是16~256G。

    假如你的业务需要500G内存,那怎么办?

正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力,一堆机器做一件事

2|2cluster实例及配置


使用方式: 官方提供通过ruby语言的脚本一键安装

1,环境配置

redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。

通过配置,开启redis-cluster

 
port 7000
daemonize yes
dir "/opt/redis/data"
logfile "7000.log"
dbfilename "dump-7000.rdb"
cluster-enabled yes   # 开启集群模式
cluster-config-file nodes-7000.conf  # 集群内部的配置文件
cluster-require-full-coverage no  # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
 

每个节点仅仅是端口运行的不同!

 
[root@localhost /opt/redis/config 17:12:30]#ls
redis-7000.conf  redis-7002.conf  redis-7004.conf
redis-7001.conf  redis-7003.conf  redis-7005.conf

#确保每个配置文件中的端口修改!!
 

2,分别运行redis实例

 
# redis-server redis-7000.conf
# redis-server redis-7001.conf
# redis-server redis-7002.conf
# redis-server redis-7003.conf
# redis-server redis-7004.conf
# redis-server redis-7005.conf
 

注意:此时集群还不可用

3,准备ruby的编程环境

 
# 1.下载ruby的源码包
wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz

# 2.解压缩ruby源码
tar -xvf ruby-2.3.1.tar.gz

# 3.进入ruby源码包,配置安装位置
./configure --prefix=/opt/ruby/

# 4.开始编译且编译安装
make && make install

# 5.配置ruby的环境变量
vim /etc/profile 
# 写入如下配置
PATH=$PATH:/opt/ruby/bin 
      
 

4,安装ruby操作redis的模块

 
# 1.下载ruby操作redis的模块
wget http://rubygems.org/downloads/redis-3.3.0.gem

# 2.安装
gem install -l redis-3.3.0.gem

# 3.搜索创建redis集群的命令
find /opt  -name  redis-trib.rb
/opt/redis-4.0.10/src/redis-trib.rb  # 搜索结果
 

5,一键创建redis集群

 
redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
# replicas 1 --代表每个主节点,有一个从节点

# 集群自动分配主从关系,默认:
# 7000,7001,7001 为主库
#  7003,7004,7005 为从库
 

6,查看集群状态

 
redis-cli -p 7000 cluster info  

redis-cli -p 7000 cluster nodes  #等同于查看nodes-7000.conf文件节点信息

# 集群主节点状态
redis-cli -p 7000 cluster nodes | grep master
# 集群从节点状态
redis-cli -p 7000 cluster nodes | grep slave
 

6,开启集群

redis-cli -p 7000  -c  
    # -p  指定数据库端口
    # -c  指定开启集群模式

7,测试写入集群数据

 
127.0.0.1:7000> set name peng     
-> Redirected to slot [5798] located at 127.0.0.1:7001       
OK
127.0.0.1:7001> exit
[root@yugo /opt/redis/src 18:46:07]#redis-cli -c -p 7000
127.0.0.1:7000> ping
PONG
127.0.0.1:7000> keys *
(empty list or set)
127.0.0.1:7000> get name
-> Redirected to slot [5798] located at 127.0.0.1:7001
"peng"
 

集群已经搭建完毕啦!!!

  • 相关阅读:
    Python之内置函数再总结
    内置函数
    函数递归
    字符编码之文件处理
    文件处理
    python1数据链接总结
    知识点练习day9
    第一周作业
    python1
    网络基础预习
  • 原文地址:https://www.cnblogs.com/liliuguang/p/14509375.html
  • 走看看 - 开发者的网上家园

    上回说到redis主从同步时,master(主库)如果宕机了怎么解决...

    我给出了一个手动解决的办法!

    但实际上,如果你配置了Sentinel,它能自动发现master宕机并且进行自动切换slave(从库)变master 。

    sentinel(哨兵)主要功能如下:

    • 不时的监控redis是否良好运行,如果节点不可达就会对节点进行下线标识
    • 如果被标识的是主节点,sentinel就会和其他的sentinel节点“协商”,如果其他节点也人为主节点不可达,就会选举一个sentinel节点来完成自动故障转义
    • 在master-slave进行切换后,master_redis.conf、slave_redis.conf和sentinel.conf的内容都会发生改变,即master_redis.conf中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换

    1|2安装配置


    实验环境:CentOS7虚拟机一台

    配置:

      一主(6379)两从(6380,6381)

      三个 sentinel 检测主节点(26379,26380,26381)

    存放位置自定义,运行程序时切换到改文件即可。

    在正式环境中,需按照公司需求,安装配置在不同的linux上。

    具体步骤请参考上一篇博客 本篇博客不做详细讲解~

    1,先准备三个redis实例,

    redis哨兵集群
2|0redis-cluster redis-6379.conf
    redis哨兵集群
2|0redis-cluster redis-6380.conf
    redis哨兵集群
2|0redis-cluster redis-6381.conf
    redis哨兵集群
2|0redis-cluster 附:redis.conf详解

    2,启动三个数据库实例

    # redis-server  redis-6379.conf
    # redis-server  redis-6380.conf
    # redis-server  redis-6381.conf

    3,准备三个哨兵文件,监控主从架构

    redis哨兵集群
2|0redis-cluster redis-26379.conf

    注意:避免冲突,复制前删除注释

    redis哨兵集群
2|0redis-cluster redis-26380.conf
    redis哨兵集群
2|0redis-cluster redis-26381.conf

    4,分别启动三个哨兵实例

    # redis-sentinel redis-26379.conf 
    # redis-sentinel redis-26380.conf 
    # redis-sentinel redis-26381.conf

    注意: 如果发现不成功,需要删掉所有的哨兵配置文件,从新来过

    5,检查哨兵状态是否正常,

     
    # redis-cli -p 26379 info sentinel  # 查看配置
    
    # 配置如下表示正常
    # Sentinel
    sentinel_masters:1
    sentinel_tilt:0
    sentinel_running_scripts:0
    sentinel_scripts_queue_length:0
    sentinel_simulate_failure_flags:0
    master0:name=qsmaster,status=ok,address=127.0.0.1:6380,slaves=2,sentinels=3
    # 哨兵主节点名字叫做mymaster,状态ok,监控地址是127.0.0.1:6379,有两个从节点,3个哨兵
     

    1|3故障实验


    大致思路

    • 杀掉主节点的redis进程6379端口,观察从节点是否会进行新的master选举,进行切换
    • 重新恢复旧的“master”节点,查看此时的redis身份

    1,首先查看三个redis的进程状态

    ps -ef|grep redis

    2,干掉master , 然后等待其他俩个节点是否自动被哨兵切换主从身份

    kill 进程pid  #干掉master进程

    redis哨兵集群
2|0redis-cluster

    3,再查看另外两个slave的状态

      发现其中一个节点变为主节点(随机的)

    4,然后再开启主节点6379,检查三个节点的复制身份状态

      此时,6379状态已经变成 slave 了

    redis哨兵集群
2|0redis-cluster第一个
    redis哨兵集群
2|0redis-cluster第二个
    redis哨兵集群
2|0redis-cluster第三个

    2|1引入


      1,redis官方生成可以达到 10万/每秒,每秒执行10万条命令。

        假如业务需要每秒100万的命令执行呢?

      1,一台服务器内存正常是16~256G。

        假如你的业务需要500G内存,那怎么办?

    正确的应该是考虑分布式,加机器,把数据分到不同的位置,分摊集中式的压力,一堆机器做一件事

    2|2cluster实例及配置


    使用方式: 官方提供通过ruby语言的脚本一键安装

    1,环境配置

    redis支持多实例的功能,我们在单机演示集群搭建,需要6个实例,三个是主节点,三个是从节点,数量为6个节点才能保证高可用的集群。

    通过配置,开启redis-cluster

     
    port 7000
    daemonize yes
    dir "/opt/redis/data"
    logfile "7000.log"
    dbfilename "dump-7000.rdb"
    cluster-enabled yes   # 开启集群模式
    cluster-config-file nodes-7000.conf  # 集群内部的配置文件
    cluster-require-full-coverage no  # redis cluster需要16384个slot都正常的时候才能对外提供服务,换句话说,只要任何一个slot异常那么整个cluster不对外提供服务。 因此生产环境一般为no
     

    每个节点仅仅是端口运行的不同!

     
    [root@localhost /opt/redis/config 17:12:30]#ls
    redis-7000.conf  redis-7002.conf  redis-7004.conf
    redis-7001.conf  redis-7003.conf  redis-7005.conf
    
    #确保每个配置文件中的端口修改!!
     

    2,分别运行redis实例

     
    # redis-server redis-7000.conf
    # redis-server redis-7001.conf
    # redis-server redis-7002.conf
    # redis-server redis-7003.conf
    # redis-server redis-7004.conf
    # redis-server redis-7005.conf
     

    注意:此时集群还不可用

    3,准备ruby的编程环境

     
    # 1.下载ruby的源码包
    wget https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.1.tar.gz
    
    # 2.解压缩ruby源码
    tar -xvf ruby-2.3.1.tar.gz
    
    # 3.进入ruby源码包,配置安装位置
    ./configure --prefix=/opt/ruby/
    
    # 4.开始编译且编译安装
    make && make install
    
    # 5.配置ruby的环境变量
    vim /etc/profile 
    # 写入如下配置
    PATH=$PATH:/opt/ruby/bin 
          
     

    4,安装ruby操作redis的模块

     
    # 1.下载ruby操作redis的模块
    wget http://rubygems.org/downloads/redis-3.3.0.gem
    
    # 2.安装
    gem install -l redis-3.3.0.gem
    
    # 3.搜索创建redis集群的命令
    find /opt  -name  redis-trib.rb
    /opt/redis-4.0.10/src/redis-trib.rb  # 搜索结果
     

    5,一键创建redis集群

     
    redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
    # replicas 1 --代表每个主节点,有一个从节点
    
    # 集群自动分配主从关系,默认:
    # 7000,7001,7001 为主库
    #  7003,7004,7005 为从库
     

    6,查看集群状态

     
    redis-cli -p 7000 cluster info  
    
    redis-cli -p 7000 cluster nodes  #等同于查看nodes-7000.conf文件节点信息
    
    # 集群主节点状态
    redis-cli -p 7000 cluster nodes | grep master
    # 集群从节点状态
    redis-cli -p 7000 cluster nodes | grep slave
     

    6,开启集群

    redis-cli -p 7000  -c  
        # -p  指定数据库端口
        # -c  指定开启集群模式

    7,测试写入集群数据

     
    127.0.0.1:7000> set name peng     
    -> Redirected to slot [5798] located at 127.0.0.1:7001       
    OK
    127.0.0.1:7001> exit
    [root@yugo /opt/redis/src 18:46:07]#redis-cli -c -p 7000
    127.0.0.1:7000> ping
    PONG
    127.0.0.1:7000> keys *
    (empty list or set)
    127.0.0.1:7000> get name
    -> Redirected to slot [5798] located at 127.0.0.1:7001
    "peng"
     

    集群已经搭建完毕啦!!!