redis 哨兵集群

安装

下载编码包

wget https://download.redis.io/releases/redis-5.0.12.tar.gz

tar -zxf redis-5.0.12.tar.gz -C /usr/local/

安装依赖

yum install gcc gcc-c++

make 编译安装

cd /usr/local/redis-5.0.12

make && cd src && make install

编辑配置文件

一般配置好前三个参数,redis基本就可以正常使用了

sed -i 's/bind/#bind/g' redis.conf

sed -i 's/protected-mode yes/protected-mode no/g' redis.conf

sed -i 's/daemonize no/daemonize yes/g' redis.conf

sed -i 's#logfile ""#logfile "/usr/local/redis-5.0.12/redis_6379.log"#g' redis.conf

sed -i 's/appendonly yes/appendonly no/g' redis.conf

sed -i 's/appendfsync everysec/appendfsync always/g' redis.conf

sed -i 's/# requirepass foobared/requirepass vany_redis@223/g' redis.conf

sed -i 's/masterauth <master-password>/masterauth vany_redis@223/g' redis.conf

配置systemd管理redis服务(如需做哨兵或主从,暂时不建议做该步)

编写服务配置文件

vim /usr/lib/systemd/system/redis.service

[Unit]
Description=redis
After=network.target

[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid	#这个要跟配置文件的pidfile路径一样
ExecStart=/usr/local/redis-5.0.12/src/redis-server /usr/local/redis-5.0.12/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target
ln -s /usr/lib/systemd/system/redis.service /etc/systemd/system/multi-user.target.wants/redis.service
systemctl daemon-reload 

systemctl restart redis

redis.conf详解

可以参考这篇文章

https://blog.csdn.net/weixin_42425970/article/details/94132652

常用配置

#bind 127.0.0.1	
默认为该项,意思是仅绑定本地访问,一般注释掉或指定单个ip地址访问
protected-mode yes
redis3.2版本后新增protected-mode配置,默认是yes,即开启。设置外部网络连接redis服务,设置方式如下:
1、关闭protected-mode模式,此时外部网络可以直接访问
2、开启protected-mode保护模式,需配置bind ip或者设置访问密码
daemonize yes
默认情况下, redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为 yes。
port 6379
指定监听port
timeout 60
设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接,客户端空闲N秒后关闭连接(0为禁用)。
pidfile /var/run/redis_6379.pid	
指定pid生成的文件
loglevel
log 等级分为 4 级, debug, verbose, notice, 和 warning。生产环境下一般开启 notice

logfile ”“
配置 log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上
masterauth <password>
指定master的认证密码,用户配置主从时redis设置了口令,就是下面的选项设置的口令

requirepass password
认证密码,默认是注释状态
dir ./
数据存放目录

dbfilename dump.rdb
持久化数据文件抿成名称

appendonly yes
是否启动AOF增量持久化策略

appendfsync always
记录规则

主从,哨兵

前言:

本章介绍Redis的一个强大功能--主从复制。一台master主机可以拥有多台slave从机。而一台slave从机又可以拥有多个slave从机。如此下去,形成强大的多级服务器集群架构(高扩展)。可以避免Redis单点故障,实现容灾恢复效果(高可用)。读写分离的架构,满足读多写少的并发应用场景。

主从复制的作用

​ 主从复制,读写分离,容灾恢复。一台主机负责写入数据,多台从机负责备份数据。在高并发的场景下,即便是主机挂了,可以用从机代替主机继续工作,避免单点故障导致系统性能问题。读写分离,让读多写少的应用性能更佳。

哨兵的作用

当主数据库遇到异常中断服务后,开发者可以通过手动的方式选择一个从数据库来升格为主数据库,以使得系统能够继续提供服务。然而整个过程相对麻烦且需要人工介入,难以实现自动化。 为此,Redis 2.8中提供了哨兵工具来实现自动化的系统监控和故障恢复功能。
哨兵的作用就是监控redis主、从数据库是否正常运行,主出现故障自动将从数据库转换为主数据库。

顾名思义,哨兵的作用就是监控Redis系统的运行状况。它的功能包括以下两个。

  • 监控主数据库和从数据库是否正常运行。
  • 主数据库出现故障时自动将从数据库转换为主数据库

环境:

ip 配置
192.168.1.1 redis-5.0.12;port:6379
192.168.1.2 redis-5.0.12;port:6380
192.168.1.3 redis-5.0.12;port:6381

配置主从

1.编辑配置文件

修改以下选项(每台)

#指定监听IP地址(可以将这条注释,来保证其他服务器得正常访问)
# 127.0.0.1
#后台运行
daemonize yes
#指定监听端口
port 6379
#限制本地访问关闭
protected-mod no
#日志文件存放路径
logfile /usr/local/redis-5.0.12/redis.log
修改pid进程文件路径和名称
pidfile /var/run/redis_6379.pid	
#指定认证密码为redhat(如需要密码使用)
requirepass vany_redis@223
#数据存放目录
dir /usr/local/redis-5.0.12/data
#持久化数据文件抿成名称
dbfilename dump.rdb
启动AOF增量持久化策略
appendonly yes
发生改变就记录日志
appendfsync always
2.依次启动三台redis服务

主不用配置,从redis的conf文件加入 slaveof ip port 就可以了, 或者从redis启动时 redis-server --port 6380 --slaveof 127.0.0.1 6379,从数据库一般是只读,可以改为可写,但写入的数据很容易被主同步没,所以还是只读就可以。也可以在运行是使用slaveof ip port命令,停止原来的主,切换成刚刚设置的主 slaveof no one会把自己变成主;

如果使用systemd管理redis,要配置主从,需要将配置写进配置文件

主:redis-server ../redis.conf  
从1:redis-server ../redis.conf  --slaveof 192.168.1.1 6379
从2:redis-server ../redis.conf  --slaveof 192.168.1.1 6379

基本操作

slaveof 192.168.1.1  6379	#也可以在启动后再指定主从
SLAVEOF no one	#断开当前的主从关系
info replication	#查看当前配置配置信息(主从信息)

如果从主,从服务器看到与以下相似的配置信息。表示主从配置成功

3.主从测试:

配置哨兵集群

假定目前已经配置环境;

配置
192.168.1.1 redis-5.0.12;port:6379 主,哨兵1
192.168.1.2 redis-5.0.12;port:6380 从,哨兵2
192.168.1.3 redis-5.0.12;port:6381 从,哨兵3
1.修改三台的哨兵配置文件 sentinel.conf

sentinel 本质上是一个特殊的 redis,大部分配置和普通的 redis 没有什么区别,主要区别在于端口和其哨兵监控设置,下面是三个典型的 sentinel 配置文件中的关键内容

#设置 sentinel 工作端口
port 26379|26380|26381
#后台运行 
daemonize yes
#日志文件名称
logfile "26379.log"
#设置当前 sentinel 监控的 redis ip 和 端口
sentinel monitor mymaster 127.0.0.1 6379 2
#设置判断 redis 节点宕机时间
sentinel down-after-milliseconds mymaster 60000
#设置自动故障转移超时
sentinel failover-timeout mymaster 180000
#设置同时故障转移个数
sentinel parallel-syncs mymaster 1

参数详解:

sentinel monitor [master-group-name] [ip] [port] [quorum]
这个命令中【master-group-name】是 master redis 的名称;【ip】和【port】分别是其 ip 和端口,很好理解。最后一个参数【quorum】是”投票数“
举个栗子,redis 集群中有3个 sentinel 实例,其中 master 挂掉了,如果这里的票数是2,表示有2个 sentinel 认为 master 挂掉啦,才能被认为是正真的挂掉啦。其中 sentinel 集群中各个 sentinel 之间通过 gossip 协议互相通信。
2.依次启动sentinel 集群
redis-sentinel /path/to/sentinel.conf
redis-server /path/to/sentinel.conf --sentinel

3.连接任意哨兵节点

redis-cli -h 127.0.0.1 -p 26380

info sentinel	#查看哨兵节点信息

可以看到redis主从的主备信息以及当前哨兵个数

从任意服务器进入哨兵节点查看相关信息,输出一致即为正常

3.哨兵架构图

posted @ 2021-03-16 10:56  (◓3◒)  阅读(122)  评论(0)    收藏  举报