亿级流量架构|day08-数据库高可用进阶及Redis初识

数据库高可用进阶及Redis初识

  • 1 数据库高可用实现(二)
    • 1.1 当前数据库服务存在问题
      • 1.1.1 现在的架构设计
      • 1.1.2 主库宕机影响
      • 1.1.3 改进策略
      • 1.1.4 配置互为主从
      • 1.1.5 主从测试
    • 1.2 MyCat
      • 1.2.1 介绍
      • 1.2.2 MyCat安装
      • 1.2.3 编辑Server.xml
      • 1.2.4 编辑Schemas配置文件
      • 1.2.5 上传文件
      • 1.2.6 Mycat高可用测试
    • 1.3 分库分表
      • 1.3.1 为什么要分库分表
      • 1.3.2 数据库的垂直拆分
      • 1.3.3 数据库的水平拆分
      • 1.3.4 数据库如何优化
  • 2 Redis学习
    • 2.1 缓存介绍
      • 2.1.1 缓存设计架构
      • 2.1.2 缓存机制
      • 2.1.3 引入缓存后的问题
      • 2.1.4 Redis介绍
    • 2.2 Redis安装
      • 2.2.1 Redis下载
      • 2.2.2 Redis安装
      • 2.2.3 Redis启动
      • 2.2.4 修改redis配置文件
    • 2.3 Redis命令
      • 2.3.1 String类型
      • 2.3.2 List列表类型

1 数据库高可用实现(二)

1.1 当前数据库服务存在问题

1.1.1 现在的架构设计

亿级流量架构|day08-数据库高可用进阶及Redis初识_第1张图片

问题1:如果数据库主库宕机,则影响整个数据库服务。
问题2:如果后台的Amoeba宕机,也会影响整个服务。

1.1.2 主库宕机影响

  1. 因为配置数据库主从服务器,从库可以实时备份主库的数据,但当主库宕机以后,通过某些技术手段可以实现数据库的故障迁移,但是这时从库需要同时读写数据。一段时间以后,从库的数据会比主库的数据要多。
  2. 如果这时主库服务器修复,amoeba根据原有的配置继续实现读写分离,但是从库中的数据比主库中的数据多,这时IO线程会断掉,导致无法实现主从同步。
  3. 该问题导致主库中没有之前用户写入的数据,同时从库中没有用户新增的数据,导致数据不一致。

1.1.3 改进策略

  1. 主从切换
    如果主库(A库)宕机,那么原来的从库(B库)升级为主库,承担主写和部分读的职责。同时将A库降级为从库并且挂载到A库上。-------该方法已经实现需要依赖第三方插件,同时该方案不适用于多个主从服务配置。

  2. 双机热备形式(双主模式)
    亿级流量架构|day08-数据库高可用进阶及Redis初识_第2张图片

采用双机热备的形式是实现数据库高可用的最为简单的方案。2台数据库互为主从结构,即使其中一台宕机,也不会影响整个数据库服务。

1.1.4 配置互为主从

A库: 192.168.126.162:3306
B库: 192.168.126.162:3306

昨天已经实现B库挂载在A库上
现在只需再将A库挂载在B库上

/*查询从状态*/
SHOW MASTER STATUS;


/*实现主从挂载*/
CHANGE MASTER TO MASTER_HOST="192.168.126.163",
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000001",
MASTER_LOG_POS=387

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

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

1.1.5 主从测试

分别修改主库和从库数据,检查数据是否自动同步。

1.2 MyCat

1.2.1 介绍

亿级流量架构|day08-数据库高可用进阶及Redis初识_第3张图片

1.2.2 MyCat安装

前提要求:MyCat的安装需要依赖JDK1.8,上传文件后解压
亿级流量架构|day08-数据库高可用进阶及Redis初识_第4张图片

命令:
./mycat start 启动
./mycat stop 停止
./mycat status 状态信息

1.2.3 编辑Server.xml

亿级流量架构|day08-数据库高可用进阶及Redis初识_第5张图片

1.2.4 编辑Schemas配置文件


	<dataNode name="jtdb" dataHost="localhost1" database="jtdb" />
		
		  
		
			
		
		
		
		
		
		
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select 1heartbeat>

		
		<writeHost host="hostM1" url="192.168.126.162:3306" user="root" password="root">
			
			<readHost host="hostS1" url="192.168.126.163:3306" user="root" password="root" />
		writeHost>

			
			
			
			
			
		
		<writeHost host="hostM2" url="192.168.126.163:3306" user="root" password="root">
			<readHost host="hostS1" url="192.168.126.162:3306" user="root" password="root" />
		writeHost>
	dataHost>

1.2.5 上传文件

亿级流量架构|day08-数据库高可用进阶及Redis初识_第6张图片

将前期准备中的文件上传。

然后执行命令
亿级流量架构|day08-数据库高可用进阶及Redis初识_第7张图片

1.2.6 Mycat高可用测试

将主库关闭后,测试高可用是否能够实现,测试数据是否同步。
亿级流量架构|day08-数据库高可用进阶及Redis初识_第8张图片

1.3 分库分表

1.3.1 为什么要分库分表

当数据库中存储的数据很多,使用优化策略也无法达到用户要求时才会进行分库分表。

1.3.2 数据库的垂直拆分

根据业务逻辑进行拆分,将一个数据库中的表,拆分到多个数据库中。
亿级流量架构|day08-数据库高可用进阶及Redis初识_第9张图片

1.3.3 数据库的水平拆分

由于单表数据量很大,将单表中的数据,水平拆分到多张表中,分配到多个数据库中。
亿级流量架构|day08-数据库高可用进阶及Redis初识_第10张图片

1.3.4 数据库如何优化

1.优化sql语句
原则:
-尽量使用逐渐查询。
-尽量使用单表查询,不要关联查询。
-查询时可以用in,但绝对不要用not in。

2.创建索引

CREATE INDEX 索引名称ON 表名称 (列名称)

3.添加缓存
例如:mybatis 一/二级缓存 该操作效率低
主要:redis/memercache(String)
作用:可以有效地缓解数据库压力

4.使用数据库的读写分离

5.定期将历史数据进行转储
当前表/查询历史表

6.进行分库分表(最后策略)
数据库服务器数量和运维都要花费很多的时间和精力。

2 Redis学习

2.1 缓存介绍

2.1.1 缓存设计架构

亿级流量架构|day08-数据库高可用进阶及Redis初识_第11张图片

2.1.2 缓存机制

-缓存的目的就是减少访问物理设备的访问频次。
-缓存中的数据就是数据库中的数据。
-缓存中的数据保存在内存中,目的是能够快速实现数据响应。

2.1.3 引入缓存后的问题

1.缓存中使用什么数据结构存储?
采用k-v格式存储,同时key禁止重复。
定义key策略:字符串_ID

2.如果缓存服务器宕机,则内存中的数据都将丢失。
将内存中的数据定期持久化。

3.缓存中的数据如何保证与数据库数据的一致性?(数据一致性)
如果数据库数据发生变化,就应该同步缓存中的数据。

4.缓存中的数据如何控制大小?(1G)
策略:将最近最少使用的数据清空。
LRU算法:内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存而腾出空间来加载另外的数据.

5.如何保证缓存的查询更快?
C语言

2.1.4 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)。

2.2 Redis安装

2.2.1 Redis下载

亿级流量架构|day08-数据库高可用进阶及Redis初识_第12张图片

2.2.2 Redis安装

1.编译(gcc编译C语言环境)

redis   make

亿级流量架构|day08-数据库高可用进阶及Redis初识_第13张图片

2.安装Redis

make install

亿级流量架构|day08-数据库高可用进阶及Redis初识_第14张图片

2.2.3 Redis启动

1.redis-server
2.redis-server &表示还有后续操作(回车后生效)
-以上两种启动方式,都有默认的配置,远程服务器不能连默认的redis。
3.redis-server redis.conf
根据配置文件启动redis

关闭:
-kill -9 6139
-redis-cli -p 6379 shutdown
-redis-cli shutdown 关闭端口为6379的redis
亿级流量架构|day08-数据库高可用进阶及Redis初识_第15张图片

2.2.4 修改redis配置文件

vim redis.conf

1.取消ip绑定
亿级流量架构|day08-数据库高可用进阶及Redis初识_第16张图片

2.关闭保护模式
亿级流量架构|day08-数据库高可用进阶及Redis初识_第17张图片

3.开启后台启动
亿级流量架构|day08-数据库高可用进阶及Redis初识_第18张图片

2.3 Redis命令

前提:需要通过redis客户端操作命令
命令: redis-cli -p 6379

2.3.1 String类型

亿级流量架构|day08-数据库高可用进阶及Redis初识_第19张图片

亿级流量架构|day08-数据库高可用进阶及Redis初识_第20张图片

2.3.2 List列表类型

List列表类型(list)是一个存储有序的元素的集合类型。
List数据类型底层是一个双端列表,可以从左右分别进行写入操作,双端列表的数据特点:查询两端数据时速度较快,查询中间数据较慢.

亿级流量架构|day08-数据库高可用进阶及Redis初识_第21张图片

你可能感兴趣的:(Java笔记)