MYCAT读写分离

1. 添加一个新的虚拟主机,设置ip为10.1.1.60,

主机名为 mycat.yuanyu.zhangmin.

关闭防火墙 SELinux NetworkManager

2. 上传jdk和mycat安装包

3. 解压并且添加到指定的位置

4. 查看并且配置jdk环境

5. 测试启动myca就可以了

6. 找到server.xml和schema.xml

7. 配置server.xml

8.配置schema.xml

9. 启动服务 /usr/local/mycat/bin/mycat start

10. 检查启动的是否成功

11. 连接测试

企业架构MySQL读写分离

一、背景描述及其方案设 计

1、业务背景描述

之前业务中是单台MySQL提供服务,使用多台 MySQL数据库服务器,降低单台压力,实现集群架构的 稳定性和高可用性 数据的一致性 完整性 replication 通过业务比对和分析发现,随着活跃用户数增多,读取 数据的请求变多,故着重解决读取数据的压力

2、模拟运维设计方案

根据以上业务需求,在之前业务架构的基础上实现数据 的读写分离

二、MySQL读写分离介 绍

1、读写分离的目的 数据库负载均衡: 当数据库请求增多时,单例数据库不能够满足业务 需求。需要进行数据库实例的扩容。多台数据库同时相 应请求。也就是说需要对数据库的请求,进行 负载均衡 但是由于数据库服务特殊原因,数据库扩容基本要 求为: 数据的一致性和完整性。所以要 保证多台数据库 实例的数据一致性和完整性,以MySQL为例来说,官方 提供了 主从复制机制。 读写分离: 数据库的负载均衡不同于其他服务的负载均衡,数 据要求一致性。 基于主从复制的基础上,常见的数据库 负载均衡使用的是读写分离方式。写入主数据库,读取 到从数据库。可以认为 数据库读写分离,是一种特殊的 负载均衡实现。 实际业务中,读写分离存在的一个问题,不够实时性。 对于要求实时性高的业务

①缓存 写主库 写缓存 读缓存

②可以读主 ③添加完数据之后,有一个跳转等待的时间(5s),数 据正在审核中

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

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

②中间件代理方式的读写分离 在业务代码中,数据库的操作,不直接连接数据库,而 是先请求到中间件服务器(代理) 由代理服务器,判断是读操作去从数据服务器,写操作 去主数据服务器

也就是如下图示架构

问:如何选择?

①业务实现读写分离,操作方便,成本低,当前的开发 框架基本支持读写分离

②中间件代理服务器,除了能够实现读写分离,还可以 作为数据库集群的管理平台

三、MySQL读写分离案 列实现 0、搭建M-S复制 主从复制的原理 :主服务器开启bin-log(记录了写操 作) 从服务器获取到主服务器的bin-log 记录到relay log中。

从服务器在通过异步的线程方式,对于relay-log 进行重放操作。 server02 mysql master 192.168.17.100 server06 mysql slave 192.168.17.105

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' --all databases > /root/mysql.sql

④查看master上的bin-log及其position位置 mysql > show master status; 查看并记录File的值,Position的值。之后需要在从服务 器上,指向这些信息

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信息进行排查问题。

1、简单业务代码实现 示例语法代码:

将此代码上传到web服务器,测试是否可以实现读写分 离。

注意修改对应的连接地址、用户名称、密码等信 息。

#命令行执行php代码的方式 #php需要提前配置环境变量 xxx.php为需要执行的php 脚本文件 shell > php xxx.php

2、框架配置实现读写分离

①通过查看thinkphp5手册找到处理方案

②修改项目配置文件 一定要先去确定主从数据库的数据一致(tp5shop),

用户名称和密码可以进行登录使用

配置文件示例

测试down主库,看从库是否可以访问。thinkphp5中, 如果slave宕机,master提供读服务。 3、MyCAT实现读写分离

准备一台服务器,作为数据库的中间件服务器,配置基 本环境,网卡、FQDN

Mycat 数据库中间件 国内最活跃的、性能最好的开源数据库中间件!

官方网址: http://www.mycat.io/ https://github.com/MyCATApache/MyCAT-Server/

因为mycat是由java语言开发,必须使用java的运行环境 才能进行启动和操作

3.2、jdk安装 java 静态编译的编程语言 代码编译成机器码 执行机器 码输出结果。 编译jdk javac 编译java代码 运行 jre 编译好的机器码(可以执行文件) java

问:公司服务器部署的java环境是jdk还是jre?

答:jre java解析运行环境 一般情况编译过的可执行的 java程序 ,jre就够用了。 jdk javac 编译的环境 如果服务器上传是源代码文件 就 可以编译,之后再执行。 实际业务环境中,如果存在需要编译的情况,就选择 jdk。

①下载安装jdk https://www.oracle.com/technetwork/java/javase/do wnloads/jdk8-downloads-2133151.html 选择下载x64架构.tar.gz包 上传mycat和jdk到soft目录下

②配置环境变量

3.3、mycat安装和测试启动

①解压安装MyCAT shell > tar xvf Mycat-server-1.6.5-release 20180122220033-linux.tar.gz -C /usr/local 实际解压到目录即可,无需安装

②软件目录介绍

③启动mycat 日志目录 默认情况下启动mycat是可以启动的

#通过控制台 进行前端启动   可以看到执行过程

shell > /usr/local/mycat/bin/mycat console

注意如果启动不成功,可能是由于没有解析主机名称。 需要在hosts文件中进行解析。

###

3.4、配置读写分离 读写分离的配置文件:

Mycat是由java开发,java开发的软件大部分配置文件是 xml格式。

注意它的基本格式。 xml格式注意点:

1、xml声明信息

2、具有一个根标签

3、双标签和单标签格式

4、注意闭合标签

5、注释格式为

①查看server.xml 默认server.xml可以不用修改 shell > /usr/local/mycat/conf shell > vim server.xml 修改server.xml 配置mycat对外的使用用户信息

②修改schema.xml schema标签里配置name的server.xml里的虚拟数据库 名称,

dataNode 填写后面使用的dataNode名称

dataNode标签和dataHost指定配置使用

dataHost标签里配置writeHost和readHost(密码,地 址,用户名称)

schema=>dataNode=>dataHost=>writeHost=>rea dHost 可以使用给大家精简过的配置文件

注意修改第7行,真实数据库的名称

③启动mycat服务 shell > /usr/local/mycat/bin/mycat start #确认mycat是否真的启动,查看它的端口 9066 8066 shell > netstat -lntp|grep 8066 Tip:

如果配置之后,启动mycat,不能够启动 通过查看/usr/local/mycat/logs/wrapper.log

3.5、mycat客户端 连接mycat客户端 shell > mysql -h127.0.0.1 -uroot -p123456 P8066 执行查询命令测试结果

#3.6、mycat管理端 连接mycat管理端

shell > mysql -h127.0.0.1 -uroot -p123456 P9066 执行管理命令查看 mysql > show @@help; //查看管理监控端的所有帮助 命令 mysql > show @@heartbeat;

//查看服务器状态

3.7、业务代码配置 使用数据库中间件服务器实现读写分离和后端真实 数据库的管理。 对于前端业务来说,数据操作需要连接 的是数据库中间件服务器。 操作连接的是数据库中间件 服务器,而不直接连接多实例的真实服务器了。

①修改项目数据库配置文件

②测试访问 mycat默认writeHost和readHost,如果writeHost不可 用,则readHost也不可用。用两个writeHost,从的 writeHost变成可写的了,要在slave服务器上设置 readonly

3.8、balance属性和writeType属性 balance 属性 负载均衡类型,目前的取值有 3 种:

1、balance="0", 不开启读写分离机制,所有读操作都 发送到当前可用的 writeHost 上。

2、balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当 双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为 主备),正常情况下,M2,S1,S2 都参与 select 语句的负 载均衡。

3、balance="2", 所有读操作都随机的在 writeHost、readhost 上分发。

4、balance="3", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担 读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。

writeType 属性 负载均衡类型,目前的取值有 3 种:

1、writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个 writeHost,重新启动后已切换后的为准.

2、writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐 switchType 属性-1 表示不自动切换 1 默认值,自动切换 2 基于 MySQL 主从同步的状态决定是否切

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值