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

Redis哨兵模式之Sentinel模式(二)

一、多节点哨兵如何配置?

哨兵配置原理图

  • 注意:sentinel哨兵模式的搭建是建立在redis主从复制节点配置基础而搭建,在主从配置中从库需要配置好replicaof关联上主库并关闭安全模式,然后设置好bind端口才能关联上机器,而这里的如果设置了一台哨兵机器,首先哨兵机器会通过monitor来监控你的主机器redis-master是否有宕机的可能(状态表现为sdown-,odown-),然后哨兵会自动对slave配置文件进行配置,定位到master机器,然后后期只针对master机器进行监控即可

## 关闭redis服务
pkill redis## 创建3个哨兵文件
sentinel_26379.conf、sentinel_26380.conf、sentinel_26381.conf模版如下:                                                                                                                                                                                            port 26379
daemonize yes
pidfile /var/run/redis-sentinel_26379.pid
logfile /var/log/sentinel_26379.log(哨兵日志)
dir /data/26379
sentinel monitor mymaster 10.0.0.7 6379 2(填写主库地址)
sentinel down-after-milliseconds mymaster 3000
acllog-max-len 128
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 180000
sentinel deny-scripts-reconfig yes
SENTINEL resolve-hostnames no
SENTINEL announce-hostnames no

哨兵节点突发宕机,如何裁决?

  • 如果发生了意外故障主节点突然宕机了,那么就只能通过投票选举让哨兵之间进行商量选举出最终的主机,然后switch-fork实现了主从间关系的转移,最后确定之后重新绑定master、slave之间的关系

redis配置文件详解

二、LNMP对接哨兵服务

根据博客一Redis哨兵模式之Sentinel模式(一)-CSDN博客的信息已经完成了主从节点与哨兵节点的调试工作,那么现在问题来了,我究竟如何能让php-fpm后端连接上redis哨兵来监控主master宕机并进行灵活的转换呢????

由于php-fpm后端管理页面无法直接填写哨兵来完成与redis协议,可以考虑的解决方案有两种要么对php源码文件编写(通常交给程序员解决),要么通过shell脚本来实现master 脚本的动态获取,然后将主master节点依照哨的情况进行动态切换

  • 首先需要完成后端php_redis连接的配置

  • 写shell脚本方式来动态获取哨兵

#!/bin/bash 
############################
## auto check redis master
############################
while true 
doREDIS_MASTER=$(grep -aiE "monitor mymaster" /usr/local/redis/sentinel.conf | awk '{print $4}')grep -aiE "$REDIS_MASTER" /etc/hostsif [ $? -ne 0 ];thensed -i '/redis.jf.com/d' /etc/hostsecho "$REDIS_MASTER" >>  /etc/hostsecho Change time:`date`fisleep 5
done    

三、MYSQL读写分离

  • 场景分析

当用户首次访问网页时,首先会将数据请求转发到到MySQL服务器如果首次数据量过大,那么就会导致首次服务器就会出现宕机风险,此时我们就引入了分库 ,分布式机器或MYSQL读写分离来进一步缓解服务器压力了

  • 原理分析

MYSQL读写分离的本质是将增删改的数据交给主库去处理,而数据查询就需要交给从库来做进一步的处理了,MYSQL读写分离实际上是基于MySQL主从复制而设定的,这样设计保证了在master端口写入数据,slave同步后,Web应用就可以直接读取从库的数据了。

  • mycat中间件

  • 实验部署

机器准备

master(主机)10.0.0.6
slave(从机)10.0.0.7
mycat机器10.0.0.8

实验步骤

##(mycat机器操作)
## Jdk环境安装部署
yum -y install java## mycat的jar包和zip包上传
mycat2-1.21-release-jar-with-dependencies.jar
mycat2-install-template-1.21.zip## 压缩mycat程序
unzip mycat2-install-template-1.21.zip 
\mv mycat /usr/local/## 拷贝mycat依赖环境
cp mycat2-1.21-release-jar-with-dependencies.jar /usr/local/mycat/lib/#授予Mycat bin目录下文件执行权限;
chmod +x /usr/local/mycat/bin/*#查看Mycat程序是否部署成功;
ls -l /usr/local/mycat/## (master机器操作)
## 创建专有用户
CREATE USER 'mycat'@'%' IDENTIFIED BY 'aaaAAA111.';
#授权用户访问;
GRANT XA_RECOVER_ADMIN ON *.* to 'mycat'@'%';
GRANT ALL PRIVILEGES ON *.* to 'mycat'@'%';
FLUSH PRIVILEGES;
# 创建数据原型库mycat----->mycat数据表存放地
create database mycat;## 修改mycat数据源配置(参见下图)vim /usr/local/mycat/conf/datasources/prototypeDs.datasource.json## 创建物理型数据库实现读写分离
## 拷贝模板文件,生成master和slave配置文件
\cp prototypeDs.datasource.json master.datasource.json
\cp prototypeDs.datasource.json slave-01.datasource.json

mycat配置文件修改

mycat-master数据源配置信息

mycat-slave数据源配置信息

配置物理数据源cluster集群信息

cd  /usr/local/mycat/conf/clusters
\cp prototype.cluster.json master-slave.cluster.json

## 配置cluster.conf文件配置信息
cat>master-slave.cluster.json<<EOF
{"clusterType":"MASTER_SLAVE","heartbeat":{"heartbeatTimeout":1000,"maxRetry":3,"minSwitchTimeInterval":300,"slaveThreshold":0},"masters":["master"],"replicas":["slave-01"],"maxCon":5000,"name":"master-slave","readBalanceType":"BALANCE_ALL","switchType":"NOT_SWITCH"
}
EOF

将物理数据库与集群绑定起来

cd /usr/local/mycat/conf/schemas

## 创建discuz框架文件
cat>discuz.schema.json<<EOF
{"schemaName": "discuz","targetName": "master-slave","normalTables": {}
}
EOF

mycat数据读取流程

修改 Mycat 登录用户信息

cd /usr/local/mycat/conf/users/

#修改root.user.json文件,代码;
{"dialect":"mysql","ip":null,"password":"aaaAAA111.","transactionType":"xa","username":"root"
}

有关mycat启动服务、查看状态、帮助情况

#启动服务;
/usr/local/mycat/bin/mycat start
#查看服务状态;
/usr/local/mycat/bin/mycat status
#查看Mycat帮助信息;
/usr/local/mycat/bin/mycat --help

 检查是否存在报错问题(无法连接上mysql数据库):

下面针对mycat服务启动时发现mysql服务器未创建用户解决方案

ALTER USER 'root'@'localhost' IDENTIFIED BY 'aaaAAA111.';

update mysql.user set host='%' where user="root";

检查mycat的监听端口

netstat -tnlp | grep -E "8066|9066"

mysql测试连接情况

验证读写分离

## 在slave中创建数据表
create table t1 (id char(20),name char(20),job char(10));
insert into t1 values (01,'wanger','IT'); 
insert into t1 values (02,'zhangsan','IT'); 

补充一个MySQL从服务器配置mycat读写分离

(配置了一主两从架构)

开放的一台新机器IP地址为10.0.0.5

## 安装mysql,mysql-server软件包
yum -y install mysql mysql-server## 将master机器加上读锁
flush  tables  with  read  lock;
## 数据备份完成之后解开锁
unlock tables;## 备份主表的数据
mysqldump -B -uroot -paaaAAA111. --all-databases > 0707all.sql## 将主表的数据发送给新机器
scp -r 0707all.sql 10.0.0.5:/root/## 重启mysql服务
service mysqld start## 编辑mysql配置,编写server-id配置
vim /etc/my.cnf.d/mysql-server.cnf ## 数据导入
mysql -uroot -p < 0707all.sql ## 与master机器绑定建立关联(根据master状态来决定)
change master to 
master_host='10.0.0.6',master_user='repl',master_password='123456',master_log_file='mysql-bin.000005',master_log_pos=2679454;
start slave;
show slave status\G;## 检查还无法启动
stop slave;
reset slave;##拷贝02数据源(修改name)
cp slave-01.datasource.json slave-02.datasource.json## 修改集群架构配置文件
cd ../clusters/
vim master-slave.cluster.json(在replica中加入slave-02) 

mysql-mycat引擎一主两从架构

    http://www.dtcms.com/a/268702.html

    相关文章:

  1. vue3 强制刷新 forceUpdate
  2. 关于使用shiro中Session的使用导致的Java 对象引用问题
  3. 【BTC】比特币系统的具体实现
  4. 《30天打牢数模基础-第一版》(已完结) 需要自取
  5. 浅析德语OCR技术的实现难点及其工作原理
  6. 怎么删除音频空白部分_去掉mp3空白部分
  7. FlashDepth | 混合模型+Mamba革新,24 FPS实时2K视频深度估计,超越Depth Anything v2
  8. 生成ssh并配置到vscode和gitlab详细步骤
  9. 什么是Web3?金融解决方案
  10. 内网使用rustdesk搭建远程桌面详细版
  11. RedisTemplate在Spring Boot中的五种数据结构全面详解
  12. 关于 c、c#、c++ 三者区别
  13. Docker项目部署(黑马商城项目为例)
  14. 可扩展 Redis 查询引擎的最佳实践
  15. 开源鸿蒙(OpenHarmony)桌面版全面解析:架构适配、设备支持与开发实战
  16. T01_神经网络
  17. Linux 77 FTP
  18. OpenCV 人脸分析------面部关键点检测类cv::face::FacemarkLBF
  19. 【Java面试】如何保证Java应用的安全性
  20. Node.js 后台系统 - 基本增删改查实现
  21. 【Python】类中的参数传递
  22. HBuilder Cli创建的uniapp项目,引入unoCss插件
  23. 在本地部署mcp服务器实现自然语言操作mysql数据库,轻松实现数据表的增~ 删~ 改~ 查~
  24. 七牛云Java开发面试题及参考答案
  25. Unity接入Steamworks.NET实现通信功能
  26. C#和SQL Server连接常用通讯方式
  27. MsSql 其他(2)
  28. Excel 的多线程特性
  29. JavaWeb笔记07
  30. LLM(大语言模型)能识别图像的核心原因:图像和文本记性特征识别且对其