linux中主从复制的架构和读写分离的方式

读写分离

    • 互相主从
      • 架构
      • 注意点
    • 双主双从
      • 架构
      • 注意点
    • 一主多从
      • 架构
      • 注意点
  • 读写分离
      • 概念
      • 部署jdk环境
        • 上传文件,解压文件
        • 配置环境变量
      • 部署mycat环境
      • mycat配置文件
        • 给所有数据库创建访问用户
        • 配置 server.xml
        • 配置 schema.xml
        • 负载均衡
        • 测试

互相主从

架构

iprole
ip1ip2的主库、ip2的从库
ip2ip1的主库、ip2的从库

注意点

两个服务器上都要创建远程登录拷贝用户

两个数据库都在写入数据,可能会造成主键冲突,可以在my.cnf配置文件中写入

auto_increment_increment=2    //设置初始步长值 
auto_increment_offset=1       //设置偏移量

这样就可以避免主键冲突

双主双从

架构

iprole
ip1ip3和ip2的主库,ip2的从库
ip2ip4和ip1的主库,ip1的从库
ip3ip1的从库
ip4ip2的从库

注意点

因为ip1和ip2的主库要拷贝多份二进制binlog日志,在my.cnf里添加参数

log-slave-updates //binlog可以多次拷贝,主库复制的内容也会写入从库binlog

一主多从

架构

iprole
ip1ip2和ip3的主库
ip2ip1的从库
ip3ip1的从库

注意点

因为ip1的主库要拷贝多份二进制binlog日志,在my.cnf里添加参数

log-slave-updates //binlog可以多次拷贝,主库复制的内容也会写入从库binlog

读写分离

概念

一主一从的基础上实现读数据和写数据访问不同的服务器

Mycat 是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的数据库系统,Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。MyCAT是使用JAVA语言进行编写开发,使用前需要先安装JAVA运行环境(JRE),由于MyCAT中使用了JDK7中的一些特性,所以要求必须在JDK7以上的版本上运行。

部署jdk环境

上传文件,解压文件
tar -xf jdk-8u181-linux-x64.tar.gz
配置环境变量
vim /etc/profile.d/java.sh     //java环境配置export JAVA_HOME=/opt/jdk1.8.0_211
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile.d/java.sh   //使环境变量生效

部署mycat环境

tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
vim /etc/profile     //环境配置export JAVA_HOME=/opt/mycat
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarsource /etc/profile    //重启环境变量

mycat配置文件

mycat/conf/server.xml      //定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接mycat的用户信息,简单来说,就是假的信息mycat/conf/schema.xml       //定义逻辑库,表、分片节点等内容。
给所有数据库创建访问用户
grant all on *.* to '用户名'@'%' identified by "密码";
配置 server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!-- 登录mycat的用户和密码--><user name="root" defaultAccount="true"><property name="password">0</property>
<!-- 登录mycat的用户看到的数据库名--><property name="schemas">TESTDB</property></user><user name="user"><property name="password">user</property><property name="schemas">TESTDB</property><property name="readOnly">true</property></user>
</mycat:server>
配置 schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--逻辑库和分表设置,与server.xml一致--><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
<!--数据节点,database是真实存在的组,真组和假组在这里建立连接--><dataNode name="dn1" dataHost="localhost1" database="stu" /><!--主机组,注意那么和数据节点的dataHost相同即可,balance负载均衡--><dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"><!--健康检查--><heartbeat>select user()</heartbeat><!--读写配置,此处以双主双从举例,此处的用户数据库必须存在-->          <writeHost host="hostM1" url="master1:3306" user="mycat" password="0"><readHost host="hostS1" url="slave1:3306" user="mycat" password="0"/></writeHost><writeHost host="hostM2" url="master2:3306" user="mycat" password="0"><readHost host="hostS2" url="slave2:3306" user="mycat" password="0"/></writeHost></dataHost>
</mycat:schema>
负载均衡
balance 属性
负载均衡类型,目前的取值有 3 种:
1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
4. balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。
5. balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。writeType 属性
负载均衡类型
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准.
2. writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐。
测试
mysql -uroot -p0 -hmycat -P8066 TESTDB    //此处登录的ip地址是mycat存在的主机,登录的用户是在mycat/conf/server.xml中写的假的数据库登录信息关闭双主双从的主从复制,服务器分别创建数据库,用负载均衡,进行检查
0:只有正在写的数据库
1:处理正在写的数据库都有
2:所有数据库
3:所有读的数据库

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

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

相关文章

【开源】基于JAVA语言的大学生相亲网站

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询会员4.2 查询相亲大会4.3 新增留言4.4 查询新闻4.5 新增新闻 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的大学生相亲网站&#xff0c;包含了会员管理模块、新闻管…

如何使用GPT4写一篇综述

使用 GPT-4 或任何其他高级语言模型来撰写一篇综述文章&#xff0c;需要遵循一系列的步骤来确保内容的准确性、深度和组织性。以下是一些指导步骤&#xff1a; 确定主题和范围 明确你想要综述的主题。这可以是一个科学领域的特定方面、技术发展、理论进展等。 确定综述的范围和…

管理类联考和普通考研区别有哪些?对比分析!

在当今社会&#xff0c;越来越多的大学生选择继续深造&#xff0c;提升自己的学历和能力。其中&#xff0c;管理类联考和考研是两个常见的选择。然而&#xff0c;许多人对于这两者的区别并不了解&#xff0c;因此在选择的时候往往会感到困惑。本文将详细介绍管理类联考和考研区…

图灵日记之java奇妙历险记--输入输出方法数组

目录 输入输出输出到控制台从键盘输入使用 Scanner 读取字符串/整数/浮点数使用 Scanner 循环读取 猜数字方法方法定义方法调用的执行过程实参和形参的关系(重要)方法重载 数组数组的创建数组的初始化动态初始化静态初始化 数组的使用元素访问遍历数组 数组是引用类型null数组应…

龙芯杯个人赛串口——做一个 UART串口——RS-232

文章目录 Async transmitterAsync receiver1. RS-232 串行接口的工作原理DB-9 connectorAsynchronous communicationHow fast can we send data? 2.波特率时钟生成器Parameterized FPGA baud generator 3.RS-232 transmitter数据序列化完整代码&#xff1a; 4.RS-232 receiver…

CEC2013(python):六种算法(RFO、PSO、CSO、WOA、DBO、ABC)求解CEC2013

一、六种算法简介 1、红狐优化算法RFO 2、粒子群优化算法PSO 3、鸡群优化算法CSO 4、鲸鱼优化算法WOA 5、蜣螂优化算法DBO 6、人工蜂群算法 &#xff08;Artificial Bee Colony Algorithm, ABC&#xff09; 二、6种算法求解CEC2013 &#xff08;1&#xff09;CEC2013简…

一篇讲透:箭头函数、普通函数有什么区别

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热衷分享有趣实用的文章&#xff0c;希望大家多多支持&#xff0c;一起进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 什么是箭头函数 箭头函数和普通函数的区别 更简洁的语法 箭头函数…

Rancher小白学习之路

官网&#xff1a;http://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexhttp://docs.rancher.cn/docs/rancher1/rancher-service/load-balancer/_indexRancher2.5集群搭建&K3S生产环境搭建手册 - 知乎 【rancher教程】十年运维大佬两小时带你搞定ran…

西南科技大学计算机网络实验一 (Wireshark使用入门与HTTP协议分析)

一、实验目的 学习和掌握网络抓包和协议分析软件Wireshark的基本使用;利用Wireshark软件进行HTTP协议分析。 二、实验环境 与因特网连接的计算机网络系统;主机操作系统为windows;Wireshark、IE等软件。 三、实验内容 Wireshark的安装与界面的熟悉; Wireshark进行分组捕…

模板方法模式(Template Method)

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法的框架,将一些步骤延迟到子类中实现。这样,子类可以在不改变算法结构的情况下重新定义算法的某些特定步骤。 模板方法模式通常涉及以下两个角色: 抽象类(Abstract Class):定义模板…

C# 抽象类与接口

抽象类和接口是C#“封装、继承、多态”三大特性中比较重要的组成部分。抽象类和接口这两种类型用于完全不同的目的。抽象类主要用作对象的基类&#xff0c;贡献某些主要的特性&#xff0c;例如共同的目的和结构。接口则主要是用于类&#xff0c;为这些类去添加不同的方法&#…

Order Delivery for WooCommerce电商商城订单一体化交付解决方案

Order Delivery for WooCommerce电商商城订单一体化交付解决方案 Order Delivery for WooCommerce电商商城订单一体化交付解决方案使客户可以在结账过程中轻松选择订单的交付日期和时间。 Order Delivery for WooCommerce电商商城订单一体化交付解决方案 让您的客户以流畅且…

数据库原理及应用·关系数据库设计理论

5.1 数据依赖 5.1.1 关系模式中的函数依赖 函数依赖的概念&#xff1a;设X,Y是关系R的两个属性集合&#xff0c;当任何时刻R中的任意两个元组中的X属性值相同时&#xff0c;则它们的Y属性值也相同&#xff0c;则称X函数决定Y&#xff0c;或Y函数依赖于X&#xff0c;记为X→Y。…

分割时间方法

输入开始时间和结束时间以及时间间隔&#xff0c; 并以数组形式输出其中的时间段 const generateTimeSlots (startHour: number, endHour: number, intervalMinutes: number) > {const slots [];let currentTime new Date().setHours(startHour, 0, 0, 0);const endTime…

redis—String字符串

目录 前言 1.字符串数据类型 2.常见命令 3.典型应用场景 前言 字符串类型是Redis最基础的数据类型&#xff0c;关于字符串需要特别注意: 1)首先Redis中所有的键的类型都是字符串类型&#xff0c;而且其他几种数据结构也都是在字符串类似基础.上构建的&#xff0c;例如列表…

【2024 行人重识别最新进展】ReID3D:首个关注激光雷达行人 ReID 的工作!

【2024 行人重识别最新进展】ReID3D&#xff1a;首个关注激光雷达行人 ReID 的工作&#xff01; 摘要&#xff1a;数据集&#xff1a;方法模型&#xff1a;多任务预训练&#xff1a;ReID Network&#xff1a; 实验结果&#xff1a;结论&#xff1a; 来源&#xff1a;Arxiv 2023…

图像分割算法

(车载)毫米波雷达的静止“目标”滤除问题 https://blog.csdn.net/xhblair/article/details/130849777 车载与体征/手势检测 毫米波雷达信号处理流程 csdn链接 专利-一种基于FPGA的步进频高分辨近程雷达探测系统和方法与流程 https://www.xjishu.com/zhuanli/52/2022114681…

drf知识--05

两个视图基类 # APIView&#xff1a;之前一直在用---》drf提供的最顶层的父类---》以后所有视图类&#xff0c;都继承自它 # GenericAPIView&#xff1a;继承自APIView--》封装 继承APIView序列化类Response写接口 # urls.py--总路由 from django.contrib import admin from dj…

ElasticSearch 使用映射定义索引结构

动态映射 dynamic 可选值解释true默认值&#xff0c;启用动态映射&#xff0c;新增的字段会添加到映射中runtime查询时动态添加到映射中false禁用动态映射&#xff0c;忽略未知字段strict发现未知字段&#xff0c;抛出异常 显示映射 创建映射 PUT user {"mappings&qu…

Elasticsearch可视化平台Kibana [ES系列] - 第498篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 全…