节点名 | IP |
---|---|
redis-master | 192.168.86.135 |
redis-node01 | 192.168.86.136 |
reids-node02 | 192.168.86.137 |
# master,node01,node02 关闭防火墙,临时关闭:systemctl stop firewalld
systemctl disable --now firewalld
systemctl disable --now dnsmasq
systemctl disable --now NetworkManager
# master,node01,node02 关闭selinux
setenforce 0
sed -i ‘s#SELINUX=enforcing#SELINUX=disabled#g‘ /etc/sysconfig/selinux
sed -i ‘s#SELINUX=enforcing#SELINUX=disabled#g‘ /etc/selinux/config
# master,node01,node02 关闭分区
swapoff -a && sysctl -w vm.swappiness=0
sed -ri ‘/^[^#]*swap/s@^@#@‘ /etc/fstab
# master,node01,node02 设置hosts
[root@master /]#
cat >> /etc/hosts << EOF
192.168.86.135 master
192.168.86.136 node01
192.168.86.137 node02
EOF
yum install cpp binutils glibc-kernheaders glibc-common glibc-devel gcc make -y
cd /opt
wget https://download.redis.io/releases/redis-6.2.4.tar.gz
tar xvf redis-6.2.4.tar.gz
cd redis-6.2.4 && make
mkdir -p /usr/local/redis
make PREFIX=/usr/local/redis install
cp redis.conf /usr/local/redis
# 启动
cd /usr/local/redis
mkdir -p logs data
vi redis.conf
# 是否以守护进程的方式启动
daemonize yes
# 默认数据库16个
databases 16
# 绑定IP
# bind 0.0.0.0
port 6379
protected-mode yes
# 配置密码
requirepass 123456
# 从节点访问主节点密码(必须和requirepass一致)
masterauth 123456
# 从节点只读模式
replica-read-only yes
# 设置日志路径
logfile "/usr/local/redis/logs/redis_6379.log"
# 设置存储数据路径
dir /usr/local/redis/data
# rdb 数据文件名
dbfilename dump.rdb
# aof模式开启和aof数据文件名
appendonly yes
appendfilename "appendonly.aof"
# 从节点添加配置
slaveof 192.168.86.135 6379
:wq!
./bin/redis-server redis.conf
## 端口查看
netstat -lntp
# 退出
pkill redis
# 配置开机启动
vim /etc/systemd/system/redis.service
[Unit]
Description=redis-server
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/redis.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 启动
systemctl daemon-reload && systemctl enable --now redis
# redis-master 节点查看
127.0.0.1:6379> info replication
role:master
....
# redis-node01 节点查看
127.0.0.1:6379> info replication
role:slave
....
# redis-node02 节点查看
127.0.0.1:6379> info replication
role:slave
....
整理中.......................
Redis Sentinel 是分布式系统中监控 Redis 主从服务器,并提供主服务器下线时自动故障功能的模式。其中有四大特性:
监控(Monitoring):Sentinel 会不断地检查你的主服务器和从服务器是否运作正常
提醒(Notification):当被监控的某个 Redis 服务器出现问题时, Sentinel 可以通过 API 向管理员或者其他应用程序发送通知
自动故障迁移(Automatic failover):当一个主服务器不能正常工作时, Sentinel 会开始一次自动故障迁移操作
配置提供者(Configuration provider):客户端不需要连到主从,而是连到哨兵。哨兵给客户端提供服务发现的功能
############ 接着上面主从复制环境搭建, 继续往下搭建 ############
# master,node01,node02
vi /usr/local/redis/redis-sentinel.conf
# 放行所有 IP 限制
# bind 0.0.0.0
# 进程端口
port 26379
# 后台启动
daemonize yes
# 日志存储路径
logfile "/usr/local/redis/logs/redis-sentinel-26379.log"
# 数据存储路径
dir /usr/local/redis/data
# 进程编号记录文件
pidfile /var/run/redis-sentinel.pid
# 指示 Sentinel 去监视一个名为 mymaster 的主服务器
sentinel monitor mymaster 192.168.86.135 6379 2
# 访问主节点的密码
sentinel auth-pass mymaster 123456
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
# 配置开机启动
vim /etc/systemd/system/redis-sentinel.service
[Unit]
Description=redis-sentinel
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-sentinel /usr/local/redis/redis-sentinel.conf
PrivateTmp=true
[Install]
WantedBy=multi-user.target
# 启动
systemctl daemon-reload && systemctl enable --now redis-sentinel
# 检查一下
[root@redis-master logs]# pwd
/usr/local/redis/logs
[root@redis-master logs]# tail -f redis-sentinel-26379.log
定时任务
? Sentinel 内部有 3 个定时任务,分别是:
主观下线
所谓的主观下线(Subjectively Down,简称SDOWN):指的是单个 Sentinel 实例对服务器做出的下线判断,即单个 Sentinel 认为某个服务下线
客观下线
客观下线(Objectively Down,简称ODOWN):指的是多个Sentinel 实例在对同一个服务器做出SDOWN判断,并且通过命令互相交流之后,得出的服务器下线判断,然后开启 failover
仲裁
仲裁指配置文件中的 quorum 选项
quorum 的值一般设置为 Sentinel 个数的二分之一加 1
工作原理简介
当处于 TILT 模式,Sentinel 或持续监控所有状态
sentinel is-master-down-by-add
命令时,Sentinel 返回负值:因为这个Sentinel 所有进行的下线判断已经不再准确如果TILT可以正常维持30秒钟,那么 Sentinel 退出 TILT 模式,TILT 模式是 Sentinel 的被动模式
原文:https://www.cnblogs.com/q-linyu/p/15000261.html