1 创建数据库分别创建两个数据库,并在数据库中创建两个相同的表。这里创建的数据库是: shardingjdbc1,shardingjdbc2并在数据库下创建两张表:orders, order\_infoCREATE TABLE orders (id INT(11) NOT NULL AUTO\_INCREMENT,customer VARCHAR(50) NULL DEFAULT '0' COLL
1 Mycat-web1.1 介绍Mycat-web 是 Mycat 可视化运维的管理和监控平台。Mycat-web 引入了 Zookeeeper 作为配置中心,可以管理多个节点。Mycat-web 主要管理和监控 Mycat 的流量、连接、活动线程和内存等资源,具有IP白名单和告警邮件等功能,可以对SQL执行进行统计,并分析慢SQL和高频SQL等。为我们进行SQL优化提供支持。1.2
在mycat的 server.xml 配置文件中有一个标签 firewall 是用来设置防火墙。whitehost 用来设置白名单;blacklist 用来设置SQL操作的黑名单。1 白名单1.1 设置通过白名单设置,可以实现来自指定IP的指定用户对mycat的访问。而未在设置中出现的用户或IP,则禁止访问。修改 server.xml 配置文件,进行如下修改<host host="192.1
1 user标签在mycat中,对逻辑库的读写权限进行了限制。通过 server.xml 配置文件中的 user 标签进行设置。name 访问mycat逻辑库的用户名password 属性,用户对应的密码schemas 属性,应用连接的逻辑库,可以配置成一个或多个readOnly 属性,应用访问逻辑库所具有的权限:true 为只读,只能查询,不能进行插入、删除、修改操作;false 为读写权限,可
1 HAProxy单点故障在上一篇文章里,我们在一台机器上安装了HAProxy,实现了MyCat服务的集群。但是这样的架构中,只有一个HAProxy服务,一旦这个服务发生了宕机,集群将不可用,这就是所谓的单点故障。那么怎么进一步提高HAProxy的高可用,从而解决单点故障的问题呢?通过Keepalived可以实现。2 解决方案在多个节点上安装HAProxy,并在每个HAProxy节点上安装Keep
1 创建第二套mycat环境新建一台虚拟机,并安装mycat。这里进入到第一台虚拟机中的mycat目录,将原虚拟机中的mycat目录整个拷贝到新服务器中:cd /usr/localscp -r mycat/ root@192.168.137.4:$PWD进入到新服务器中,同样需要安装JAVA,并将mycat及JAVA的可执行目录配置到环境变量中。vi /etc/profile在文件末尾添加环境变量
1 问题我们通过使用MyCat,对MySQL数据库实现了读写分离,但是由于MyCat是单节点服务,当访问端所有压力到达mycat后,可能会引发单点故障。2 MyCat集群架构通过增加MyCat节点,实现后端MySQL的负载均衡。然后在MyCat之上,再增加HAProxy的部署,通过HAProxy实现MyCat集群的负载均衡。2.1 HAProxy一个开源的、高性能的基于TCP(第四层协议)和HTT
1 主键重复之前创建了 PAYMENT_ADDRESS 数据表,根据 area\_id 的值,进行分片设置。那么在实际使用当中,虽然我们在建表时将 id 字段设置为了主键,但该主键的作用域仅在单个分片的数据库中起作用。当数据被分到不同的数据库分片中,该设置就会失去作用了。我们的分片规则是:100000-300000=0300001-900000=1在下图中,因为 AREA_ID=100
1 场景当我们要记录用户在使用系统期间相关操作时,会产生大量数据,可以根据日期,将其平均分布到所有数据库分片中,以分散单节点压力。2 实现原理按日期分片,需要设定日期的格式和日期范围。3 修改配置文件3.1 修改 schema.xml 文件在 schema 节点下新添加一个用于按日期分片的 table 节点,这里使用的数据表为 user_logs。name 用于分片的数据表 user_logs;d
1 问题取模前边介绍了根据表中某一个字段进行取模运算后的余数,来对数据表的存储进行分片,这种分片对数据实现的分片,带有随机性;枚举也介绍了将表中的某一个字段,按照我们指定的存储节点,将其保存到我们期望的数据库节点中,这种分片对用户是透明的。但是,枚举的方式,一次仅能设置一条,假如数据量很大时,这将变得很难维护。范围于是,就有了范围约定的分片模式,我们可以对一个范围内的数据设置分片规则,从而解决了需
1 实现原理有些业务需要按照一定规则来存放数据,这个分片规则需要由我们自己来定义。如我们在某东下单后,系统会根据收货地址,调用对应的区域仓库,安排发货。这类业务,就可以采用本条规则来实现。2 实现过程2.1 修改 schema.xml 文件在schema.xml文件中,增加用于分片枚举的表及其配置信息<table name="order_locations" dataNode="
1 实现方式之前在对数据表进行水平拆分时,已经使用了取模运算。是根据数据表中的某一个字段,有些地方说必须整型,其实除整型类型的字段外,这里可适用于所有字段,对其进行十进制的求模运算,将运算结果作为mycat的路由结果。缺点:可以分散数据库的写压力; 不足:如果查询语句中加入了范围,那么就需要mycat对查询到的结果进行合并。当数据量非常大时,这种跨库查询且需要合并查询结果的操作,将消耗更多的资源和
1 问题在实际的业务中,有些表中的数据非常稳定,几乎不会发生更新,比如用来存储行政区划数据,或者国家地区数据,这些数据稳定的表,也被称为字典表。字典表的特征:变动不频繁总体数据量变化不大数据规模不大,一般多在十万条以内那么在实现了分片的情况时,对业务数据进行分片后,业务表与这些字典表之间如果需要进行关联查询,此时就成为了一个亟需解决的问题。2 全局表为了解决上述问题,在Mycat中引入
1 问题在实际工作中,经常会遇到多张表进行 join 查询的操作,例如 orders 表被我们做了水平拆分,表中记录分散存储在两个数据分片中,但是 order_details 表并没有做分片,因此在对这两张表做 join 查询时,数据库1仅能在分片后的数据中进行查询,数据库2因为没有找到 order_details 表而返回空,那么整个查询结果将是实际结果的一个子集。mycat中的join查询结果
垂直拆分,解决了单库容量过大的问题,但是对于单表记录过大的问题,并没有解决。1 水平拆分按照数据表中某个字段的某种规则,将记录分散到多个库中,每个库该表中存储一部分记录,所有库中该表的记录并集,为该表所有记录的数据全集。可以将其理解为按照数据的行进行拆分,就是将表中的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中。2 实现分表2.1 选择要拆分的表MySQL单表存储数据条数,是存在瓶
1 问题随着我们的系统用户不断增加,产出的内容和数据量将不断增长,单台数据库数据量因为过大,将会导致查询速率降低,严重影响用户体验。为了提高查询速度,可以优化查询的SQL语句,加大数据库服务器的内存,优化数据库表结构和索引,虽然能从一定程度上使效率得到提升,但对于数据记录达到千万级的数据表,其优化的效果仍会大打折扣。2 垂直拆分2.1 垂直分表将数据表按列拆分,可将一张列比较多的表拆分为多张表。当
1 MySQL双主双从原理为了分担单台数据库服务器的压力,采用了一主一从模式,对数据进行了读取操作的分离;但是如果 master 发生故障时,整个数据库将不可用。为了进一步提高数据库的高可用,采用双主双从架构,两台主库,分别将对方作为自己的master,自己作为对方的 slave 来进行复制。2 环境准备2.1 环境清理停止之前创建的docker容器:docker stop 容器ID并将其卸载:d
在完成了MySQL主从复制的搭建后,下边通过MyCat来实现数据库的读写分离。1 修改mycat配置进入到 mycat 安装目录 conf 目录下,打开 schema.xml 文件。在文件中关键节点信息如下:1.1 schema节点节点中各属性配置:name 在 server.xml 中进行配置,应与该配置名称包括大小写在内,完全一致。checkSQLschema 是否自动检查数据表的名字sqlM
1 安装mysql的镜像如果服务器较少,为了充分发挥现有服务器的利用率,可以使用容器化技术来安装mysql。如果服务器没有docker,需要先安装dockeryum install -y dockerdocker安装后,启动服务service docker start下载mysql 5.7 版本的docker镜像docker pull mysql:5.72 启动mysql服务启动主节点的mysql
1 安装进入官网 http://www.mycat.org.cn/ 可以看到当前最新版本为 Mycat2,企业中一般不会选择最新版本,一是不够稳定,二是如果出现问题,解决方案不是太容易找到。 建议选择 1.6 版本下载和使用。在mycat1.6页面中,可以选择【下载】1.6中较新的版本。在安装包列表中,选择一个符合自己工作或学习的平台,如果linux或windows版本。下载linux版本后,将其
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号