主从模式:强调数据备份、读写分离。一个主服务器(Master)可以有多个Slave
哨兵模式:强调高可用。哨兵(Sentinel)发现Master挂了之后,从Slave中重新选择一个Master

持久化方式

  • RDB: 快照文件,适合备份。Redis调用fork()产生一个子进程,定时把数据写到一个临时的RDB文件中。
  • AOF: 日志追加文件,重建时重新执行一遍AOF里面的命令。可以开启AOF重写,优化AOF文件体积。
  • 混合方式:前半段时RDB格式全量数据后半段为AOF格式的增量数据。

Redis哨兵集群搭建

编译Redis二进制文件

执行完下面命令后就可以再redis的bin目录下获取已经编译的redis-cli、redis-server、redis-sentinel、redis-check-aof、redis-check-rdb等二进制文件了。

tar -zxvf redis-5.0.12.tar.gz
cd redis-5.0.12
make MALLOC=libc
make && make install

哨兵模式原理

这里采用3台服务器(192.17.1.3、192.17.1.4、192.17.1.5)来搭建高可用的redis哨兵集群。每一台上面都有一个redis哨兵进程,其中192.17.1.3为redis master节点,192.17.1.4、192.17.1.5为slave节点。

Master节点配置

#绑定ip地址
bind 172.19.1.3
# 关闭保护模式
protected-mode no
#后台守护
daemonize yes
timeout 30
#快照文件地址
dir /usr/local/redis/redisdb
#日志地址
logfile /usr/local/redis/log
#slave连接master密码
masterauth redis123456
requiredpass redis123456
#使用aof持久化方式
appendonly yes
#关闭集群模式
cluster-enabled no

Slave节点配置

#绑定ip地址
bind 172.19.1.4
# 关闭保护模式
protected-mode no
#后台守护
daemonize yes
timeout 30
#快照文件地址
dir /usr/local/redis/redisdb
#日志地址
logfile /usr/local/redis/log
#slave连接master密码
masterauth redis123456
#master地址
replicaof 172.19.1.3 6379
#使用aof持久化方式
appendonly yes
#关闭集群模式
cluster-enabled no

Sentinel配置

sentinel monitor mymaster 172.17.1.3 6379 2
protected-mode no
daemonize yes
logfile /usr/local/redis/log/sentinel.log
dir /usr/local/redis/sentinel-work
sentinel auth-pass mymaster redis123456

查看主从状态

redis-cli -h 172.17.1.3 #登录redis
auth redis123456 #授权
info replication #查看主从情况

查看哨兵情况

redis-cli -h 172.19.1.3 -p 26379 info sentinel
SENTINEL masters  #列出所有被监视的master,以及当前master状态
SENTINEL master <master name>  #列出指定的master
SENTINEL slaves <master name>  #列出给定master的所有slave以及slave状态
SENTINEL sentinels <master name>  #列出监控指定的master的所有sentinel
SENTINEL get-master-addr-by-name <master name>  #返回给定master名字的服务器的IP地址和端口号
SENTINEL reset <pattern>  #重置所有匹配pattern表达式的master状态
SENTINEL failover <master name>  #当msater失效时, 在不询问其他 Sentinel 意见的情况下, 强制开始一次自动故障迁移,但是它会给其他sentinel发送一个最新的配置,其他sentinel会根据这个配置进行更新
SENTINEL ckquorum <master name> #检查当前sentinel的配置能否达到故障切换master所需的数量,此命令可用于检测sentinel部署是否正常,正常返回ok
SENTINEL flushconfig #强制sentinel将运行时配置写入磁盘,包括当前sentinel状态

自启动脚本

[Unit]
Description=Redis Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/redis-server /usr/local/redis/redis.conf
ExecStop=/usr/local/redis/redis-cli -h 172.19.1.3 -p 6379 shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target

[Unit]
Description=Redis sentinel Server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/redis-sentinel /usr/local/redis/sentinel.conf
ExecStop=/usr/local/redis/redis-cli  -h 172.19.1.3 -p 26379 shutdown
Restart=on-failure
[Install]
WantedBy=multi-user.target

大坑

注意一定第一次要先启动redis 主服务器,再启动redis从服务器,最后启动redis哨兵,其中如何redis哨兵配置错误,一定要修改配置重新配置

性能调优

#更改内核参数
echo 512 > /proc/sys/net/core/somaxconn ;\
echo vm.overcommit_memory=1 >> /etc/sysctl.conf ;\
echo fs.filemax=102400 >>/etc/sysctl.conf;\
sysctl -p ;\
文章作者: 编程之家
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程之家
Redis redis sentinel
喜欢就支持一下吧