安装redis
https://redis.io/download
cd /opt
wget http://download.redis.io/releases/redis-6.2.3.tar.gz
yum install gcc-c++
tar xzf redis-6.2.3.tar.gz
mv /opt/redis-6.2.3 /usr/local/redis
cd /usr/local/redis
make
make PREFIX=/usr/local/redis install
主从redis模式搭建
cd /opt
mkdir redis-sentinel
cd redis-sentinel
mkdir {redis-6380,redis-6381,redis-6382}
cp /usr/local/redis/redis.conf redis-6380
cp /usr/local/redis/redis.conf redis-6381
cp /usr/local/redis/redis.conf redis-6382
更改redis.conf配置文件
redis-6381,redis-6382的配置和redis-6380类似,以下是 redis-6380的redis.conf配置修改:
cd /opt/redis-sentinel/redis-6380/
vi redis.conf
daemonize yes
pidfile /var/run/redis_6380.pid
port 6380
bind 127.0.0.1 #可选,默认就处理所有请求。
logfile "./redis-6380.log"
redis配置密码的话,需要以下配置
masterauth "123456"
requirepass "123456"
appendonly yes
注意:
重点(容易出错)
1、protected-mode no
是否开启保护模式,默认开启。要是配置里没有指定bind和密码。开启该参数后,redis只会本地进行访问,拒绝外部访问。要是开启了密码和bind,可以设为yes。否则最好关闭,设置为no。
2、bind
网上很多解释是错误的,并不是允许哪些ip可以访问redis服务的意思!!!
通俗易懂的理解:bind配置了什么ip,别人就得访问bind里面配置的ip才访问到redis服务
启动redis
/usr/local/redis/bin/redis-server /opt/redis-sentinel/redis-6380/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-sentinel/redis-6381/redis.conf
/usr/local/redis/bin/redis-server /opt/redis-sentinel/redis-6382/redis.conf
查看是否启动
ps -aux | grep redis
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6380 -a 123456
slave加入master
# redis-6381作为slave加入redis-6380
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6381 -a 123456
SLAVEOF 127.0.0.1 6380
exit
# redis-6382作为slave加入redis-6380
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6382 -a 123456
SLAVEOF 127.0.0.1 6380
exit
验证主从
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6380 -a 123456
info replication
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6380 -a 123456
set name zhangsan
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6381 -a 123456
get name
哨兵模式搭建
Redis的哨兵机制是官方推荐的一种高可用(HA)方案,我们在使用Redis的主从结构时,如果主节点挂掉,这时是不能自动进行主备切换和通知客户端主节点下线的。
Redis-Sentinel机制主要用三个功能:
(1)监控:不停监控Redis主从节点是否安装预期运行
(2)提醒:如果Redis运行出现问题可以 按照配置文件中的配置项 通知客户端或者集群管理员
(3)自动故障转移:当主节点下线之后,哨兵可以从主节点的多个从节点中选出一个为主节点,并更新配置文件和其他从节点的主节点信息。
cd /opt/redis-sentinel
mkdir {sentinel-7380/workdir,sentinel-7381/workdir,sentinel-7382/workdir}
cp /usr/local/redis/sentinel.conf /opt/redis-sentinel/sentinel-7380
cp /usr/local/redis/sentinel.conf /opt/redis-sentinel/sentinel-7381
cp /usr/local/redis/sentinel.conf /opt/redis-sentinel/sentinel-7382
更改sentinel.conf配置文件
sentinel-7381,sentinel-7382的配置和sentinel-7380类似,以下是 sentinel-7380的sentinel.conf配置修改:
cd /opt/redis-sentinel/sentinel-7380
vim sentinel.conf
daemonize yes
port 7380
#指定工作目录
dir /opt/redis-sentinel/sentinel-7380/workdir
logfile "./sentinel.log"
#指定别名 主节点地址 端口 哨兵个数(有几个哨兵监控到主节点宕机执行转移)
sentinel monitor mymaster 127.0.0.1 6380 2
#如果哨兵10s内没有收到主节点的心跳,哨兵就认为主节点宕机了,默认是30秒
sentinel down-after-milliseconds mymaster 10000
#选举出新的主节点之后,可以同时连接从节点的个数
sentinel parallel-syncs mymaster 1
#如果30秒后,master仍没活过来,则启动failover,默认180s
sentinel failover-timeout mymaster 30000
#配置连接redis主节点密码
sentinel auth-pass mymaster 123456
mymaster 后跟的是master的ip和端口,最后一个’2’代表我要启动只要有2个sentinel认为master下线,就认为该master客观下线,启动failover并选举产生新的master。通常最后一个参数不能多于启动的sentinel实例数。建议至少启动三台sentinel实例。
启动哨兵
/usr/local/redis/bin/redis-sentinel /opt/redis-sentinel/sentinel-7380/sentinel.conf
/usr/local/redis/bin/redis-sentinel /opt/redis-sentinel/sentinel-7381/sentinel.conf
/usr/local/redis/bin/redis-sentinel /opt/redis-sentinel/sentinel-7382/sentinel.conf
验证哨兵
ps -aux | grep redis
kill -9 14896
ps -aux | grep redis
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6381 -a 123456
info replication
exit
/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6382 -a 123456
info replication
exit
再看sentinel.conf里面的配置,master也已经变成了6382
总结
本文主要介绍了 Redis 两种集群模式,总结一下
主从模式 可以实现读写分离,数据备份。但是并不是「高可用」的
哨兵模式 可以看做是主从模式的「高可用」版本,其引入了 Sentinel 对整个 Redis 服务集群进行监控。但是由于只有一个主节点,因此仍然有写入瓶颈。