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

455 阅读4分钟

1. 还原项目

1.1 修改端口号

在这里插入图片描述

1.2 修改图片路径

在这里插入图片描述

1.3 修改nginx配置文件

1).反向代理到8091服务器 在这里插入图片描述 2).修改hosts文件 在这里插入图片描述

1.4 启动nginx

在这里插入图片描述

1.5 效果展现

在这里插入图片描述

2. 数据库优化

2.1 实现数据库读写分离

在这里插入图片描述

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).上传安装包

官网:www.mycat.org.cn/

下载安装包:Mycat 微信搜索公众号:淡若清风丶 在这里插入图片描述 回复:Mycat 获取安装包(基本配置以完成)

在这里插入图片描述 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配置文件

在这里插入图片描述

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

端口配置:

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

在这里插入图片描述

修改yml: 在这里插入图片描述

用户配置:

<!--用户标签-->
	<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>

在这里插入图片描述

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 上传配置文件

删除之前的,把我们配置好的,导入 在这里插入图片描述

2.2.7 Mycat发布

1).校验JDK 在这里插入图片描述 2).进入bin目录 在这里插入图片描述 3).启动mycat 在这里插入图片描述 4).状态检查 在这里插入图片描述

5).运行测试: 在这里插入图片描述

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台数据库同时都是主机/从机) 在这里插入图片描述

配置步骤:

1).检查主库状态: 在这里插入图片描述

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;

/*重新挂载服务*/

在这里插入图片描述

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服务器.检查结果 在这里插入图片描述

2.4.3 数据库高可用测试

1).关闭129的主数据库. 在这里插入图片描述

2).测试用户链接是否正常. 在这里插入图片描述

3).重启主数据,检查数据是否同步. 在这里插入图片描述

3.Redis缓存服务器

3.1 业务说明

在这里插入图片描述

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 在这里插入图片描述 2).修改yml 在这里插入图片描述

3).上传压缩包 在这里插入图片描述

3.4.2 解压文件

1).解压命令

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

2).删除安装包、修改文件名为:redis 在这里插入图片描述

3.4.2 安装redis

步骤: 进入redis根目录中 在这里插入图片描述

命令1: make 在这里插入图片描述

命令2: make install 在这里插入图片描述

3.4.3修改redis配置文件

命令: vim redis.conf shift+: 输入set nu
展现行号: 在这里插入图片描述 在这里插入图片描述 1).关闭IP绑定 在这里插入图片描述 2).关闭保护模式 在这里插入图片描述

3).开启后台运行 在这里插入图片描述 4).最后wq保存退出

3.4.4 Redis启动命令

1).启动redis命令

redis-server redis.conf

在这里插入图片描述 端口号为:6379 在这里插入图片描述

2).进入redis客户端

redis-cli -p 6379

在这里插入图片描述

3).关闭redis

方式一:

redis-cli -p 6379 shutdown

在这里插入图片描述 方式二:

ps -ef | grep redis
kill -9 8307

在这里插入图片描述