73-JT项目11(数据库高可用/读写分离/负载均衡)

1.数据库主从搭建

1.1 开启主库的二进制日志文件

1.1.1 主库二进制文件位置

说明: mysql数据库核心配置文件 /etc/my.cnf

在这里插入图片描述

1.1.2 编辑二进制日志文件

命令: vim /ect/my.cnf

image-20200811101455846

1.1.3 检查二进制日志文件是否生成

image-20200811101552590

1.2 开启从库二进制日志文件

注意事项: server-id=2 不能重复.

命令:vim /etc/my.cnf

在这里插入图片描述

1.2.1检查从库二进制日志文件是否正确.

在这里插入图片描述

1.3 实现主从挂载

1.3.1业务说明

说明:主从挂载应该由从库向主库进行挂载.由从库远程连接主库,之后读取二进制日志文件信息.

1.3.2 确定主库中二进制日志文件信息

说明:在数据库连接工具中执行以下命令

执行sql命令: show master status;

在这里插入图片描述

1.3.3 实现主从挂载

过程: 由从库 -------> 主库进行挂载,在从库中进行操作

/*我是130  我是从库 默认条件下数据库都是主库
  host/port/user/password/二进制文件/pos
*/
CHANGE MASTER TO MASTER_HOST="192.168.126.129",
	         MASTER_PORT=3306,
	         MASTER_USER="root",
	         MASTER_PASSWORD="root",
	         MASTER_LOG_FILE="mysql-bin.000001",
	         MASTER_LOG_POS=245;

/*启动主从服务*/
START  SLAVE;

/*检查主从状态*/
SHOW SLAVE  STATUS;
# 当配置出现问题的时候,需要先关闭主从服务,然后进行配置
/*1.关闭主从服务*/
STOP  SLAVE;

执行SHOW SLAVE STATUS;命令后如果出现以下提示,则配置正确

在这里插入图片描述

2. 数据库主从复制/读写分离

2.1 数据库读写分离原理

在这里插入图片描述

2.2 Mycat

2.2.1 Mycat介绍

在这里插入图片描述

2.2.2 Mycat特点

Mycat关键特性

关键特性

支持SQL92标准

支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常见SQL语法

遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。

基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。

支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster

基于Nio实现,有效管理线程,解决高并发问题。

支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。

支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。

支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。

支持多租户方案。

支持分布式事务(弱xa)。

支持XA分布式事务(1.6.5)。

支持全局序列号,解决分布式下的主键生成问题。

分片规则丰富,插件化开发,易于扩展。

强大的web,命令行监控。

支持前端作为MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。

支持密码加密

支持服务降级

支持IP白名单

支持SQL黑名单、sql注入攻击拦截

支持prepare预编译指令(1.6)

支持非堆内存(Direct Memory)聚合计算(1.6)

支持PostgreSQL的native协议(1.6)

支持mysql和oracle存储过程,out参数、多结果集返回(1.6)

支持zookeeper协调主从切换、zk序列、配置zk化(1.6)

支持库内分表(1.6)

集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。

2.2.3 上传Mycat服务器

在这里插入图片描述

2.2.4 解压文件信息

说明:解压文件以后,删除多余的文件,

2.2.5 server.xml配置文件说明

1.定义Mycat端口号 默认端口号就是8066

<property name="serverPort">8066</property>

2.定义Mycat的用户名和密码

image-20200811115045665

修改项目中数据库的url连接的配置

image-20200811171012907

2.2.6 schema.xml 配置文件说明

说明:进行读写分离

image-20200811171112669

2.2.6 替换配置文件

说明:将mycat中原有的配置文件删除,之后换位改好的配置文件

在这里插入图片描述

2.2.7 启动mycat测试

1.跳转到bin目录中执行启动命令

在这里插入图片描述

2.运行mycat
命令:

./mycat  start  启动命令 
./mycat  status  检查状态
./mycat  restart  重启命令
./mycat stop     停止命令

在这里插入图片描述

2.2.8 测试负载均衡

说明:修改数据库的IP地址和端口,连接Mycat服务器.

image-20200811171327047

2.测试效果

在这里插入图片描述

3 实现数据库高可用

3.1 什么是高可用

说明:当服务器发生了故障时,在不影响用户的条件下,自动实现数据的迁移.无需人为的干预.

3.2.数据库双击热备的形式(双主模式)

在这里插入图片描述

说明:配置2台数据 互为主从. 这样的效果可以保证在主库宕机的之后,用户操作都是从库.当主库重启之后,从库会把数据同步给主库.最终实现了数据的一致性.

3.2.数据库双向绑定

  1. 129 是主库信息 现在当从库
  2. 130是从库信息 现在当主库.
    前提条件: 2个数据中的数据应该保持一致.

3.2.1 查看130服务器的状态

在这里插入图片描述

3.2.2 实现主从挂载

说明: 由129向130进行数据库挂载

/*我是129  之前我是主库   现在当从库 */
CHANGE MASTER TO MASTER_HOST="192.168.126.130",
		 MASTER_PORT=3306,
		 MASTER_USER="root",
		 MASTER_PASSWORD="root",
		 MASTER_LOG_FILE="mysql-bin.000001",
		 MASTER_LOG_POS=480;
		 
# 开启主从的服务
START  SLAVE;

# 检查主从的状态
SHOW SLAVE STATUS;

在这里插入图片描述

3.2.3 实现数据库高可用配置

说明: 配置schema.xml文件

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	
	<!--name属性是自定义的  dataNode表示数据库的节点信息  jtdb表示逻辑库-->
	<schema name="jtdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="jtdb"/>

	<!--定义节点名称/节点主机/数据名称-->
	<dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
		<!--参数介绍-->
		<!--balance 0表示所有的读操作都会发往writeHost主机 -->  
		<!--1表示所有的读操作发往readHost和闲置的主节点中-->
		<!--writeType=0 所有的写操作都发往第一个writeHost主机-->	
		<!--writeType=1 所有的写操作随机发往writeHost中-->
		<!--dbType 表示数据库类型 mysql/oracle-->
		<!--dbDriver="native"  固定参数 不变-->
		<!--switchType=-1 表示不自动切换, 主机宕机后不会自动切换从节点-->
		<!--switchType=1  表示会自动切换(默认值)如果第一个主节点宕机后,Mycat会进行3次心跳检测,如果3次都没有响应,则会自动切换到第二个主节点-->
		<!--并且会更新/conf/dnindex.properties文件的主节点信息 localhost1=0 表示第一个节点.该文件不要随意修改否则会出现大问题-->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select 1</heartbeat>

		<!--配置第一台主机主要进行写库操作,在默认的条件下Mycat主要操作第一台主机在第一台主机中已经实现了读写分离.因为默认写操作会发往137的数据库.读的操作默认发往141.如果从节点比较忙,则主节点分担部分压力.
		-->
		<writeHost host="hostM1" url="192.168.126.129:3306" user="root" password="1234">
			<!--读数据库1-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="1234" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="1234" />
			
		</writeHost>

			<!--定义第二台主机 由于数据库内部已经实现了双机热备.-->
			<!--Mycat实现高可用.当第一个主机137宕机后.mycat会自动发出心跳检测.检测3次.-->
			<!--如果主机137没有给Mycat响应则判断主机死亡.则回启动第二台主机继续为用户提供服务.-->
			<!--如果137主机恢复之后则处于等待状态.如果141宕机则137再次持续为用户提供服务.-->
			<!--前提:实现双机热备.-->
		
		<writeHost host="hostM2" url="192.168.126.130:3306" user="root" password="1234">
			<!--读数据库1-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="1234" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="1234" />
		</writeHost>
		
	</dataHost>
</mycat:schema>

3.2.4 实现数据库高可用

1.先关闭mycat服务器.

在这里插入图片描述

2.上传全新的配置文件

在这里插入图片描述

  1. 重启mycat服务器
    重启mycat之后启动服务器连接mycat代理服务器.检查用户的访问是否正确.
./mycat     start
  1. 启动本地项目,查看运行效果

在这里插入图片描述

5.数据库高可用测试
说明:将mysql数据库先关闭,之后检查用户访问是否受限. 之后重启数据库,检查Mysql数据库中的数据是否实现同步.

在这里插入图片描述

3.3 实现新版的项目部署

1.将准备好的war包文件上传

选择打好的war包,将其上传到tomcats目录下

2.启动脚本实现Linux项目发布

在这里插入图片描述

4 虚拟机连接不通 问题说明

虚拟机环境: 虚拟机必须有正确的IP地址.

在这里插入图片描述

windows环境:

在这里插入图片描述

3.检查在windows下网络是否畅通

image-20200811172401723

4.检查虚拟机服务项是否启动.

在这里插入图片描述

5 关于数据库主从挂载问题说明

说明:按照规则如果正常的执行了主从的挂载应该出现如下提示, 如果没有2个yes则说明代码有误.

重新挂载步骤,首先要关闭主从服务,然后进行数据更改,最后重新启动,查看服务状态

/*1.关闭主从服务*/
STOP  SLAVE;

/*修改数据库信息*/

/*重新执行挂载命令*/
CHANGE MASTER TO MASTER_HOST="192.168.126.129",
	         MASTER_PORT=3306,
	         MASTER_USER="root",
	         MASTER_PASSWORD="root",
	         MASTER_LOG_FILE="mysql-bin.000001",
	         MASTER_LOG_POS=245;
/* 启动主从服务*/
start SLAVE;
/*查看主从状态*/
show SLAVE status;

posted on 2020-08-11 17:34  liqiangbk  阅读(236)  评论(0编辑  收藏  举报

导航