Mycat MySQLGalera读写分离验证安装手册
一文看懂mycat配置--数据库的读写分离、分表分库
⼀⽂看懂mycat配置--数据库的读写分离、分表分库概述系统开发中,数据库是⾮常重要的⼀个点。
除了程序的本⾝的优化,如:SQL语句优化、代码优化,数据库的处理本⾝优化也是⾮常重要的。
主从、热备、分表分库等都是系统发展迟早会遇到的技术问题问题。
Mycat是⼀个⼴受好评的数据库中间件,已经在很多产品上进⾏使⽤了。
今天主要带⼤家了解下mycat的相关配置,mycat配置后才可以去做数据库的读写分离、分表分库。
a31dcbd3eb9.jpegmycat⽬录MyCAT 配置解析Mycat的配置⽂件都在conf⽬录⾥⾯,这⾥介绍⼏个常⽤的⽂件84975f54f84.jpegMycat的架构其实很好理解,Mycat是代理,Mycat后⾯就是物理数据库。
和Web服务器的Nginx类似。
对于使⽤者来说,访问的都是Mycat,不会接触到后端的数据库。
⼀、wrapper.conf配置jdk:mand=/usr/local/jdk1.8.0_131/bin/java⼆、server.xml1、user标签<user name="root"><property name="password"></property><property name="schemas">TESTDB</property></user>user⽤户配置节点l --name登录的⽤户名,也就是连接Mycat的⽤户名l --password登录的密码,也就是连接Mycat的密码l --schemas数据库名,这⾥会和schema.xml中的配置关联,多个⽤逗号分开,例如需要这个⽤户需要管理两个数据库db1,db2,则配置db1,dbs2、privileges标签对⽤户的 schema以及表进⾏精细化的DML权限控制<privileges check="false"></privileges>--check表⽰是否开启DML权限检查。
mysql+mycat搭建稳定高可用集群,负载均衡,主备复制,读写分离
mysql+mycat搭建稳定⾼可⽤集群,负载均衡,主备复制,读写分离数据库性能优化普遍采⽤集群⽅式,oracle集群软硬件投⼊昂贵,今天花了⼀天时间搭建基于mysql的集群环境。
主要思路简单说,实现mysql主备复制-->利⽤mycat实现负载均衡。
⽐较了常⽤的读写分离⽅式,推荐mycat,社区活跃,性能稳定。
测试环境MYSQL版本:Server version: 5.5.53,到官⽹可以下载WINDWOS安装包。
注意:确保mysql版本为5.5以后,以前版本主备同步配置⽅式不同。
linux实现思路类似,修改f即可。
A主mysql。
192.168.110.1:3306, ⽤户root,密码root。
操作系统:win7 x64,内存:4g安装路径:C:\Program Files\MySQL\MySQL Server 5.5\binB备mysql。
192.168.110.2:3306, ⽤户root,密码root。
操作系统:win2003 x64,内存:1g安装路径:C:\Program Files\MySQL\MySQL Server 5.5\binA主、B备的mysql中创建sync_test数据库实现mysql主备复制主要思路:A主mysql开启⽇志,B备mysql读取操作⽇志,同步执⾏。
⼀般为主备同步,主主同步不推荐使⽤。
配置A主mysql1)修改my.ini。
需要在log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log"的相关位置创建log⽬录,以及mysql-bin.log⽂件。
[mysqld]server-id=1 #主机标⽰,整数port=3306log-bin="C:/Program Files/MySQL/MySQL Server 5.5/log/mysql-bin.log" #确保此⽂件可写read-only=0 #主机,读写都可以binlog-do-db=sync_test #需要备份数据库,多个写多⾏binlog-ignore-db=mysql #不需要备份的数据库,多个写多⾏2)允许MYSQL远程访问#登录mysql console进⼊%home%/bin,执⾏mysql -uroot -proot#授权。
mycat读写分离性能测试(5.5及以上版本)
1.MySQL主从配置我们的方案设计基于Mysql的主从数据复制功能,以下是基于mysql5.5以上版本最新的主从配置。
开启mysql主从数据复制,主要在mysql的my.ini文件中设置:windows系统一般在c:\ProgrameData\MySQL中:Linux系统一般在/etc/f中:1、主数据库服务器配置:server-id=1log-bin=mysql-binbinlog-do-db=Industry //只同步Industry数据库binlog-ignore-db=mysql //避免同步mysql用户配置,以免不必要的麻烦binlog-ignore-db=performance_schemabinlog-ignore-db=information_schema2、创建一个允许从服务器来访问的用户(主服务器):grant replication slave on *.* to 'root'@'192.168.0.58' identified by 'root';说明:∙root:Slave使用的账号∙IDENTIFIED BY 'root' :Slave使用的密码∙192.168.1.58:Slave数据库IPmaster端,通过show master status\G 显示信息。
如图:注意上图中的File,和Position。
Slave 中会用到这些信息。
3、从数据库服务器配置:server-id=11 //服务Id,注意要和master的server-id不一样log-bin=mysql-binrelay-log-index=slave-relay-bin.indexrelay-log=slave-relay-binsync_master_info=1sync_relay_log=1sync_relay_log_info=14、关联上Master信息:change master tomaster_host='192.168.0.68',master_user='root',master_port=3306,master_password='root',mast er_log_file='mysql-bin.000001',master_log_pos=120;命令说明:∙master_host:master 数据库服务器ip∙master_user: master 数据库通过GRANT授权的账号∙master_port:master 数据库使用的端口号∙master_password:master 数据库通过GRANT授权的密码∙master_log_file:master数据库中通过show master status显示的File名称∙master_log_pos:master数据库中通过show master status显示的Position数据重启Slave 的MySql服务在命令行中输入start slave.在命令行中输入show slave status,显示如下:注意:只有Slave_IO_Running与Slave_SQL_Running都为Yes才配置成功。
mysql主从与读写分离安装详解
Mysql主从与读写分离主从模式Master:192.168.1.1Slave:192.168.1.1一、配置主服务器1.1修改mysql配置文件# vi /etc/my.cof在配置文件中添加log-bin=mysql-bin(开启二进制日志)server-id = 11.2启动mysqlservice mysqld start1.3登陆mysqlmysql -uroot –p‘passwd’1.4授权给从服务器mysql> GRANT REPLICATION SLAVE ON *.* to 'user'@'192.168.1.2' identified by ‘password’;1.5查看主数据库状态mysql> show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000005 | 261 | | |+------------------+----------+--------------+------------------+记录下File 及Position 的值,在后面进行从服务器操作的时候需要用到二、配置从服务器2.1修改从服务器的配置文件/etc/f添加server-id = 2,并确保这个ID没有被别的MySQL服务所使用。
2.2启动mysql服务service mysqld start2.3通过命令行登录管理MySQL服务器#mysql -uroot -p'password'2.4执行同步SQL语句mysql> change master tomaster_host=’192.168.1.1’,master_user=’user’,master_password=’password’,master_log_file=’mysql-bin.000005’,master_log_pos=261;正确执行后启动Slave同步进程mysql> start slave;2.5主从同步检查mysql> show slave status\G============================================== **************** 1. row *******************Slave_IO_State:Master_Host: 192.168.1.1Master_User: userMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000005Read_Master_Log_Pos: 415Relay_Log_File: localhost-relay-bin.000008Relay_Log_Pos: 561Relay_Master_Log_File: mysql-bin.000005Slave_IO_Running: YESSlave_SQL_Running: YESReplicate_Do_DB:……………省略若干……………Master_Server_Id: 11 row in set (0.01 sec)==============================================其中Slave_IO_Running 与Slave_SQL_Running 的值都必须为YES,才表明状态正常。
Mycat MySQL主从复制读写分离验证安装手册
MyCat+MySQL主从复制读写分离验证菜菜-李梦嘉(56335443) 配置MySQL主从复制实验环境主从环境搭建在Master上配置log_bin和log_bin_index创建复制用户并分配权限在Slave上配置relay-log和relay-log-index使用change master to命令将Slave指向Master使用start slave命令启动复制查看复制状态MyCat读写分离配置方案一schema.xml配置说明:Balance=1 readHost和备用writeHost负担查询操作,本例中只有readHost负载Switchtype=1 自动切换主从查看节点状态创建表并插入数据192.168.1.248作为写节点Create操作Insert操作192.168.1.249作为读节点停止192.168.1.248上的mysql进程查看节点状态此时无法写入和查询数据查看节点状态,节点加入成功插入数据192.168.1.248依然作为写节点192.168.1.249作为读节点总结:1、读写操作分发到不同节点,实现了读写分离;2、节点间数据同步依靠mysql的复制,可能存在写节点和读节点数据不一致;3、如果写节点失效,写节点下的读节点也无法提供服务。
方案二Schema配置:说明:DataHost配置和方案一相同,区别是2个节点都配置为writeHost查看节点状态创建表并插入数据192.168.1.248作为写节点Create操作Insert操作运行查询192.168.1.249作为写节点关闭192.168.1.248上的mysql进程查看节点状态插入数据192.168.1.249提升为写节点查询数据192.168.1.249同时作为从节点重启192.168.1.248上mysql进程查看节点状态,节点成功加入插入数据写节点仍然为192.168.1.249运行查询,注意此时获取的是脏数据192.168.1.248作为读节点总结:1、读写操作分发到不同节点,实现了读写分离;2、写节点失效后,备节点提升为写节点,同时负责读操作;3、当原主节点重启后,可以被mycat重新加入,但是此时2个节点的数据已经不一致,而且新插入数据无法同步;4、失效写节点需要检查数据一致性,并重新配置复制才可以加入节点。
MySQL主从复制、读写分离实现(MyCat)及运用
1 主从复制1.1 概述主从复制是指将主数据库的DDL 和 DML 操作通过二进制日志传到从库服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他从服务器的主库,实现链状复制。
MySQL 复制的有点主要包含以下三个方面:1.主库出现问题,可以快速切换到从库提供服务。
2.实现读写分离,降低主库的访问压力。
3.可以在从库中执行备份,以避免备份期间影响主库服务。
1.2 原理从上图来看,复制分成三步:1.Master 主库在事务提交时,会把数据变更记录在二进制日志文件 Binlog 中。
2.从库读取主库的二进制日志文件 Binlog ,写入到从库的中继日志 Relay Log 。
3.slave重做中继日志中的事件,将改变反映它自己的数据。
1.3 搭建1.3.1 服务器准备1.两台服务器安装MySQL,并完成基础的初始化工作;2.放行MySQL数据库端口(3306),或者关闭防火墙#放行3306端口firewall-cmd --zone=public --add-port=3306/tcp -permanent#关闭防火墙systemctl disable firewalld --now1.3.2 主库配置1.修改配置文件/etc/my.conf#mysql服务ID,保证整个集群环境中唯一,取值范围:1-2^32-1,默认为1server-id=1#是否只读,1代表只读,0代表读写read-only=0#忽略的数据,指不需要同步的数据库#binlog-ignore-db=mysql#指定同步的数据库#binlog-do-db=db012.重启数据库systemctl restart mysqld3.创建远程连接的账号,并授予主从复制的权限-- 创建itcast用户,并设置密码,该用户可在任意主机连接该MySQL服务CREATE USER'itcast'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@123456';-- 为'itcast'@'%'用户分配主从复制权限GRANT REPLICATION SLAVE ON*.*TO'itcast'@'%';4.通过命令,查看二进制坐标show master status;字段含义说明:file : 从哪个日志文件开始推送日志文件position :从哪个位置开始推送日志binlog_ignore_db : 指定不需要同步的数据库4.开启同步操作start relica; -- 8.0.22之后2.CPU瓶颈:排序、分组、连接查询、聚合统计等SQL会耗费大量的CPU资源,请求数太多,CPU出现瓶颈。
运维必懂的MySQL主从复制与读写分离解析和图文详细步骤
运维必懂的MySQL主从复制与读写分离解析和图⽂详细步骤⼀、MySQL主从复制与读写分离1.1 主从分离和读写分离的相关概述1)主从复制与读写分离在实质际的⽣产环境中,对数据库的读和写都在同⼀个数据库服务器中,是不能满⾜实院需求的。
⽆论是在安全性、⾼可⽤性还是⾼并发等各个⽅⾯都是完全不能满⾜实际需求的。
因此,通过主从复制的⽅式来同步数据,再通过读写分离来提升数据库的并发负载能⼒。
有点类似于rsync,但是不同的是rsync是对磁盘⽂件做备份,⽽mysql主从复制是对数据库中的数据、语句做备份。
2)为什么要读写分离因为数据库的"写"(写10000条数据可能要3分钟)操作是⽐较耗时的。
但是数据库的"读" (读10000条数据可能只要5秒钟)所以读写分离,解决的是,数据库的写⼊,景响了查询的效率。
3)什么时候要读写分离数据库不⼀定要读写分离,如果程序使⽤数据库较多时,⽽更新少,查询多的情况下会考虑使⽤。
利⽤数据库主从同步,再通过读写分离可以分担数据库压⼒,提⾼性能。
4)读写分离的原理读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),⽽从数据库处理SELECT⾹询操作。
数据库复制被⽤来把事务性操作导致的变更同步到集群中的从数据库。
5)mysql⽀持的复制类型1. STATEMENT∶基于语句的复制。
在服务器上执⾏sgl语句,在从服务器上执⾏同样的语句,mysgl默认采⽤基于语句的复制,执⾏效率⾼。
2. ROW∶基于⾏的复制。
把改变的内容复制过去,⽽不是把命令在从服务器上执⾏⼀遍。
3. MIXED∶混合类型的复制。
⿊默认采⽤基于语句的复制,⼀旦发现基于语句⽆法精确复制时,就会采⽤基于⾏的复制。
6)主从复制的⼯作过程(主写从复制)1. 在每个事务更新数据完成之前,Master在⼆进制⽇志(Binary log)记录这些改变。
MySQL中的数据库读写分离配置和使用技巧
MySQL中的数据库读写分离配置和使用技巧引言:随着互联网的迅猛发展,数据库的负载越来越重,读写分离成为提升数据库性能的重要手段。
MySQL作为最常用的关系型数据库之一,也提供了相应的读写分离解决方案。
本文主要介绍MySQL中数据库读写分离的配置和使用技巧,帮助读者更好地提升数据库的性能和可靠性。
一、读写分离的概念和原理读写分离是指将数据库的读操作和写操作分离到不同的服务器上进行,实现高并发读取和写入的能力。
其核心原理是在主数据库上执行写操作,然后将写入的数据同步到从数据库,读操作则直接在从数据库上进行,从而分担了主数据库的压力。
二、MySQL中读写分离的配置1. 设计数据库架构在进行读写分离之前,首先需要设计合理的数据库架构。
一般而言,将主数据库用于写操作,而从数据库用于读操作。
可以根据业务需求将数据表进行水平切分,将不同的数据表放在不同的服务器上,以提高数据库的并发读取和写入能力。
2. 安装和配置MySQL主从服务器为了实现读写分离,我们需要设置一个主服务器和一个或多个从服务器。
首先,在主服务器上安装和配置MySQL,然后在从服务器上安装MySQL,并将其配置为从服务器。
在配置文件中,需要设置"server-id"和"log-bin"等参数,以便进行主从复制。
3. 配置主从复制在MySQL中,主从复制通过二进制日志(binary log)实现。
在主服务器上执行"flush tables with read lock"命令,暂停写入操作,然后在从服务器上执行"change master to"命令,指定主服务器的地址和认证信息。
接下来,可以通过"start slave"命令启动从服务器的复制进程。
4. 验证主从复制配置完成主从复制的配置后,可以通过执行"show slave status"命令来验证复制是否正常运行。
MySQL的读写分离配置方法
MySQL的读写分离配置方法随着互联网的发展,大量的数据需要被存储和处理,MySQL作为一个开源的关系型数据库管理系统,已经成为当今最常用的数据库之一。
然而,随着数据量的增加和访问量的提高,单一MySQL服务器已经无法满足需求,这时候读写分离就显得非常重要了。
读写分离是指将读操作和写操作分离到不同的数据库服务器上,从而提高系统的性能和扩展性。
通过读写分离,可以将读操作分担到多个从服务器上,达到负载均衡的目的,而写操作则集中在主服务器上,确保数据的一致性和完整性。
下面将介绍MySQL的读写分离配置方法。
一、配置主服务器首先,我们需要配置主服务器,即负责处理写操作的服务器。
1. 安装MySQL:首先需要确保在主服务器上安装了MySQL数据库。
可以通过官方网站下载安装包,按照指引进行安装。
安装完成后,启动MySQL服务。
2. 设置主服务器配置文件:打开MySQL的配置文件(f或my.ini),添加以下配置:```server-id = 1log-bin=mysql-binbinlog-do-db=your_database_namebinlog-ignore-db=mysql```其中,`server-id`设置服务器唯一标识,`log-bin`开启二进制日志记录,`binlog-do-db`指定需要记录的数据库,`binlog-ignore-db`指定需要忽略的数据库。
3. 重启MySQL服务:保存配置文件,并重启MySQL服务,使配置生效。
二、配置从服务器接下来,配置从服务器,即负责处理读操作的服务器。
1. 安装MySQL:在从服务器上安装MySQL数据库,与主服务器安装方法一样。
2. 设置从服务器配置文件:打开MySQL的配置文件,添加以下配置:```server-id = 2replicate-do-db=your_database_namereplicate-ignore-db=mysql```其中,`server-id`设置服务器唯一标识,`replicate-do-db`指定需要复制的数据库,`replicate-ignore-db`指定需要忽略的数据库。
mycat读写分离+垂直切分+水平切分+er分片+全局表测试
mycat读写分离+垂直切分+⽔平切分+er分⽚+全局表测试读写分离:利⽤最基础的mysql主从复制,事务性的查询⽆法分离出去(因为会导致数据不⼀致),这样就⽆法做到真正的读写分离,因为有些场景可能⼤部分都是事物性的读。
解决⽅法: galera for mysql 强⼀致性。
好的实例连接:安装使⽤过程遇到的问题:1、mycat启动后报错,进程直接退出: Error: Exception thrown by the agent : .MalformedURLException: Local host name unknown: .UnknownHostException: ys-fs: ys-fs: Name or service not known原因:本机要配置/etc/hosts 127.0.0.1 主机名⼀、垂直切分测试:1、schema.xml⾥⾯加⼊:<schema name="weixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="weixin" /><schema name="yixin" checkSQLschema="false" sqlMaxLimit="100" dataNode="yixin" /><schema name="sms" checkSQLschema="false" sqlMaxLimit="100" dataNode="sms" /><dataNode name="weixin" dataHost="host0" database="weixin" /><dataNode name="yixin" dataHost="host1" database="yixin" /><dataNode name="sms" dataHost="host2" database="sms" /><dataHost name="host0" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="namenode" url="192.168.168.230:3306" user="root" password="youngsun" /></dataHost><dataHost name="host1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hadoop1" url="192.168.168.231:3306" user="root" password="youngsun" /></dataHost><dataHost name="host2" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><!-- can have multi write hosts --><writeHost host="hadoop2" url="192.168.168.232:3306" user="root" password="youngsun" /></dataHost>2、server.xml加⼊:<user name="test_wyh"><property name="password">test</property><property name="schemas">weixin,yixin,sms</property></user>3、遇到问题:1)、Caused by: org.xml.sax.SAXParseException; lineNumber: 106; columnNumber: 16; The content of element type "mycat:schema" must match "(schema*,dataNode*,dataHost*)".原因:要按照schema、datanode 、datahost的顺序放,不能打乱。
MyCat读写分离配置
MyCat读写分离配置读写分离在我们配置数据库集群时是必然会考虑的一个点,因为这可以有效的降低主库的负载,并且在读多余写的情况下,绝大部分的读请求都可以分发到各个不同的从库上。
即使从库负载不够,也可以通过增加从库的方式来提升整体的查询效率。
本文主要讲解MyCat如何进行读写分离的配置。
1. 环境搭建为了搭建读写分离数据库架构,这里我们需要准备两个数据库,一个作为主库,一个作为从库。
本文所使用的方式是通过docker搭建的主从架构,因而可以在本机上直接运行。
具体配置如下:关于docker如何搭建MySQL主从数据库,读者朋友可以阅读本人的文章(Docker搭建MySQL主从集群)。
读者朋友也可以通过虚拟机的方式搭建主从数据库,这里就不再赘述。
2. MyCat配置关于MyCat的配置,其主要是需要在某一个数据库节点上同时指定主库和从库。
下面是一个示例:<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"><schema name="mydb" checkSQLschema="true" sqlMaxLimit="100"><table name="t_user" primaryKey="id" autoIncrement="true" dataNode="dn1"/></schema><dataNode name="dn1" dataHost="dhost1" database="db1"/><dataHost name="dhost1" maxCon="1000" minCon="10" balance="1"writeType="0"switchType="-1" dbType="mysql" dbDriver="native"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="localhost:3306" user="root" password="root"/> <writeHost host="hostS1" url="localhost:3307" user="root" password="root"/> </dataHost></mycat:schema>关于上述配置,主要有如下几点需要说明:xml的配置顺序schema、dataNode和dataHost的顺序不能发生变化;在dataHost中通过writeHost将主库和从库都配置进去,MyCat可以通过show master status来检测具体哪一个是主库,哪一个是从库;在dataHost上有两个参数:balance和switchType。
mycat数据库集群系列之mycat读写分离安装配置
mycat数据库集群系列之mycat读写分离安装配置 最近在梳理数据库集群的相关操作,现在花点时间整理⼀下关于mysql数据库集群的操作总结,恰好你⼜在看这⼀块,供⼀份参考。
本次系列终结⼤概包括以下内容:多数据库安装、mycat部署安装、数据库之读写分离主从复制、数据库之双主多重、数据库分库分表。
每⼀个点,有可能会对应⼀篇或者多篇⽂章,由于还要继续上班⼯作,所以本系列分享预计持续时间需要10天左右,有兴趣的您可以持续关注。
我是⼀个菜鸟,如果写的不好的地⽅,望多多指点和包涵。
好了,直接进⼊本次的主题:mycat读写分离模式配置安装。
⼀、简介 mycat是⼲嘛的呢?⾸先我们来简单的了解⼀下mycat到底是⼲嘛的:MyCat 是⽬前最流⾏的基于 java 语⾔编写的数据库中间件,是⼀个实现了 MySQL 协议的服务器,前端⽤户可以把它看作是⼀个数据库代理,MyCat 发展到⽬前的版本,已经不是⼀个单纯的 MySQL 代理了,它的后端可以⽀持MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流数据库,也⽀持 MongoDB 这种新型NoSQL ⽅式的存储,未来还会⽀持更多类型的存储。
简单的说,Mycat是⼀个数据库集群操作中间件,实现了数据库的:读写分离、主从切换、分库分表等业务,但是对我们程序员在使⽤上来说,是封装的,和平时使⽤单库单表操作⽆差别。
其它的就不在此忽悠了,⽹上介绍多如⽜⽑。
⼆、环境准备1、JDK安装 前⾯已经介绍了mycat是⽤java写的,所以第⼀个环境要求就是要jdk环境,并且jdk是1.8+。
Jdk安装包下载,我最开始在官⽹下载,下载的速度超慢,今天就不推荐官⽹下载地址了,今天给⼤家推荐的是国内华为⼤佬提供的下载地址,当然上⾯包的更新速度没有官⽹及时,但是够⽤了,⽬前是13+。
下载速度但是杠杠的,分分钟下载完毕: 根据⾃⼰的电脑环境,选择对应的包下载即可,由于本次是在win10上实操,所我现在的是win-64。
mycat的使用
mycat的使用
Mycat是一款开源的分布式数据库中间件,可以用于MySQL、MariaDB、Oracle等关系型数据库。
它提供了数据分片、读写分离、负载均衡、高可用等功能。
Mycat的使用可以大大提高数据库的性能和可用性。
它可以将数据分片存储在不同的节点上,从而提高数据的读写速度和并发能力。
同时,它可以将读操作和写操作分配到不同的节点上,从而实现读写分离,减轻数据库的负担。
此外,Mycat还支持主从同步和自动故障转移,保证数据库的高可用性。
要使用Mycat,需要进行以下步骤:
1. 下载Mycat并解压缩到任意目录。
2. 修改Mycat的配置文件,包括server.xml、schema.xml、rule.xml等,配置数据源、分片规则、读写分离等。
3. 启动Mycat的管理端口,通过管理端口管理Mycat的运行状态和配置。
4. 将应用程序的连接信息指向Mycat,从而实现对数据库的访问。
需要注意的是,Mycat需要对应用程序进行一定的改造,包括修改连接字符串、使用Mycat提供的SQL语法等。
此外,Mycat还有一些限制和不足之处,需要根据具体情况进行权衡和选择。
总之,Mycat是一款非常有用的数据库中间件,可以大大提高数据库的性能和可用性。
使用Mycat需要一定的技术水平和实践经验,
但只要按照要求进行配置和使用,就可以获得显著的效果。
mysql主从复制及mycat读写分离手册
mysql主从复制MySQL数据库自身提供的主从复制功能可以方便的实现数据的多处自动备份,实现数据库的拓展。
多个数据备份不仅可以加强数据的安全性,通过实现读写分离还能进一步提升数据库的负载性能。
下图就描述了一个多个数据库间主从复制与读写分离的模型(来源网络):在一主多从的数据库体系中,多个从服务器采用异步的方式更新主数据库的变化,业务服务器在执行写或者相关修改数据库的操作是在主服务器上进行的,读操作则是在各从服务器上进行。
如果配置了多个从服务器或者多个主服务器又涉及到相应的负载均衡问题,关于负载均衡具体的技术细节还没有研究过,今天就先简单的实现一主一从的主从复制功能。
Mysql主从复制的实现原理图大致如下:MySQL之间数据复制的基础是二进制日志文件(binary log file)。
一台MySQL 数据库一旦启用二进制日志后,其作为master,它的数据库中所有操作都会以“事件”的方式记录在二进制日志中,其他数据库作为slave通过一个I/O线程与主服务器保持通信,并监控master的二进制日志文件的变化,如果发现master 二进制日志文件发生变化,则会把变化复制到自己的中继日志中,然后slave 的一个SQL线程会把相关的“事件”执行到自己的数据库中,以此实现从数据库和主数据库的一致性,也就实现了主从复制。
实现MySQL主从复制需要进行的配置:∙主服务器:o开启二进制日志o配置唯一的server-ido获得master二进制日志文件名及位置o创建一个用于slave和master通信的用户账号∙从服务器:o配置唯一的server-ido使用master分配的用户账号读取master二进制日志o启用slave服务具体实现过程如下:一、准备工作:1.主从数据库版本最好一致2.主从数据库内数据保持一致主数据库:10.18.55.22 /linux从数据库:10.18.55.33 /linux二、主数据库master修改:1.修改mysql配置找到主数据库的配置文件f(或者my.ini),我的在/etc/mysql/f,在[mysqld]部分插入如下两行:[mysqld]log-bin=mysql-bin #开启二进制日志server-id=32 #设置server-id2.重启mysql,创建用于同步的用户账号打开mysql会话shell>mysql -hlocalhost -uname -ppassword创建用户并授权:用户:slave01密码:P@ssw0rdmysql>CREATE USER'slave01'@'10.18.55.33' IDENTIFIED BY'P@ssw0rd'; #创建用户mysql>GRANT REPLICATION SLAVE ON*.*TO'slave01'@'10.18.55.33'; #分配权限mysql>flush privileges; #刷新权限3.查看master状态,记录二进制文件名(mysql-bin.000003)和位置(73):mysql > SHOW MASTER STATUS;+------------------+----------+--------------+------------------+|File| Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000003|73| test | manual,mysql |+------------------+----------+--------------+------------------+二、从服务器slave修改:1.修改mysql配置同样找到f配置文件,添加server-id[mysqld]server-id=33 #设置server-id,必须唯一2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):mysql> CHANGE MASTER TO-> MASTER_HOST='10.18.55.32',-> MASTER_USER='slave01',-> MASTER_PASSWORD='P@ssw0rd',-> MASTER_LOG_FILE='mysql-bin.000003',-> MASTER_LOG_POS=73;3.启动slave同步进程:mysql>start slave;4.查看slave状态:mysql> show slave status\G;***************************1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 10.18.55.32Master_User: rootMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000013Read_Master_Log_Pos: 11662Relay_Log_File: mysqld-relay-bin.000022Relay_Log_Pos: 11765Relay_Master_Log_File: mysql-bin.000013Slave_IO_Running: YesSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:...当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。
【IT专家】MyCAT 部署 MySQL 读写分离
本文由我司收集整编,推荐下载,如有疑问,请与我司联系MyCAT 部署MySQL 读写分离2017/06/29 0 原文:https://kefeng.wang/2016/12/22/mycat-mysql/ 单一的MySQL服务器一旦宕机,会造成单点故障,整个系统无法运转,因此要有主库(Master)和从库(Slave备库)两份,主库故障时自动切换至备库。
另外,大多企业应用是写的少(INSERT/DELETE/UPDATE)查的多(SELECT),因此还要实现读写分离,以便根据读写比例分别扩展读、写库节点的数目。
这么复杂的切库与数据分流,如果在应用内部实现,会很繁琐,而且耦合度高,可采用数据库中间件实现这些功能。
本文是使用MyCAT 实现双主(写)双从(读)mysql的部署。
1 MySQL 开源中间件比较1.1 TDDL(alibaba)不是独立运行的中间件,以JAR 包形式供给应用调用;社区已停滞。
1.2 Amoeba(alibaba,陈思儒)独立运行的中间件,介于应用和MySQL集群之间,后端使用JDBC Driver,因此更通用;社区已停滞。
1.3 Cobar(alibaba)是Amoeba 的进化版本,后端JDBC Driver改为原生的MySQL 协议,不通用,但更强大(如主备切换);社区已停滞(2013年)。
1.4 MyCAT是Cobar 的进化版本,后端由BIO 改为NIO;社区活跃。
号称是国内最活跃的、性能最好的开源数据库中间件!用户包括中国电信、中国联通。
2 MyCAT 技术要点官网:mycat.io/电子书:mycat.io/document/Mycat_V1.6.0.pdf纸质书:blog.csdn/wind520/article/details/53213691 MyCAT 采用Java开发,实现MySQL 公开的二进制协议,将自己伪装成MySQL Server;应用只需连接MyCAT 执行SQL,MyCAT 按照配置的策略,分发SQL 至相应的MySQL 节点。
mysql数据库读写分离教程
mysql数据库读写分离教程注意:实现MySQL读写分离的前提是我们已经将MySQL主从复制配置完毕⼀、Mycat实现读写分离安装和配置架构规划:192.168.201.150 master 主节点192.168.201.154 slave 从节点192.168.201.156 Mycat 代理中间件http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz //我这⾥选⽤的是1.6版本,下载后上传到mycat服务器1.2、解压mycat[root@mysqlmycat ~]# java -version //因为mycat是⽤java开发的,所以需要安装有java的环境,安装⽅法:https:///patrick-yeh/p/14201966.html [root@mysqlmycat ~]# tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz //注意需要看⼀下⾃⼰下载的哪个版本1.3、把mycat⽂件夹移动到/usr⽬录下[root@mysqlmycat ~]# mv mycat /usr1.4、查看解压之后的⽬录[root@mysqlmycat ~]# cd /usr/mycat[root@mysqlmycat usr]# llbin:存放启动和关闭mycat的⽂件的⽬录,(重点关注⽬录下的mycat)catlet:存放⼀些⼩的程序,内部的应⽤(⽆需关注)conf:存放mycat配置⽂件的⽬录(重点关注,schema.xml、server.xml)lib:存放mycat启动依赖的第三⽅jar包的⽬录logs:存放Mycat⽇志的⽬录1.5、修改mycat中conf下的配置⽂件schema.xml,添加以下内容:[root@mysqlmycat mycat]# vim /usr/mycat/conf/schema.xml<!--定义mycat的逻辑库 dataNode代表映射的真实数据节点--><schema name="aa" checkSQLschema="false" sqlMaxLimit="100" dataNode="ygbookNode"></schema><!--定义mycat的数据节点 name:必须和上⾯dataNode值⼀致 dataHost:映射真实的主机 database:映射真实的库--><dataNode name="ygbookNode" dataHost="ygbookHost" database="ygbook" /><!--定义数据主机 name:名字必须和datahHost保持⼀致 --><dataHost name="ygbookHost" maxCon="1000" minCon="10" balance="1"writeType="0" dbTypte="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"><!--⼼跳检测--><heartbeat>select user()</heartbeat><!--写节点 host名字随便写,hostM1:master1的简称--><writeHost host="hostM1" url="192.168.201.150:3306" user="root" password="xxx"><!--从节点 S1即slave1--><readHost host="hostS1" url="192.168.201.154:3306" user="root" password="xxx" /></writeHost></dataHost>注意:原schema.xml⽂件中的配置都可以删除了,只保留以上内容1.6、修改登录mycat的权限⽂件server.xml[root@mysqlmycat mycat]# vim /usr/mycat/conf/schema.xml<system><!--这⾥配置的都是⼀些系统属性,可以⾃⼰查看mycat⽂档--><property name="defaultSqlPariser">druidparser</property><!--5.x版本必须是utf8--><property name="charset">utf8</property></system><!--配置⽤户信息 name:代表登陆mycat⽤户名 password:代表登陆的密码--><user name="root"><property name="password">xxx</property><!--⽤来指定可以操作的逻辑库--><property name="schemas">aa</property></user>注意:原server.xml⽂件中的配置都可以删除了,只保留以上内容1.7、启动mycat[root@mysqlmycat bin]# cd /usr/mycat/bin[root@mysqlmycat bin]# ./mycat console1.8、查看⽇志[root@mysqlmycat bin]# tail -f ../logs/mycat.log1.9、数据库连接配置,测试知识拓展:读写分离实现⽅式有两种:1)配置多数据源;2)使⽤mysql的proxy中间件代理⼯具;第⼀种⽅式中,数据库和Application是有⼀定侵⼊性的,即我们的数据库更换时,application中的配置⽂件是需要⼿动修改的。
CentOS7使用Mycat实现mysql读写分离部署
CentOS7使用Mycat实现mysql读写分离部署一、mycat简介MyCat是一个开源的分布式数据库系统,是一个实现了MySQL 协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL 客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里。
MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL、SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。
而在最终用户看来,无论是那种存储方式,在MyCat里,都是一个传统的数据库表,支持标准的SQL语句进行数据的操作,这样一来,对前端业务系统来说,可以大幅降低开发难度,提升开发速度具体介绍请参考: mycat官方网站二、环境准备OS: CentOS Linux release 7.9.2009 (Core)关闭系统SELINUX 功能:执行命令如下:sed -i '/^SELINUX=.*/ s//SELINUX=disabled/' /etc/selinux/config或vi 编辑/etc/selinux/config 文件,更改SELINUX=disabled更改后,执行命令:reboot 重启系统生效重启后,运行:getenforce 检查selinux状态是否为Disabled状态*mysql数据库服务器关闭SELINUX*运行在Linux下的mysql,需要配置lower_case_table_names=1 不区分大小写添加到mysql配置文件中 /etc/f配置完成后,重启mysql数据库生效二、主备库搭建2.1 node1主库配置# 编辑mysql配置文件,在[mysqld]下加入以下参数vim /etc/fenforce_gtid_consistency=ONgtid_mode=ONlog_bin=mysql-binlog_bin_index=mysql-bin.indexbinlog_format=rowrelay_log=reay-logrelay_log_index=relay-log.indexserver-id=1# 重启mysql服务systemctl restart mysqld# 备份mysqlmysqldump --all-databases --single-transaction --triggers --routines --set-gtid-purged=OFF --host=127.0.0.1 --port=3306 --user=root --password > backup.sql# 创建同步帐号create user 'repl'@'192.168.56.110' identified by 'Musen123!@#';grant replication slave on *.* to 'repl'@'192.168.56.110';flush privileges;2.2 node2备库配置# 编辑mysql配置文件,在[mysqld]下加入以下参数vim /etc/fenforce_gtid_consistency=ONgtid_mode=ONlog_bin=mysql-binlog_bin_index=mysql-bin.indexlog_slave_updates=ONserver-id=2binlog_format=rowrelay_log=reay-logrelay_log_index=relay-log.index# 重启mysql服务systemctl restart mysqld# 恢复mysql数据库主库备份文件backup.sql传至备库/tmp目录下登录mysql数据库后,执行如下指令source /tmp/backup.sql;# 连接主库进行同步change master to master_host='192.168.56.109', master_user='repl',master_password='Musen123!@#',master_po rt=3306,master_auto_position=1;start slave;# 确认主备库同步状态show slave status \G;3.3创建数据库在主库上执行创建数据库脚本create database jumpserver default charset 'utf8';执行完成后,在备库上查询是否有jumpserver数据库show databases;三、Mycat搭建3.1 JDK安装安装jdk1.8可以直接使用yum install java-1.8.0-openjdk.x86_64 -y 进行安装。
两种方式实现读写分离
两种⽅式实现读写分离基于以下原因,我们会⽤读写分离:1.写时锁表,会影响读2.读写的压⼒达到单台数据库极限,使⽤多台来分摊压⼒.以两种⽅式实现读写分离:1.在项⽬代码中使⽤多数据源,指定当前请求线程使⽤的数据库进⾏读写分离.(缺点:当某台数据库宕机,⽆法检查)2.使⽤mycat配置读写分离(优点多多)⼀旦从库写⼊数据,与主库不⼀致,从库⽴即会停⽌Slave_SQL_Running,解决⽅法1.主库 show master status 查看信息2.从库先 stop slave,再执⾏change master to master_host='192.168.88.200',master_user='root',master_password='918428',master_port=3306,master_log_file='mysql-bin主库的',master_log_pos=主库的; 最后start slave注意如果从库数据跟主库已经不⼀致当主库插⼊的id在从库中存在时,那么从库会报错该从库会⽴即停⽌Slave_SQL_Running. 所以在出现问题后⽆⽐先保证数据⼀致然后再处理.下⾯是mycat读写分离步骤:⼀.安装mysql主从2.检查是否成功; service mysqld start; service mysqld status;3.查看root 密码 grep 'temporary password' /var/log/mysqld.log, 登录后修改密码3.1.为⽅便密码验证设置下: set global validate_password_policy=0 set global validate_password_length=6----------------------------------------主从搭建---------------------------------------------4.配置主节点4.1 /etc/my.cf⽂件添加server-id=1; log-bin=/var/lib/mysql/mysql-bin;5.配置从节点 (注意如果是从虚拟机克隆过来的,/var/lib/mysql/f⽂件需要改为不同)5.1 /etc/my.cf⽂件添加server-id=2; relay-log=/var/lib/mysql/relay-bin(指定同步过来的log位置)5.2 重启后执⾏1.建⽴和主节点联系 change master tomaster_host='192.168.17.201',master_user='root',master_password='918428',master_log_file='mysql-bin.000001', master_log_pos=0;注意master_log_file和master_log_pos要根据主节点填写2.开启slave: 登录mysql执⾏start slave;-------------------------------------------------------------------------------------------------。
Mycat实现mysql的读写和分离
Mycat实现mysql的读写和分离mycat是什么?mycat是⼀款国产分布式数据库中间件。
mycat是基于阿⾥巴巴的开源项⽬cobar为基础开发的。
mycat可以让程序员专注于业务相关的代码编写,不⽤担⼼数据库相关的业务(负载均衡,集群管理,读写分离,分库分表)。
mycat的安装和配置前置条件:需要安装jdk,配置环境变量步骤⼀:安装mycat ,上传mycat的压缩包Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz #官⽹下载镜像解压缩tar -zxvf Mycat-server-1.6.7.5-release-20200410174409-linux.tar.gz将mycat⽂件夹移动到/usr/local/,配置环境变量(vi /etc/profile)export MYCAT_HOME=/usr/local/mycatexport PATH=$PATH:$JAVA_HOME/bin:$MYCAT_HOME/bin⽣效命令:source /etc/profile步骤⼆:修改配置⽂件schema.xml(逻辑库的配置):[root@server05 conf]# vi /usr/local/mycat/conf/schema.xml<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"><!--逻辑数据库的配置#chenweishuo_dn和chenweishuo_host名字随便写,但要互相对应--><schema name="teacher" checkSQLschema="false" sqlMaxLimit="100" dataNode="chenweishuo_dn"></schema><!--database(teacher)是物理数据库的名字--><dataNode name="chenweishuo_dn" dataHost="chenweishuo_host" database="teacher" /><!--balance负载均衡的意思1. balance="0",不开启读写分离2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Mycat+MySQL Galera读写分离验证作者菜菜-李梦嘉56335443部署MySQL Galera安装环境安装前准备安装gcc、gcc-c++# yum install gcc gcc-c++安装boost-devel# yum install boost-devel安装scons check-devel openssl-devel# yum install scons check-devel openssl-devel安装libaio# yum install libaio安装perl、perl-devel# yum install perl perl-devel安装rsync、lsof# yum install rsync lsofMySQL Galera安装安装含wsrep Patch的MySQL# tar zxvf mysql-wsrep-5.6.27-25.12-linux-x86_64.tar.gz# mv mysql-wsrep-5.6.27-25.12-linux-x86_64 /usr/local/mysql# groupadd mysql# useradd -r -g mysql mysql# chown -R mysql:mysql .# ./scripts/mysql_install_db --no-defaults --datadir=/usr/local/mysql/data --user=mysql # chown -R root .# chown -R mysql data# ln -s /usr/local/mysql/bin/* /usr/sbin安装Galera复制插件# tar zxvf galera-3-25.3.13.tar.gz# cd galera-3-25.3.13# scons# cp garb/garbd /usr/local/mysql/bin/# cp libgalera_smm.so /usr/local/mysql/lib/plugin/配置MySQL Galera# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld# mkdir -p /var/lib/mysql# chown mysql:mysql /var/lib/mysql# vi /etc/f[client]port = 3306socket = /var/lib/mysql/mysql.sock[mysqld_safe]log-error = /var/lib/mysql/mysql.logpid-file = /var/lib/mysql/mysql.pid[mysqld]wsrep_node_name = node1wsrep_provider = /usr/local/mysql/lib/plugin/libgalera_smm.so#wsrep_provider_options ='gcache.size=1G;socket.ssl_key=my_key;socket.ssl_cert=my_cert' #wsrep_slave_threads=16wsrep_sst_method = rsyncport = 3306socket = /var/lib/mysql/mysql.sockuser = mysqlbasedir = /usr/local/mysqldatadir = /usr/local/mysql/datadefault_storage_engine=InnoDB#innodb_buffer_pool_size=1G#innodb_log_file_size=256Minnodb_autoinc_lock_mode=2innodb_locks_unsafe_for_binlog=1innodb_flush_log_at_trx_commit=0innodb_doublewrite=0innodb_file_per_table=1binlog_format=ROWlog-bin=mysql-binserver-id=101relay-log=mysql-relay-bin#read_only=1log-slave-updates=1MySQL Galera启动与关闭初次启动节点# /usr/local/mysql/bin/mysqld_safe --wsrep_cluster_address=gcomm:// >/dev/null &或# service mysqld start --wsrep_cluster_address=gcomm://查看mysql启动端口# netstat -plantu | grep mysqldtcp 0 0 0.0.0.0:4567 0.0.0.0:* LISTEN 3656/mysqld注:1)”gcomm://”是特殊的地址,仅仅是galera cluster初始化启动时候使用,再次启动的时候需要使用具体的IP地址.2) 端口4567是wsrep使用的默认端口.该端口的防火墙设置规则应该和3306的一样.关闭# mysqladmin -uroot -p shutdown或# service mysqld stop添加MySQL Galera新节点添加新节点的时候,新接入的节点叫Joiner,给Joiner提供复制的节点叫Donor.新的节点接入需要:1) 安装带wsrep patch的MySQL版本2) 安装Galera复制插件3) 配置好新节点的MySQL(参考Donor的f)4) 配置或启动的gcomm://的地址是需要使用donor的IP.接入节点galera2mysqld_safe --wsrep_cluster_address="gcomm://192.168.1.250:4567,192.168.1.248:4567" >/dev/null &接入节点galera3service mysqld start --wsrep_cluster_address="gcomm://192.168.1.250:4567,192.168.1.248:4567"修改galera节点的wsrep_cluster_addressservice mysql restart --wsrep_cluster_address="gcomm://192.168.1.248:4567,192.168.1.249:4567"同步验证在其中一个节点上创建账号mysql> create user 'mallcai'@ '192.168.1.%' identified by 'XXXXXX';mysql> grant all privileges on *.* to 'mallcai'@ '192.168.1.%' with grant option;mysql> flush privileges;在其他节点查看账号同步情况mysql> select user,host from er;+---------+-------------+| user | host |+---------+-------------+| root | 127.0.0.1 || root | ::1 || | galera || root | galera || | localhost || root | localhost |+---------+-------------+7 rows in set (0.00 sec)MyCat配置MySQL Galera读写分离方案一schema.xml配置说明:Balance=1 所有readHost和standby writeHost参与读负载WriteType=0 所有写操作发送到配置的第一个writeHost,第一个挂了切换到第二个writeHost SwitchType=3 基于MySQL galary cluster的切换机制,心跳语句为show status like 'wsrep%'配置所有节点为writeHost,其他节点作为writeHost的readHost查看所有host的状态创建测试表并插入数据选择192.168.1.248作为writeHost,而非按配置文件中的顺序选择192.168.1.250 Create操作Insert操作运行3次查询3个节点都负载了select操作hostR2 192.168.1.249hostR5 192.168.1.248hostR6 192.168.1.250关闭192.168.1.248上的mysql进程查看节点状态再次插入数据查看mycat.log日志,选择192.168.1.249作为写入节点运行2次select查询alive的节点都负载了select操作hostR2 192.168.1.249关闭192.168.1.249上的mysql进程查看节点状态插入数据alive的192.168.1.250作为writeHost运行select查询alive的192.168.1.250作为readHost重启关闭节点查看节点状态,节点加入成功插入数据仍然将最后一次的192.168.1.250作为writeHost总结:1、Mycat选取一个writeHost作为写节点,所有节点都作为readHost;2、如果writeHost失效,选择另一个writeHost作为写节点,其余节点作为readHost;3、除非全部writeHost失效,否则业务不会中断,安全性较高;4、并未达到读写分离的目的。
方案二schema.xml配置dataNode配置保持不变192.168.1.250作为writeHost192.168.1.249作为192.168.1.250的readHost 192.168.1.248作为192.168.1.250的备用writeHost查看节点状态创建表并插入数据选择192.168.1.250作为writeHostCreate操作Insert操作运行2次查询readHost和备用writeHost都负载select操作hostM2 192.168.1.248hostR1 192.168.1.249关闭192.168.1.250上的mysql进程查看节点状态插入数据备用writeHost192.168.1.248提升为写节点运行2次select查询此时192.168.1.250的readHost192.168.1.249已经不能分担读操作,查询都由192.168.1.248处理重启192.168.1.250的mysql查看节点状态插入数据writeHost仍然为192.168.1.248运行查询备writeHost和readHost分担select查询hostM1 192.168.1.250hostR1 192.168.1.249总结:1、所有节点正常时,writeHost作为写节点,备用writeHost和readHost作为读节点;2、当主writeHost失效时,备用writeHost同时负担读和写,主writeHost下的readHost无法负担读;3、当主writeHost失效时,备writeHost压力过大。