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

原文地址:https://www.cnblogs.com/Swagger-Ranger/p/10671101.html