实训日记day29

news2024/9/20 22:44:41

MySQL读写分离

1、读写分离的目的

数据库负载均衡:

当数据库请求增多时,单例数据库不能够满足业务 需求。需要进行数据库实例的扩容。多台数据库同时相 应请求。也就是说需要对数据库的请求,进行负载均衡 但是由于数据库服务特殊原因,数据库扩容基本要 求为:数据的一致性和完整性。所以要保证多台数据库 实例的数据一致性和完整性,以MySQL为例来说,官方 提供了主从复制机制。

读写分离:

数据库的负载均衡不同于其他服务的负载均衡,数 据要求一致性。基于主从复制的基础上,常见的数据库 负载均衡使用的是读写分离方式。写入主数据库,读取 到从数据库。可以认为数据库读写分离,是一种特殊的 负载均衡实现。
实际业务中,读写分离存在的一个问题,不够实时性。 
对于要求实时性高的业务 
①缓存 写主库 写缓存 读缓存 
②可以读主 
③添加完数据之后,有一个跳转等待的时间(5s),数 据正在审核中

2、读写分离常见的实现方式

①业务代码的读写分离

需要在业务代码中,判断数据操作是读还是写,读连接 从数据服务器操作,写连接主数据库服务器操作 以当前LNMP为例,需要通过PHP代码实现读写分离。

②中间件代理方式的读写分离

在业务代码中,数据库的操作,不直接连接数据库,而 是先请求到中间件服务器(代理) 由代理服务器,判断是读操作去从数据服务器,写操作 去主数据服务器, 也就是如下图示架构:
问:如何选择? 
①业务实现读写分离,操作方便,成本低,当前的开发 框架基本支持读写分离 
②中间件代理服务器,除了能够实现读写分离,还可以 作为数据库集群的管理平台

MySQL读写分离案列实现

0、搭建M-S复制: 主从复制的原理 :主服务器开启bin-log(记录了写操 作) 从服务器获取到主服务器的bin-log 记录到relaylog中。从服务器在通过异步的线程方式,对于relay-log 进行重放操作。
1、master配置
①在master服务器授权,slave服务器replication slave权限
slave是通过MySQL连接登录到master上来读取二进制 日志的,因此需要在 master上给slave配置权限
mysql > grant replication slave on *.* to 'slave'@'192.168.17.%'identified by '123456';
②master服务器打开bin-log日志,并标识server-id
shell > vim /etc/my.cnf
配置文件内容
[mysqld] 
log-bin = mysql-index 
server-id = 1
注意重启mysql使配置生效
③制作一个完整的备份( 如果确认主从的数据库,默认开始数据是一致的,可以 不做备份 )
shell > mysqldump -uroot -p'123456' --alldatabases > /root/mysql.sql
④查看master上的bin-log及其position位置
mysql > show master status;
查看并记录File的值,Position的值。之后需要在从服务 器上,指向这些信息
File 记录到的bin-log日志文件名称 
Position bin-log日志文件所记录的位置
2、slave配置
①恢复备份文件( 如果slave和master的数据本身就是相同的,可以不选择 备份和导入 )
②配置server-id,标识服务器
shell > vim /etc/my.cnf
配置文件内容
[mysqld] 
server-id=2
由于是克隆获取的MySQL实例,所以auto.conf里记录的 UUID一样,需要删除/usr/local/mysql/data/auto.conf 文件,否则主从无法识别互相身份,重启自动生成新的 即可。
③配置slave replication
mysql > stop slave; 
mysql> change master to 
master_host='192.168.17.101' ,master_user='sl ave1' ,master_password='123456' ,master_log_fi le='mysql-bin.000002' ,master_log_pos=333; 
mysql > start slave;
参数说明 
master_host 主master的IP 
master_user 主master允许登录,拥有replication slave权限 
master_password 用户的密码 
需要通过mysql > show master status; 在master执行 
master_log_file 主master记录的bin-log日志文件名称 
master_log_pos 主master记录的bin-log日志文件对 应的位置
④启动replication,并检查结果
mysql > show slave status\G;
查看到两个yes,主从复制成功。否则,查看显示最下面 信息,通过error信息进行排查问题。

简单业务代码实现

示例语法代码:
将此代码上传到web服务器,测试是否可以实现读写分离。注意修改对应的连接地址、用户名称、密码等信息。
#命令行执行php代码的方式
#php需要提前配置环境变量 xxx.php为需要执行的php 脚本文件
shell > php xxx.php

框架配置实现读写分离

①通过查看thinkphp5手册找到处理方案 
②修改项目配置文件 (一定要先去确定主从数据库的数据一致(tp5shop), 用户名称和密码可以进行登录使用)
shell > vim /usr/local/nginx/html/tp5shop/application/da tabase.php
配置文件示例
return [
    // 数据库类型
    'type' => 'mysql' ,
    // 服务器地址
    // 1、主从数据库的连接地址 主在前 从在后
    'hostname' => '192.168.17.100,192.168.17.105' ,
    // 2、主从数据库的名称、用户、密码一样的话,只 配置一份即可。如果不一样,按照先后顺序,逗号分隔
    // 数据库名
    'database' => 'tp5shop' ,
    // 用户名
    'username' => 'tp5shop' ,
    // 密码
    'password' => '$Abc3721' ,
    // 端口
    'hostport' => '3306' ,
    // 连接
    dsn 'dsn' => '' ,
    // 数据库连接参数
    'params' => [],
    // 数据库编码默认采用utf8
    'charset' => 'utf8' ,
    // 数据库表前缀
    'prefix' => 'tpshop_' ,
    // 数据库调试模式
    'debug' => true,
    // 3、项目框架的业务代码实现读写分离,使用的是 分布式(主从服务器) 配置为1
    // 数据库部署方式:0 集中式(单一服务器),1 分布 式(主从服务器)
    'deploy' => 1,
    // 4、数据库读写分离是业务代码实现的,配置为 true
    // 数据库读写是否分离 主从式有效
    'rw_separate' => true,
    // 读写分离后 主服务器数量
    'master_num' => 1,
    // 指定从服务器序号
    'slave_no' => '' ,
    // 是否严格检查字段是否存在
测试down主库,看从库是否可以访问。thinkphp5中, 如果slave宕机,master提供读服务。

MyCAT实现读写分离

jdk安装

①下载安装jdk 
https://www.oracle.com/technetwork/java/javase/do wnloads/jdk8-downloads-2133151.html 
选择下载x64架构.tar.gz包 
上传mycat和jdk到soft目录下 
②配置环境变量 
shell > tar xvf jdk-8u192-linux-x64.tar.gz
shell > mv jdk1.8.0_192 /usr/local/java
②配置环境变量
#追加环境变量
shell > echo
"PATH=/usr/local/java/bin:$PATH" >> /etc/profile
shell > source /etc/profile
#检测java环境变量 如果看到版本信息即为成功
shell > java -version

mycat安装和测试启动

①解压安装MyCAT( 上传jdk和mycat安装包 )
shell > tar xvf Mycat-server-1.6.5-release20180122220033-linux.tar.gz -C /usr/local
#解压并且添加到指定的位置
[root@mycat ~]# ls 
anaconda-ks.cfg 
frp 
initserver.sh 
jdk1.8.0_192 
jdk-8u192-linux-x64.tar.gz 
mycat 
Mycat-server-1.6.5-release20180122220033-linux.tar.gz 
[root@mycat ~]# cp -r jdk1.8.0_192/ /usr/local/jdk 
[root@mycat ~]# cp -r mycat/ /usr/local/
②软件目录介绍
bin 相关软件管理命令等 
conf 配置文件目录 
logs 日志目录
③ 查看并且配置jdk环境
[root@mycat ~]# ls /usr/local/jdk/
bin             man
COPYRIGHT       README.html
include         release
javafx-src.zip  src.zip
jre             THIRDPARTYLICENSEREADME-JAVAFX.txt
lib             THIRDPARTYLICENSEREADME.txt
LICENSE
[root@mycat ~]# sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile
[root@mycat ~]# source /etc/profile
[root@mycat ~]# $JAVA_HOME
-bash: /usr/local/jdk: 是一个目录
[root@mycat ~]# sed -i '$aexport PATH=$PATH:$JAVA_HOME/bin' /etc/profile
[root@mycat ~]# source /etc/profile
[root@mycat ~]# $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/jdk/bin: 没有那个文件或目录
④ 测试启动myca就可以了
[root@mycat ~]# ls /usr/local/mycat/ bin catlet conf lib logs version.txt
[root@mycat ~]# ll /usr/local/mycat/
[root@mycat ~]# ls /usr/local/mycat/bin/
[root@mycat ~]# /usr/local/mycat/bin/mycat console
找到server.xml和schema.xml更改
shell > /usr/local/mycat/conf 
shell > vim server.xml
schema=>dataNode=>dataHost=>writeHost=>rea dHost
⑥ 启动服务
/usr/local/mycat/bin/mycat start
⑦ 检查启动的是否成功
[root@mycat ~]# netstat -lnput|grep 8066 
tcp6 0 0 :::8066 
:::* LISTEN 
4547/java
⑧ 连接测试
[root@client ~]# cd mysql-8.0.33-linuxglibc2.12-x86_64/ 
[root@client mysql-8.0.33-linuxglibc2.12-x86_64]# cd bin/ 
[root@client bin]# ./mysql -h10.1.1.60 - P8066 -uzhangmin -pzhangmin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2044496.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读零信任网络:在不可信网络中构建安全系统20攻击者视图

1. 攻击者视图 1.1. IETF要求所有提交的RFC都必须包含“安全风险考虑" 1.1.1. 明确指出了潜在陷阱、危险和警告,这对系统的实现和部署至关重要,有助于运营者确保最终的系统不会偏离设计之初的安全特性 1.1.2. 表明系统设计者对于可能存在的攻击进…

leetcode387. 字符串中的第一个唯一字符,哈希表

leetcode387. 字符串中的第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引 。如果不存在,则返回 -1 。 示例 1: 输入: s “leetcode” 输出: 0 示例 2: 输入: s “loveleetcode” 输出: 2 示例…

可能是全网最好用的 5 款免费数据恢复软件

不小心将 USB 中的文件删除了,这个时候要怎么办?首先我们不要保存 USB 磁盘上的任何新数据,否则丢失的数据文件将被覆盖。然后再利用专业的数据恢复工具进行恢复,这里为大家整理了全网最被推荐的5款免费的数据恢复软件。 1.福昕数…

vmware虚拟机玩GPU显卡直通

安装好exsi以后,找到管理----硬件-----PCI设备,勾选想要直通的显卡,然后点击“切换直通” 切换以后可以看到列表中的直通列显示为活动就对了。 然后编辑虚拟机设置,CPU关闭硬件虚拟化(向客户机操作系统公开硬件辅助的…

【python】在Windows中定时执行Python脚本的详细用法教学

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

高可用集群keepalived(知识点+实验)详细版

高可用集群KEEPALIVED 一.高可用集群 1.1 集群类型 LB:Load Balance 负载均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream) HA:High Availability 高可用集群 数据库、Redis SPoF: Single Point of Failure&…

在win10中,安装mingw-get-setup

安装windows下的VSCode软件 Windows下的VSCode安装后,还需要安装gcc编译器和g编译器。 gcc:编译C语言程序的编译器; g:编译C代码的编译器; 1、在Windows下安装VSCode; 2、安装插件有下面几个&#xff1a…

iPhone SE 4可能无法使用Apple Intelligence RAM可能被降级

在设备上运行Apple Intelligence的先决条件是RAM容量和神经引擎的能力。这些要求解释了为什么苹果的生成AI功能套件将首先在iPhone 15 Pro和iPhone 15 Pro Max上可用,因为这两款手机都配备了8GB RAM和A17 Pro。 此前有消息称,iPhone SE 4也将配备相同容…

Stable Diffusion入门:新手必备的几种插件,让小白快速上手(附带地址)

Stable Diffusion是一款强大的AI绘画工具,对于初学者而言,掌握这些模型和插件的使用,是解锁创作潜力、迅速提升技能水平的关键所在! 首先我们简单介绍一下插件是什么?如何安装插件? 插件(Plug…

VUE最强学习宝典01

目录 1.Vue是什么? 2. 两种使用方法 3.创建第一个vue实例 4.补充小知识 5.错误查询 1.Vue是什么? 概念:动态构建用户界面的渐进式 JavaScript 框架 。 优点:大大提升开发效率(70%) 缺点:需要理解记忆规划-->官…

开学季必备:全能耐用运动耳机推荐!

大家好!开学季快到了,我们在学校的生活不仅仅包括课业,还有很多运动和体育项目是不可避免的。运动时,如果没有音乐的陪伴,难免会觉得枯燥乏味。作为一个对运动耳机有较高要求的学生,我最近发现了一款非常值…

VLM 系列——MiniCPM-Llama3-V 2.6——论文解读——前瞻(源码解读)

一、概述 1、是什么 是一款面向终端设备的多模态大型语言模型(MLLM),论文暂未发布 ,它专注于实现在手机等资源受限设备上的高级AI功能,参数8B(qwen2 7B SigLIP ViT-400m/14 视觉标记压缩层 )…

HOW - 用腾讯蓝盾部署一个 Web 应用

目录 一、介绍二、项目、流水线和 Stage1. 项目(Project)2. 流水线(Pipeline)3. Stage(阶段)示例:配置一个简单的 CI/CD 流程的基本步骤总结 三、一条完整的流水线包括什么 Stage1. 源代码管理&…

29岁的服务员到网络安全工程师,大龄转行成功逆袭

大龄转行,一直在网络上备受争议。 转换职业赛道,从学习能力和试错成本角度来看,确实越早行动越有利,而大龄转行无疑伴随着较高的风险。 然而,大龄转行并非无路可走:古有苏老泉,年近三十方才开始…

数据结构之---堆(2)

一、出堆 出堆是指将堆顶数据出堆。出堆完成后要保证剩余数据还是满足原来堆的性质。所以我们把堆顶数据和堆底最后一个数据交换,取出新堆底数据,之后通过向下调整算法将剩下的数据重新排列成一个堆。 大堆经过出堆操作得出的数据是升序的 小堆经过出堆…

聚观早报 | 一加13配置细节曝光;谷歌首推人工智能手机

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 8月15日消息 一加13配置细节曝光 谷歌首推人工智能手机 MONA M03汽车即将上市 iPhone SE 4将升级8GB运行内存 R…

redis事件机制

redis服务器是一个由事件驱动(死循环)的程序,它总共就干两件事: 文件事件:利用I/O复用机制,监听Socket等文件描述符发生的事件,如网络请求时间事件:定时触发的事件,负责完成redis内部定时任务&…

MCU复位RAM会保持吗,如何实现复位时变量数据保持

在使用MCU时,通常大家默认MCU复位时RAM会被复位清零,那实际MCU复位时RAM是什么状态?如何让mcu复位时RAM保持不变呢? MCU复位有电源复位、Standby复位、内核复位、看门狗复位、引脚复位等。 其中内部会有掉电动作的复位有电源复位…

Linux知识复习第5期

目录 1、实验环境 2、日志存放 3、自定义日志采集路径 1、实验环境 hostnamectl hostname node1.zx.org # 设置主机名 vim /etc/hosts # 域名解析修改 hostname -I # 显示ip地址 2、日志存放 /var/log/messages 系统服务日志,常规…

快速MD5强碰撞生成器:fastcoll

问:可以制作两个具有相同哈希值的不同文件吗? 答:可以。 在密码学中,哈希函数将输入数据转换成固定长度的字符串。但由于输入的无限性和输出的固定性,不可避免地会有不同输入产生相同的哈希值,这就是碰撞。…