当前位置: 首页 > backend >正文

redis-单节点-主从节点-哨兵模式

场景:先做好单节点,再做主从,二进制安装方式。ip和密码根据需求更改


=================单节点======================================
https://www.cnblogs.com/weibin1/p/10249590.html
【下载、解压、安装】
cd /usr/local
credis-4.0.6.tar.gz
wget http://download.redis.io/releases/redis-7.4.1.tar.gz
tar zxvf redis-4.0.6.tar.gz
cd redis-4.0.6
make && make install

【末尾追加环境变量】
vim /etc/profile
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
export PATH=/usr/local/redis/src:$PATH
source /etc/profile #生效

【日志和pid】
mkdir -p /data/redis && touch /data/redis/redis.log
chown 644 -R /data/redis/redis.log
touch /data/redis/redis.pid
chown 644 /data/redis/redis.pid

【配置文件】grep -vE '^$|^#' redis.conf   #文件名,过滤#号开头和空行
cp redis.conf /etc/redis.conf  #!
vim /etc/redis.conf
daemonize yes             #以后台daemon方式运行redis
maxmemory 100mb     #最大使用内存
requirepass  密码          #设置密码
bind 0.0.0.0           #监听地址--0.0.0.0 
logfile "/data/redis/redis.log"      #RDB文件存放路径
pidfile /data/redis/redis6379.pid  
save 900 1  #900秒有1次更改就保存数据
save 300 10
save 60 10000


【systemd服务文件】
vim /etc/systemd/system/redis.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/bin/redis-server /etc/redis.conf
ExecStop=/usr/local/bin/redis-cli shutdown
PIDFile=/data/redis/redis6379.pid  #在redis.conf文件查看
ExecStartPost=/bin/sleep 2

Restart=always
RestartSec=10


[Install]
WantedBy=multi-user.target

#systemd服务管理
systemctl daemon-reload
systemctl enable --now redis
systemctl start redis && systemctl status redis


#不使用systemd文件管理redis的方式,就用这种方式管理:
#redis-server /etc/redis.conf >> /data/redis/redis.log &          #后台启动redis,与redis.conf里的logfile一致路径
#nohup redis-server /etc/redis.conf >>/data/redis/redis.log 2>&1 & #后台运行启动,以/etc/redis.conf配置文件启动redis服务,日志输出到data/redis目录下
#停止redis/
ps -aux | grep redis
redis        849  0.1  0.2 263696  7704 ?        Ssl  Aug21 146:20 /usr/bin/redis-server 0.0.0.0:6379
root      432175  0.0  0.0 221940  1180 pts/0    S+   15:11   0:00 grep --color=auto redis
849--redis的进程号
kill 849  #杀掉进程

redis-cli -h 10.88.66.76 -p 6379 -a 密码    #命令行登录与退出
10.88.66.76:6379> exit


【热更新redis配置】
1.进入redis
redis-cli -h 10.10.10.150 -p 6379 -a 123456
#CONFIG SET maxmemory 2gb  #改内存,CONFIG GET maxmemory验证
#CONFIG SET requirepass new_password #改密码
#CONFIG SET port 6380  #看需求改端口


【卸载redis服务】直接把相关目录和文件删除即可

【密码登录认证】
redis-cli -h 192.168.0.67 -p 6379
auth 你的密码

【改密码】
redis-cli -h 192.168.0.67 -p 6379
auth 123456
config set requirepass 新密码
config get requirepass
auth 新密码   #验证


#数据导出---一般不需要导出,作为缓存的。java服务进来以后,就会产生数据了


=================主从节点=====================================
logfile "/var/log/redis.log"  #RDB存储路径
https://www.cnblogs.com/weibin1/p/10441832.html

【先停服务再做主从】
redis-cli -h 10.88.66.76 -p 6379 -a 密码    #停止redis服务
10.88.66.76:6379> shutdown

【配置文件】grep -vE '^$|^#' filename
master#vim redis.conf
masterauth "123456"                    # 其它redis视我为master时的验证密码
requirepass "123456"                    # 本机redis的登录密码

slaveof#vim redis.conf
masterauth "123456"                    # 其它redis视我为master时的验证密码
requirepass "123456"                    # 本机redis的登录密码
slaveof 192.168.1.9 6379               # master的ip和redis端口

【后台启动redis】
redis-server /etc/redis.conf >> /data/redis/redis.log &  #如果直接删除了redis目录后,第二次启动时,要把原有的redis.log删除。不然冲突,存储不了数据

【验证】
slaveof#redis-cli -h 主ip -a 主密码
info replication                               #看身份

【停止服务】
redis-cli -h 服务ip -p 6379 -a 密码  #命令行登录与退出
服务ip:6379> exit
redis-cli -h 服务ip -p 6379 -a 密码  #停止redis服务
服务ip:6379> shutdown

#卸载redis服务---直接把相关目录和文件删除即可

======================哨兵======================
哨兵是什么?
1. 哨兵是redis用于主从或集群的不可缺少的故障切换机制。
2. 单台redis的话,程序连接的是redis服务的6379端口;主从或集群的话,程序不再直接连接redis服务了,
   而要连接的是多个哨兵,哨兵会告诉程序端找哪个redis服务。

redis主哨兵
master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
master ~]# vim /etc/sentinel.conf
port 6380
sentinel monitor mymaster 本机ip 6380 2 #改
sentinel auth-pass mymaster 123456 #增
daemonize yes #增

slave ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf              #grep -vE '^$|^#' filename #去除空行和#开头行
slave ~]# vim /etc/sentinel.conf
port 6381
sentinel monitor mymaster 192.168.1.9 6380 2       # master的ip和redis端口,2表示,几台slaveof认为master挂了才算
sentinel auth-pass mymaster 123456 
daemonize yes


【测试故障】

起哨兵服务
master ~]#redis-sentinel /etc/sentinel.conf >> /dev/null &
slave ~]#redis-sentinel /etc/sentinel.conf >> /dev/null &


master服务停掉
redis-cli -h 192.168.61.101 -a 1
192.168.1.9:6379> shutdown
not connected> quit
[root@slaveof ~]#
5秒后,是否升级master
redis主slave:6379> info replication
# Replication
role:master

redis从slave:6379> info replication
# Replication
role:master

注意1: master角色是非抢占模式

即:一旦集群中存在master,则其余节点视其为master,除非master挂掉

注意2: 从库是只读的

 }


======================配置文件详解==========================

vim /usr/local/redis/redis.conf
# master节点配置
bind 0.0.0.0 -::1                # 监听ip,多个ip用空格分隔
daemonize yes               # 允许后台启动
logfile "/usr/local/redis/redis.log"                # 日志路径
dir /usr/local/redis/data                 # 数据库备份文件存放目录
masterauth 123123               # slave连接master密码,master可省略
requirepass 123123              # 设置master连接密码,slave可省略
appendonly yes                  # 在/usr/local/redis/data目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中

vim /usr/local/redis/redis.conf
#slave1节点配置
bind 0.0.0.0 -::1                # 监听ip,多个ip用空格分隔
daemonize yes               # 允许后台启动
logfile "/usr/local/redis/redis.log"      # 日志路径
dir /usr/local/redis/data                 # 数据库备份文件存放目录
replicaof 192.168.1.21 6379   #  replicaof用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点。就是设置master节点
masterauth 123123               # slave连接master密码,master可省略
requirepass 123123              # 设置master连接密码,slave可省略
appendonly yes                  # 在/usr/local/redis/data目录生成appendonly.aof文件,将每一次写操作请求都追加到appendonly.aof 文件中

vim /usr/local/redis/redis.conf
#slave2节点配置
bind 0.0.0.0 -::1                # 监听ip,多个ip用空格分隔
daemonize yes               # 允许后台启动
logfile "/usr/local/redis/redis.log"                # 日志路径
dir /usr/local/redis/data                 # 数据库备份文件存放目录
replicaof 192.168.1.21 6379   #  replicaof用于追随某个节点的redis,被追随的节点为主节点,追随的为从节点。就是设置master节点
masterauth 123123               # slave连接master密码,master可省略
requirepass 123123              # 设置master连接密码,slave可省略
appendonly yes                  # 在/usr/local/redis/data目录生成appendonly.aof文件,将每

# 三个节点都执行
cat >/usr/local/redis/sentinel.conf<<EOF
port 26379
daemonize yes
logfile "/usr/local/redis/sentinel.log"
# sentinel工作目录
dir "/usr/local/redis/sentinel"
# 判断master失效至少需要2个sentinel同意,建议设置为n/2+1,n为sentinel个数
# sentinel monitor <master-name> <ip> <port> <count>
sentinel monitor mymaster 192.168.1.21 6379 2
sentinel auth-pass mymaster 123123
# 判断master主观下线时间,默认30s
sentinel down-after-milliseconds mymaster 30000
EOF
==========================================

redis主的哨兵配置文件需要改动的地方如下,其余保持默认即可

[root@master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
[root@master ~]# vim /etc/sentinel.conf
bind 192.168.1.9
sentinel monitor mymaster 192.168.1.9 6379 2
sentinel auth-pass mymaster 123456
logfile "/var/log/sentinel.log"
daemonize yes

redis主的哨兵配置文件需要改动的地方如下,其余保持默认即可

[root@master ~]# cp /usr/local/redis-4.0.6/sentinel.conf /etc/sentinel.conf
[root@master ~]# vim /etc/sentinel.conf
bind 192.168.1.9
sentinel monitor mymaster 192.168.1.9 6379 2
sentinel auth-pass mymaster 123456
logfile "/var/log/sentinel.log"
daemonize yes

----遇到的报错:

systemd[1]: Can't open PID file /data/redis/redis6379.pid (yet?) after start: No such file or directory

因为:pid文件权限不足,644/755/777权限,或者没有文件,systemd在启动 Redis 服务时,PID 文件尚未被 Redis 进程创建。进程慢了,在systemd的redis服务文件里添加:

vi /etc/systemd/system/redis.service

[Service]
ExecStartPost=/bin/sleep 2

再重载重启查看redis-->systemctl daemon-reload && systemctl restart redis && systemctl status redis


 

http://www.xdnf.cn/news/3237.html

相关文章:

  • webrtc ICE 打洞总结
  • 【网络原理】 《TCP/IP 协议深度剖析:从网络基础到协议核心》
  • 楼宇智能化一、二章【期末复习】
  • LeetCode —— 572. 另一棵树的子树
  • 【昇腾】Benchmark
  • 算法导论第6章思考题
  • linux find命令妙用
  • 公司运营-税务篇
  • winget使用
  • 【人脸去遮挡前沿】三阶段级联引导学习如何突破真实场景遮挡难题?
  • 从零开始学Python游戏编程49-二维数组3
  • 【数学建模国奖速成系列】优秀论文绘图复现代码(三)
  • 4月30日星期三今日早报简报微语报早读
  • 关于PyCharm新版本出现大量空的`jcef_xx.log`文件的解决方法
  • 【Vue2】1-创建一个Vue实例
  • 麒麟、UOS系统在线打开word文件并提取修订痕迹
  • 机器视觉橡胶制品检测的应用
  • 【来自AI】RS485,Rs232,Modbus的区别和联系是什么
  • 小知识总结记录
  • 用Python构建自动驾驶传感器融合算法:从理论到实践
  • 第五届图像、视觉与智能系统国际会议(ICIVIS 2025)参会通知
  • Poco C++全面开发指南:网络应用开发
  • 综合开发-手机APP远程控制PLC1500柱灯的亮灭
  • 嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战
  • 基于UNet算法的农业遥感图像语义分割——补充版
  • Mysql数据库高可用解决方案-Mysql Router
  • 智能参谋部系统架构和业务场景功能实现
  • MCP Server 的 Stdio 与 SSE:两种通信方式的本质差异与技术选型指南
  • leetcode42-接雨水
  • OCR身份证识别(正反面)_个人证照OCR识别_开放API接口使用指南