京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

1. 还原项目

1.1 修改端口号

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

1.2 修改图片路径

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

1.3 修改nginx配置文件

1).反向代理到8091服务器
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
2).修改hosts文件
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

1.4 启动nginx

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

1.5 效果展现

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2. 数据库优化

2.1 实现数据库读写分离

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2.2 Mycat

2.2.1 Mycat介绍

活跃的、性能好的开源数据库中间件! 我们致力于开发高性能的开源中间件而努力!

2.2.2 Mycat特性

支持前端作为MySQL通用代理

后端JDBC方式支持Oracle,DB2,SQL Server,mongodb,巨杉

基于心跳的自动故障切换,支持读写分离

支持MySQL Cluster,Galera,Percona,cluster集群

支持数据的多片自动路由与聚合

支持sum,count,max等常用的聚合函数,支持跨库分页

支持库内分表,支持单库内部任意join全局表,支持跨库2表join

基于caltlet的多表join

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

2.2.3 上传Mycat安装包

1).上传安装包

官网:http://www.mycat.org.cn/

下载安装包:Mycat 微信搜索公众号:淡若清风丶
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
回复:Mycat 获取安装包(基本配置以完成)

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
2).解压Mycat安装包

	tar  -xvf Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz

3).安装完成后删除安装包

	rm -f Mycat-server-1.7.0-DEV-20170416134921-linux.tar.gz

2.2.4 编辑server.xml配置文件

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

说明: server.xml代表的是用户与mycat之间的配置关系。

端口配置:

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

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

修改yml:
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

用户配置:

<!--用户标签-->
	<user name="root">
		<property name="password">root</property>
		<!--与schema.xml中的配置相同 注意数据库的大小写-->
		<!--<property name="schemas">jtdb,db1,db2,db3</property>-->
		<property name="schemas">jtdb</property>
	</user>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">jtdb</property>
		<!-- 只读的用户 -->
		<property name="readOnly">true</property>
	</user>

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2.2.5 编辑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" />
		<!--参数介绍 UTF-8 中文报错  使用单行注释 -->
		<!--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="root">
			<!--读数据库1  负载均衡-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
		</writeHost>

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

2.2.6 上传配置文件

删除之前的,把我们配置好的,导入
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2.2.7 Mycat发布

1).校验JDK
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
2).进入bin目录
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
3).启动mycat
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
4).状态检查
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

5).运行测试:
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

6).如果报错:日志检查 根据报错提示 检查问题

命令:

  • cat wrapper.log
  • cat mycat.log

权限不够解决方法:

命令:

  • sudo ./mycat restart

2.2.8 Mycat负载均衡测试

说明: 修改数据库从库的数据 之后启动服务器检查是否有负载均衡的效果
注意事项: 最后将数据保证一致即可.

2.3 实现数据库高可用

2.3.1 业务说明

当数据库主库发生宕机的现象,则直接影响用户的使用. 最好的解决的策略 实现数据库高可用。

前提条件: 必须实现数据库主从同步

2.3.2 数据库同步策略

以前:

1.主机: 192.168.126.129
2.从机: 192.168.126.130

现在:

1.主机: 192.168.126.130
2.从机: 192.168.126.129

2.3.3 双击热备

说明:2台数据库同时互为主从结构,称之为双机热备的形式,(2台数据库同时都是主机/从机)
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

配置步骤:

1).检查主库状态:
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2).开始进行主从挂载:

/* 之前是主机 今天是从机   */
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=245;

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

/*3.检查主从状态*/
SHOW SLAVE STATUS;

/*但凡有报错信息 检查日志 io_error 数据库记得重启*/
STOP SLAVE;
/*重置主从结构*/
RESET SLAVE;

/*重新挂载服务*/

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2.4 Mycat实现数据库高可用

2.4.1 编辑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" />
		<!--参数介绍 UTF-8 中文报错  使用单行注释 -->
		<!--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="root">
			<!--读数据库1  负载均衡-->
			<readHost host="hostS1" url="192.168.126.130:3306" user="root" password="root" />
			<!--读数据库2-->
			<readHost host="hostS2" url="192.168.126.129:3306" user="root" password="root" />
		</writeHost>

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

2.4.2 上传配置文件

说明: 将文件上传到服务器中,重启mycat服务器.检查结果
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2.4.3 数据库高可用测试

1).关闭129的主数据库.
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2).测试用户链接是否正常.
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3).重启主数据,检查数据是否同步.
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3.Redis缓存服务器

3.1 业务说明

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3.2 关于缓存机制说明

说明: 缓存中的数据都是数据库中的记录. 引入缓存机制之后,主要的目的为了降低用户访问物理设备的频次.提高服务器响应效率.
维度说明:
1).开发语言: C语言开发
2).数据结构问题: K-V结构 map/properties key不能重复
3).内存数据 断电及擦除: 定期将内存数据持久化操作
4).内存资源有效: 如何有效的维护内存大小? 定期清理内存. LRU算法/LFU算法/TLL算法

3.3 Redis介绍

Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。

速度: 读: 11.2万次/秒 写: 8.6万次/秒 平均10万次/秒

3.4 Redis安装

3.4.1 上传Redis安装包

!),关闭mycat
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
2).修改yml
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3).上传压缩包
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3.4.2 解压文件

1).解压命令

[root@localhost src]# tar -xvf redis-5.0.4.tar.gz

2).删除安装包、修改文件名为:redis
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3.4.2 安装redis

步骤: 进入redis根目录中
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

命令1: make
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

命令2: make install
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3.4.3修改redis配置文件

命令: vim redis.conf
shift+: 输入set nu
展现行号:
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
1).关闭IP绑定
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
2).关闭保护模式
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3).开启后台运行
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
4).最后wq保存退出

3.4.4 Redis启动命令

1).启动redis命令

redis-server redis.conf

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
端口号为:6379
京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

2).进入redis客户端

redis-cli -p 6379

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

3).关闭redis

方式一:

redis-cli -p 6379 shutdown

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]
方式二:

ps -ef | grep redis
kill -9 8307

京淘项目实战开发-11[Mycat、Redis缓存服务器概述]

上一篇:Mysql+Mycat实现数据库主从同步与读写分离


下一篇:MySQL如何实现万亿级数据存储?