Ameba读写分离_mycat分库分表_redis缓存

数据库的读写分离

1.1 Amoeba实现读写分离

1.1.1 定义

Amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy

优点:

  1. 配置读写分离时较为简单.配置文件编写方便
  2. 可以做到整个数据库的读写分离
  3. 占用的资源较少.

缺点:

  1. 不能实现高可用
  2. 现在不更新维护了

1.2 搭建amoeba

1.2.1 安装JDK

说明:Amoeba的使用依赖于JDK.

1.2.2 安装Amoeba

说明:将Amoeba文件拖入/usr/local/src/

将其解压

1.2.3 使用工具修改xml

通过工具连接远程的amoeba虚拟机

1.3 修改DBServer.xml

1.3.1 修改用户名和密码

1.3.2 配置数据库服务

说明:定义主数据库的IP地址

1.3.3 定义读操作策略

1.4 Amoeba配置

1.4.1 修改Amoeba.xml文件

说明:

默认的amoeba访问主库.

如果配置了读写分离则采用读写分离的操作数据库

所有的写库操作访问主数据库.

所有的读操作,访问multiPool负载均衡后的数据库slave,master,salve

Amoeba默认的访问端口是8066

1.5 修改JVM内存

1.5.1 修改内存

说明:

说明:原因的jvm配置文件大小只有256M太小,amoeba不能正常启动,需要修改JVM大小.

1.6 Amoeba启动

1.6.1 启动Amoeba

说明:进入到bin目录下执行启动命令

/usr/local/src/amoeba-mysql-3.0.4-BETA/bin

./launcher  启动

./shutdown  停止

1.7 Amoeba测试

1.7.1 连接Amoeba

说明:通过工具连接远程Amoeba.切记关闭防火墙

1.7.2 代码测试

说明:通过京淘后台管理修改数据源配置,通过代码测试Amoeba

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://192.168.126.139:8066/jtdb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true

jdbc.username=root

jdbc.password=root

1.8 错误集锦

1.8.1 关闭主库和从库的防火墙

说明:当虚拟机开机后,防火墙默认开启了,需要再次手动关闭.

1.8.2 修改配置文件后没有及时报错

共修改2个配置文件dbServer.xml,amoeba.xml

需要通过工具进行下载和上传/保证上传的文件不错.

1.8.3 报错端口占用

  1. 关机重启
  2. 查询项目的进程后杀死进程

Kill -9 5652

  1. ./shutdown 关闭amoeba
  2. 修改JVM内存

Mycat介绍

2.1 Mycat下载

2.1.1 下载地址

官网地址: http://www.mycat.io/

2.1.2 安装JDK

2.2 MyCat安装

2.2.1 解压文件

tar -xvf Mycat………

2.2.2 编辑schemas.xml文件

2.2.3 定义负载策略:

<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.137:3306" user="root" password="root">

<!--读数据库-->

<readHost host="hostS1" url="192.168.126.141:3306" user="root" password="root" />

</writeHost>

<!--定义第二台主机 由于数据库内部已经实现了双机热备.

Mycat实现高可用.当第一个主机137宕机后.mycat会自动发出心跳检测.检测3次.如果主机137没有给Mycat响应则判断主机死亡.则启动第二台主机继续为用户提供服务.

如果137主机恢复之后则处于等待状态.如果141宕机则137再次持续为用户提供服务.

前提:实现双机热备.

-->

<writeHost host="hostM2" url="192.168.126.141:3306" user="root" password="root">

<readHost host="hostS1" url="192.168.126.137:3306" user="root" password="root" />

</writeHost>

</dataHost>

2.2.4 修改server.xml

默认的schemas是TextDB.需要手动修改

2.2.5 启动Mycat

说明:进入根目录cd /usr/local/src/bin

./mycat start   启动

./mycat stop关闭mycat

2.2.6 测试

2.3 报错说明

2.3.1 IP错误

检测IP地址和自己的机器是否匹配

192.168.126.137

2.3.2 配置文件上传是否正确

  1. 分别检测server.xml和schema文件是否上传成功

2.如果正确还是测试不成功,则先关闭mycat,控制台通过rm -rf 命令将Mycat的2个配置文件删除.之后通过FZ工具上传修改后的配置文件.之后重启mycat

2.3.3 检测日志是否启动成功

cd /usr/local/src/mycat/logs/  cat wrapper.log

2.3.4 关于getByte报错

由于Mycat中解析配置文件时会出现报错信息,

所以将每行注释都添加<!—注释-->

Redis学习

3.1 传统框架中的瓶颈

3.1.1 缓存机制

缓存机制其实就是降低了客户端访问真实数据源的访问频次.缓存中的数据就是数据源就数据的备份.如果数据源数据发生改变.缓存数据需要及时更新.

3.1.2 缓存中遇到的问题

  1. 如果采用单台缓存服务器,很容器出现宕机现象.如果缓存服务器宕机将直接影响整个服务.---解决方案部署缓存集群
  2. 如果实现缓存则需要实现数据的同步—配置主从
  3. 如果缓存服务器宕机.数据如何保存.应该将数据尽可能持久化

3.1.3 Redis内存数据库

说明:redis现阶段所有企业中使用最多的内存数据库.其中主要采用key-value的形式保存数据.并且提供很多实用的数据类型.String/list/set/hash.

Redis底层通过C编辑,可以每秒支持110000次的集合运算.并且在内存中运行.

Redis底层实现时自动支持数据的持久化.如果reids重启会自动的扫描持久化文件之后恢复数据.

3.1.4 Redis的下载

http://www.redis.net.cn/

Window版本不建议使用

因为官方没有提供window版本,该window版本是微软自己研发.稳定性不强

3.1.5 缓存架构

3.1.6 解压redis

tar -xvf redis-3.2.8.tar.gz

3.1.7 编译redis

在根目录下执行 /usr/local/src/redis-3.2.8 执行make指令

make

生成可执行文件

3.1.8 安装redis

make install

Redis操作

4.1 启动redis

4.1.1 直接启动

命令:redis-server

说明:默认端口都是6379

问题:通过redis-server启动时,之后不能编写linux命令,需要再次创建链接.造成编码不便

4.1.2 后台启动

  1. 解除IP绑定
  1. 关闭保护模式
  1. 开启后台运行
  1. 开启后台redis

redis-server redis.conf

ps -ef |grep redis

root      5847     1  0 01:45 ?        00:00:00 redis-server *:6379

root      5852  2571  0 01:45 pts/1    00:00:00 grep redis

4.2 操作redis

4.2.1 进入客户端

执行命令:redis-cli

4.3 Redis的操作命令

4.3.1 String 类型操作


指令


说明


案例


set


设定key的值


set name tom


get


获取指定 key 的值


get name


strlen


获取key值的长度


strlen name


exists


检查给定 key 是否存在


exists name 返回1存在  0不存在


del


删除指定的key/key1 key2


del name1 name2


keys


命令用于查找所有符合给定模式 pattern 的 key


Keys * 查询全部的key值

Keys n?me 占位符

Keys name* 以name开头的key


mset


赋值多个key-value


mset key1 value1 key2 value2 key3 value3

同时赋值多个值


mget


获取多个key


Mget key1 key2 key3


append


对指定的key进行追加


append key 123456   value123456

append key " 123456" value 123456中间多一个空格


Type


查看key的类型


Type key1

127.0.0.1:6379> TYPE key1string


Flushdb


清空当前数据库


Flushdb 清空数据库


Select


切换数据库


Select 0-15 redis一共有16个数据库


FLUSHALL


清空全部数据库数据


flushall


Incr


自动增长1


Incr num  数据会自动加1

Incr string 数据库会报错


Decr


自动减1


Decr name 数据会自动减1


incrby


指定步长自增


Incrby 2 每次自增2


Decrby


指定步长自减


Decrby 2每次减2


Expire


指定key的失效时间单位是秒(s)


EXPIRE name1 5   5秒后数据失效


Ttl


查看key的剩余存活时间


Ttl name

-2表示失效

-1没有失效时间


Pexpire


设置失效时间(毫秒)


Pexpire name 1000 用于秒杀业务


Persist


撤销失效时间


撤销失效时间


指令


说明


案例


hset


Hset  key值 属性名 属性值


Hset user id 1

Hset user name tom

设置id和name的属性值


hget


获取指定 key的属性值


Hget user name  获取name属性值


hmset


Hmset user key value1 key2 value2


hmset user id 1 name tom age 18


hmget


hmget user id name age


hmget user id name age 获取user对象的id,name,age的属性值


hgetall


取出key的全部字段值和属性值


HGETALL user


hdel


删除key的指定字段


删除key的指定字段


Hkeys


查看key的全部字段


HKEYS user


hvals


查看key的全部值


Hvals user


hlen


查看key的字段数


Hlen user  查看user的字段数

4.3.2 Redis集合数据类型

1.字符串类型  String

2.散列类型 hash

3.列表类型 list

4.集合类型 set

5.有序集合类型

1.散列类型

可以通过散列类型用来保存对象和属性的值

例如:user对象    {id:2,name:小明,age:19}

通过散列类型赋值不需要{}

4.3.3 List列表类型

List列表类型(list)是一个存储有序的元素的集合类型.List数据类型底层是一个双端列表.可以从左右分别进行写入操作


指令


说明


案例


lpush


将一个或多个值插入到列表左部插入


LPUSH list1 1 2 3 4


rpush


在列表中添加一个或多个从列表右侧插入


RPUSH list1 5 6 7 8


lpop


从列表左侧移除元素,并且返回结果


LPOP list1


rpop


从列表右侧移除元素,并且返回结果


RPOP list1


llen


获取list集合的元素个数


Llen list1


Lrange


获取指定区间内的片段值


LRANGE list1 0 3

获取从左数第1个到第4个值

LRANGE list1 -3 -1

从右数第三个到第一个数据

Lrange list1 0 -1 查询全部列表数据


Lrem


删除列表中指定的值

Irem key count value

当count>0,从左开始删除前count个值为value的元素

当count<0,从右侧开始删除前count个值为value的元素

当count=0时,删除所有value的元素


LREM list1 2 2

从左数前2个为2的元素

LREM list1 -2 3

从右数前2个为3的元素

LREM list1 0 4

删除全部为4的元素


Lindex


根据指定索引值查询元素


LINDEX list1 0   查找索引值为0的值

LINDEX list1 -1 查询最右边的值


Lset


为指定索引赋值


LSET list1 0 10


LINSERT


LINSERT key  before value1 value2

在value1之前插入value2

LINSERT list1 after 1 2


LINSERT list1 before 10 100

从左数第一个为10的元素前插入100

LINSERT list1 after 1 2

从左数第一个为1的值之后插入2

双端列表的数据特点:查询两端数据时速度较快,查询中间数据较慢.

4.3.4 redis集合类型

redis支持集合类型,并且每个集合的元素类型都可以不同,并且集合时无序的.


指令


说明


案例


sadd


向集合添加一个或多个成员


sadd set a b c


scard


获取集合的成员数


SCARD set


srem


删除集合的指定元素


SREM set a  删除set中的a元素


smembers


查看集合的所有元素


SMEMBERS set


Sismember


查看元素是否属于集合


SISMEMBER set a 查看a是否属于set集合


sdiff


返回给定所有集合的差集


sinter


返回给定所有集合的交集


sunion


返回所有给定集合的并集


A={1,2,3}  B={2,3,4}

SUNION a b   = 1,2,3,4

原文地址:https://www.cnblogs.com/erma0-007/p/8619824.html

时间: 2024-10-07 22:38:59

Ameba读写分离_mycat分库分表_redis缓存的相关文章

Mycat读写分离和分库分表配置

Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy.其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端mysql存储引擎里面.最新版本的Mycat不仅支持mysql,还可以支持MS SqlServer,Oracle,DB2等关系型数据库,而且还支持MongoDB这种NoSQL.Mycat对调用者屏蔽了后端存储具体实现. Mycat的原理是先拦截用户的SQL语句并做分

MyCat 读写分离 数据库分库分表 中间件 安装部署,及简单使用

MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端MySQL服务器里或者其他数据库里. MyCat发展到目前的版本,已经不是一个单纯的MySQL代理了,它的后端可以支持MySQL.SQL Server.Oracle.DB2.P

数据库主从复制,读写分离,负载均衡,分表分库的概念

谢邀,这是个好问题,而且这个问题好在即使概念非常容易理解,但是这几个不同的概念细节太多太多,而且理解了概念,自己要用,又需要做很多的调研评估和开发工作.作为在这个领域爬坑多年的人,我这里就先介绍下概念,再提供几个开源工具和云服务吧.先来说这些架构解决的问题吧,传统数据库如Mysql(以下工具也会以Mysql为主),存在的问题就是单机部署,单进程,这样就存在一些问题:资源利用不灵活,有可能cpu的性能还有富余,但是磁盘已经顶不住读压力或写压力了,有可能磁盘的性能还有富余,但是cpu的性能已经顶不住

Mycat 读写分离+分库分表

上次进过GTID复制的学习记录,已经搭建好了主从复制的服务器,现在利用现有的主从复制环境,加上正在研究的Mycat,实现了主流分布式数据库的测试 Mycat就不用多介绍了,可以实现很多分布式数据库的功能,极大的减轻数据库服务器的压力,包括读写分离以及分库分表,本测试对这两种功能都进行了测试,进行相应记录 本文以Mycat官方给出的例子来进行解释总结 首先来看分库分表,分库分表一般来说都是一起说的,但是实际上分库跟分表是有区别的,简单来说有垂直和水平两种方式,垂直就是将表按字段进行拆分,水平就是将

分库分表(6)--- SpringBoot+ShardingSphere实现分表+ 读写分离

分库分表(6)--- ShardingSphere实现分表+ 读写分离 有关分库分表前面写了五篇博客: 1.分库分表(1) --- 理论 2.分库分表(2) --- ShardingSphere(理论) 3.分库分表(3) ---SpringBoot + ShardingSphere实现读写分离 4.分库分表(4) ---SpringBoot + ShardingSphere 实现分表 5.分库分表(5) ---SpringBoot + ShardingSphere 实现分库分表 这篇博客通过S

MyCat实现读写分离+分库分表+全局表

前言 mycat功能强大,配置简单,作为数据库中间件,是一个非常优秀的开源产品,关于MyCat的部署安装,可以参考博文:MyCat部署安装. 本博文将展示mycat的如下功能: 读写分离: 分库分表: 全局表: 环境如下: 系统 IP 主机名 服务 Centos 7.5 192.168.20.2 mysql01 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql02 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql03 MyS

170123、数据库分库分表策略的具体实现方案

相关文章: 1. 使用Spring AOP实现MySQL数据库读写分离案例分析 2.MySQL5.6 数据库主从(Master/Slave)同步安装与配置详解 :http://blog.csdn.net/xlgen157387/article/details/51331244 3.MySQL主从复制的常见拓扑.原理分析以及如何提高主从复制的效率总结 :http://blog.csdn.net/xlgen157387/article/details/52451613 4.使用mysqlreplic

分库分表数据库中间件对比

(一)关键问题 1.读写分离 2.分库分表 3.类别 lib库 1)业务直接到数据库,少一层proxy效率更高 2)没有proxy的lvs的单点问题 proxy 1)统一管理所有到数据库的连接,连接复用 2)基础查询功能抽象,减少代码耦合 3)易于实现监控.数据迁移.连接管理等功能 (二)sharding-jdbc(开源,lib) 当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架 功能 1)以jar包形式提供服务 2)分片灵活,支持等号.between.

OneProxy分库分表演示--楼方鑫

OneProxy分库分表演示 (杭州平民软件有限公司) OneProxy是为MySQL精心设计的数据访问层,可以为任何开发语言提供对MySQL数据库的智能数据路由功能,比如单点切换.读写分离.分库分表等高级功能.并且允许你在公有云和私有云环境下自由布署,打造属于自己的数据架构. 如果在测试中发现问题,请联系我(微博:平民架构,微信:anysql)! 分库分表 Oracle从8.0.x版本开始在数据库内部支持分区表,可以将数据按某一个字段的某一规律来进行分片存贮,以降低数据库索引的层级,提高访问效