• Redis 集群


    Redis 集群

    集群的作用

    通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数
    据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。

    为了避免单点故障,我们需要将数据复制多份部署在多台不同的服务器上,即使有一台服务器出现故障其他服务器依然可以继续提供服务。

    那么这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上,那该怎么实现呢?

    实现

    方式

    我们可以通过部署多台redis,并在配置文件中指定这几台redis之间的主从关系,主负责写入数据,同时把写入的数据实时同步到从机器,这种模式叫做主从复制,即master/slave,并且redis默认master用于写,slave用于读,向slave写数据会导致错误。

    方式1

    方式1:修改配置文件,启动时,服务器读取配置文件,并自动成为指定服务器的从服务器,从而构成主从复制的关系

    #主服务器(master)
    #include /usr/local/redis-3.2.9/redis.conf  导入原有的配置文件,下面是新的配置选项
    include /usr/local/redis-3.2.9/redis.conf
    #修改默认后台启动
    daemonize yes
    #端口
    port 6382
    #修改PID进程文件
    pidfile /var/run/redis_6382.pid
    #日志文件
    logfile 6382.log
    #数据持久化备份文件
    dbfilename dump6382.rdb
    
    
    #从服务器(slave)--从服务器除了最后一行,其余的都一样
    include /usr/local/redis-3.2.9/redis.conf
    daemonize yes
    port 6382
    pidfile /var/run/redis_6382.pid
    logfile 6382.log
    dbfilename dump6382.rdb
    #配置从服务器
    slaveof 127.0.0.1 6380
    

    方式2

    方式2: ./redis-server --slaveof ,在启动redis时指定当前服务成为某个主Redis服务的从Slave

    /usr/local/redis-3.2.9/src/redis-server /usr/local/redis-3.2.9/redis6381.conf --slaveof 127.0.0.1 6380 &
    

    容灾

    冷处理:手动回复
    当主服务器挂掉,可以进入从服务器的cli使用slaveof no one将一台从服务器设为主,然后在另一台使用slaveof ip port 挂到新的一台主服务器上
    热处理:哨兵模式---见新的笔记

    相关命令

    进入客户端需指定端口:./redis-cli -p port
    不配置启动默认都是主master
    info replication 查看redis服务器所处角色

    Sentinel

    Sentinel哨兵是redis官方提供的高可用方案,可以用它来监控多个Redis服务实例的运行情况。
    Sentinel会不断检查Master和Slave是否正常,需要多台组成哨兵网,因为如果Sentinel挂了,就无法监控,所以需要多个哨兵,组成Sentinel网络
    监控同一个Master的Sentinel会自动连接,组成一个分布式的Sentinel网络,互相通信并交换彼此关于被监控服务器的信息,当一个Sentinel认为被监控的服务器已经下线时,它会向网络中的其它Sentinel进行确认,判断该服务器是否真的已经下线
    如果下线的服务器为主服务器,那么Sentinel网络将对下线主服务器进行自动故障转移,通过将下线主服务器的某个从服务器提升为新的主服务器,并让其从服务器转移到新的主服务器下,以此来让系统重新回到正常状态
    下线的旧主服务器重新上线,Sentinel会让它成为从,挂到新的主服务器下

    Sentinel会根据Master的配置自动发现Master的Slave
    Sentinel默认端口号为26379

    配置哨兵,是要在主从模式下配置,也就是哨兵不是从服务器,哨兵只是监视主从服务器

    操作

    使用Redis sentinel服务,就像配置主从服务器一样,在redis中进行配置。
    配置三份sentinel.conf文件:--这里你配几台sentinel就配置几台配置文件
    sentinel26380.conf
    sentinel26381.conf
    sentinel26382.conf
    三份sentinel配置文件修改:
    1、修改 port 26380、 port 26381、 port 26382---修改自己的端口
    2、修改 sentinel monitor mymaster 127.0.0.1 6380 2
    命令详解:
    sentinel monitor Name IP 端口 投票数
    Name:自己写命名
    IP:哨兵监视的主服务器IP
    端口:主服务器端口
    投票数:当有一台发现主服务器故障,时需要多台确认投票,当投票数达到多少时,哨兵执行操作。

    3.执行哨兵实例

    ./redis-sentinel ../sentinel26380.conf

    安全

    设置密码

    设置redis密码,在redis.conf文件配置 requirepass 123456--搜索requirepass就能找到
    注意:因为redis 速度相当快,所以在一台比较好的服务器下,一个外部的用户可以在一秒钟进行150K 次的密码尝试,这意味着你需要指定非常非常强大的密码来防止暴力破解。

    客户端连接则需要密码:AUTH 123456 或者 redis-cli -h 127.0.0.1 -p 6379 -a 123456

    绑定访问IP

    把# bind 127.0.0.1前面的 注释#号去掉,然后把127.0.0.1改成允许访问你redis服务器的ip地址,表示只允许该ip进行访问

    命令禁止或重命名

    在redis.conf文件中进行命令禁止或重命名配置
    rename-command FLUSHALL oyfekmjvmwxq5a9c8usofuo369x0it2k #重命名FLUSHALL命令
    注意:对于FLUSHALL命令,需要保证appendonly.aof文件没有flushall命令,否则服务器无法启动

    rename-command FLUSHALL "" # 禁用FLUSHALL命令
    rename-command FLUSHDB "" #禁止FLUSHDB命令
    rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 # 重命名CONFIG命令
    rename-command CONFIG "" #禁止CONFIG命令,因为CONFIG GET *能够获取redis的配置信息

    修改端口

    修改redis的端口,这一点很重要,使用默认的端口很危险,redis.conf中修改port 6379 将其修改为自己指定的端口(可随意)

    本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger
    欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com

  • 相关阅读:
    Java-LockSupport
    Kafka Eagle 安装
    Kafka shell
    python pip 使用
    Kafka 集群部署
    Kafka 概述
    DockerFile 简单使用
    《深入理解Java虚拟机》读书笔记
    linux安装redis
    Java多线程基础知识例子
  • 原文地址:https://www.cnblogs.com/Swagger-Ranger/p/10671101.html
Copyright © 2020-2023  润新知