• Redis主从部署


    Redis主从部署

    1.下载安装Redis

    安装依赖

    yum -y install wget gcc gcc-c++ make
    

    下载 redis,下载地址

    wget https://download.redis.io/redis-stable.tar.gz
    

    安装

    [root@redis1 ~]# mkdir /usr/local/redis
    [root@redis1 ~]# tar xf redis-stable.tar.gz -C /usr/local/redis/
    [root@redis1 ~]# cd /usr/local/redis/redis-stable/
    [root@redis1 redis-stable]# make && make install
    

    没报错就是安装成功了

    2.单点双副本主从配置

    包含一个主节点一个从节点

    ip端口角色
    192.168.37.946379master
    192.168.37.946380slave

    1.修改配置信息

    创建两个目录给各个节点使用

    [root@redis1 redis-stable]# cd /usr/local/redis/
    [root@redis1 redis]# mkdir 6379 6380
    [root@redis1 redis]# ls
    6379  6380  redis-stable
    

    2.修改配置文件redis.conf

    # redis实例的声明 IP
    replica-announce-ip 192.168.37.94
    # 开启RDB
    # save ""
    save 3600 1
    save 300 100
    save 60 10000
    
    # 关闭AOF
    appendonly no
    
    # 绑定地址,默认是127.0.0.1,会导致只能在本地访问。修改为0.0.0.0则可以在任意IP访问
    bind 0.0.0.0
    # 保护模式,关闭保护模式
    protected-mode no
    # 数据库数量,设置为1
    databases 1
    

    3.拷贝配置文件到每一个实例文件夹里

    [root@redis1 redis-stable]# cp redis.conf /usr/local/redis/6379/
    [root@redis1 redis-stable]# cp redis.conf /usr/local/redis/6380/
    

    4.修改每一个实例的端口和工作目录

    port 6379    #修改成对应端口
    dir /usr/local/redis/6379/   #修改成配置文件目录
    

    5.配置主从关系

    在从节点的配置文件里添加这一配置
    slaveof  
    

    6.检查效果

    连接主库
    [root@redis1 ~]# redis-cli -p 6379
    127.0.0.1:6379> info replication
    # Replication
    role:master    #这里已经显示master节点
    connected_slaves:1
    slave0:ip=192.168.37.94,port=6380,state=online,offset=112,lag=1
    master_failover_state:no-failover
    master_replid:ec57c6ee234cca8fd8ca9b2be04865f4b1f37f11
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:112
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:1
    repl_backlog_histlen:112
    127.0.0.1:6379> exit
    
    连接从库
    [root@redis1 ~]# redis-cli -p 6380
    127.0.0.1:6380> info replication
    # Replication
    role:slave     #这里显示slave节点
    master_host:192.168.37.94
    master_port:6379
    master_link_status:up
    master_last_io_seconds_ago:9
    master_sync_in_progress:0
    slave_read_repl_offset:126
    slave_repl_offset:126
    slave_priority:100
    slave_read_only:1
    replica_announced:1
    connected_slaves:0
    master_failover_state:no-failover
    master_replid:ec57c6ee234cca8fd8ca9b2be04865f4b1f37f11
    master_replid2:0000000000000000000000000000000000000000
    master_repl_offset:126
    second_repl_offset:-1
    repl_backlog_active:1
    repl_backlog_size:1048576
    repl_backlog_first_byte_offset:15
    repl_backlog_histlen:112
    127.0.0.1:6380> exit
    

    3.哨兵模式监控主从

    要先搭建好主从架构

    我们现在搭建一个两节点形成的Sentinel集群,来监控之前搭建的主从架构

    ip端口节点名称
    192.168.37.947379s1
    192.168.37.947380s2

    1.创建实例目录

    [root@redis1 ~]# mkdir /usr/local/redis/s1 /usr/local/redis/s2
    [root@redis1 ~]# cd /usr/local/redis/
    [root@redis1 redis]# ll
    total 4
    drwxr-xr-x. 2 root root   40 Jul  8 10:09 6379
    drwxr-xr-x. 2 root root   40 Jul  8 10:10 6380
    drwxrwxr-x. 8 1000 1000 4096 Jul  8 09:41 redis-stable
    drwxr-xr-x. 2 root root    6 Jul  8 10:23 s1
    drwxr-xr-x. 2 root root    6 Jul  8 10:23 s2
    

    2.复制配置文件并进行修改

    [root@redis1 redis-stable]# cp sentinel.conf ../s1/
    [root@redis1 redis-stable]# cp sentinel.conf ../s2
    [root@redis1 redis-stable]# cd ..
    [root@redis1 redis]# ls
    6379  6380  redis-stable  s1  s2
    [root@redis1 redis]# cd s1/
    [root@redis1 s1]# vim sentinel.conf 
    [root@redis1 s1]# cd ../s2
    [root@redis1 s2]# vim sentinel.conf
    
    
    port 7379    #对应端口
    sentinel announce-ip "192.168.37.94"  #连接ip
    sentinel monitor mymaster 192.168.37.94 6379 1  #主节点ip和端口和从节点数量
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 60000
    dir "/usr/local/redis/s1"
    

    port 7379:是当前sentinel实例的端口

    sentinel announce-ip:当前实例的IP

    sentinel monitor mymaster 192.168.37.94 6379 1:指定主节点信息

    mymaster:主节点名称,自定义,任意写
    192.168.37.94 6379:主节点的ip和端口
    1:选举master时的quorum值,低于某个值则集群会停止服务。
    dir:日志存储的路径

    3.启动并测试

    [root@redis1 redis]# redis-sentinel s2/sentinel.conf
    [root@redis1 redis]# redis-sentinel s1/sentinel.conf
    

    我们尝试让6379宕机

    在这里插入图片描述

    从节点报错几次之后就会被切换成主节点

    在这里插入图片描述

    哨兵节点日志

    在sentinel集群环境下需要多个sentinel互相沟通来确认某个master是否真的死了,quorum这个参数是进行客观下线的一个依据,意思是至少有quorum个sentinel认为这个master有故障,才会对这个master进行下线以及故障转移。因为有的时候,某个sentinel节点可能因为自身网络原因,导致无法连接master,而此时master并没有出现故障,所以,这就需要多个sentinel都一致认为该master有问题,才可以进行下一步操作,这就保证了公平性和高可用。

    4.搭建集群

    1.准备工作

    因为集群操作需要新的节点进行部署我这边直接删掉了原来的主从节点

    [root@redis1 redis]# rm -rf 6379 6380 s1 s2
    [root@redis1 redis]# ls
    redis-stable
    [root@redis1 redis]# mkdir 6379 6380 6381 7379 7380 7381
    

    准备一个新的redis.conf文件,内容如下:

    daemonize yes
    bind 0.0.0.0
    dir /opt/redis-stable/cluster/
    port 6379
    dbfilename dump_6379.rdb
    pidfile /var/run/redis_6379.pid
    # 开启集群设置
    cluster-enabled yes
    # 设置节点配置文件
    cluster-config-file node-6379.conf
    # 设置节点失联时间,超过该时间(毫秒),集群自动进行主从切换
    cluster-node-timeout 15000
    
    
    
    将配置文件复制到所有的文件夹中,然后启动所有的redis节点
    

    2.启动集群

    [root@redis1 ~]# /usr/local/redis/redis-stable/src/redis-cli --cluster create --cluster-replicas 1 192.168.37.94:6379 192.168.37.94:6380 192.168.37.94:6381 192.168.37.94:7379 192.168.37.94:7380 192.168.37.94:7381
    

    在这里插入图片描述

    3.检查效果

    [root@redis1 ~]# redis-cli -p 6379
    127.0.0.1:6379> set a 1
    (error) MOVED 15495 192.168.37.94:6381    #如果正常的使用就会出现报错
    [root@redis1 ~]# redis-cli -c -p 6379    #集群操作的时候要加-c选项
    127.0.0.1:6379> set a 1
    -> Redirected to slot [15495] located at 192.168.37.94:6381
    OK
    192.168.37.94:6381> 
    
  • 相关阅读:
    Python中if __name__ == ‘__main__‘,__init__和self 的解析
    GO语言篇之文件操作
    Linux系统了解 Samba服务器配置的工作流程
    SpringBoot集成redis+cookie实现分布式单点登录
    IProgress not found.Please update jupyter and ipywidgets.解决办法
    五个好习惯,助你顺利成长
    对象的解构赋值(基本用法2)
    在 Android 上部署自定义 YOLOv8 教程
    动态规划合集
    Kubernetes集群建设规划之work-node选型
  • 原文地址:https://blog.csdn.net/qq_63153457/article/details/140317508