分享好友 最新动态首页 最新动态分类 切换频道
Mysql读写分离,Mycat、ProxySQL(代理服务器)--多种问题
2024-12-26 14:57

Mycat关键特性

支持SQL92标准

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

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

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

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

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

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

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

支持多租户方案

支持分布式事务(弱xa

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

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

强大的web,命令行监控

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

支持密码加密

支持服务降级

支持IP白名单

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

支持分表(1.6

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

Mycat工作原理

Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户

MyCat的高可用性

需要注意: 在生产环境中, Mycat节点最好使用双节点, 即双机热备环境, 防止Mycat这一层出现单点故障.

可以使用的高可用集群方式有:

Keepalived+Mycat+Mysql

Keepalived+LVS+Mycat+Mysql

Keepalived+Haproxy+Mycat+Mysql

例如:lvs+mysq实现读写分离:参考

例二:keepalived+LVS+mysql 实现读写分离+高可用

Mycat安装


  1. 下载安装JDK

yum -y install java

#确认安装成功

java -version

  1. 下载安装mycat

wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

mkdir /app

tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /app

配置环境变量

echo ‘PATH=/app/mycat/bin:$PATH’ > /etc/profile.d/mycat.sh

source /etc/profile.d/mycat.sh

mycat安装目录结构

bin mycat命令,启动、重启、停止等

catlet catlet为Mycat的一个扩展功能

conf Mycat 配置信息,重点关注

lib Mycat引用的jar包,Mycat是java开发的

logs 日志文件,包括Mycat启动的日志和运行的日志

version.txt mycat版本说明

logs目录:

wrapper.log mycat启动日志

mycat.log mycat详细工作日志

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件

server.xml Mycat软件本身相关的配置文件,设置账号、参数等

schema.xml Mycat对应的物理数据库和数据库表的配置,读写分离、高可用、分布式策略定制、节点控制

rule.xml Mycat分片(分库分表)规则配置文件,记录分片规则列表、使用方法等

启动和连接

#配置环境变量

vim /etc/profile.d/mycat.sh

PATH=/app/mycat/bin:$PATH

source /etc/profile.d/mycat.sh

#启动

mycat start

#查看日志,确定成功

cat /app/mycat/logs/wrapper.log

INFO | jvm 1 | 2019/11/01 21:41:02 | MyCAT Server startup successfully. see

logs in logs/mycat.log

#连接mycat

mysql -uroot -p123456 -h 127.0.0.1 -P8066

Mycat 主要配置文件说明

用户配置节点

客户端登录MyCAT的用户名,也就是客户端用来连接Mycat的用户名。

客户端登录MyCAT的密码

数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如:db1,db2

配置用户针对表的增删改查的权限

mycat逻辑库所具有的权限。true为只读,false为读写都有,默认为false

用Mycat实现MySQL的读写分离


服务器共三台

mycat-server 192.168.100.10 内存建议2G以上

mysql-master 192.168.100.11

mysql-slave 192.168.100.12

关闭SELinux和防火墙

systemctl stop firewalld

setenforce 0

时间同步

创建 MySQL 主从数据库

yum -y install mariadb-server

  1. 修改master和slave上的

#master上的my.cnf

[root@centos8 ~]#vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]

server-id = 1

log-bin

#slave上的my.cnf

[mysqld]

server-id = 2

[root@centos8 ~]#systemctl start mariadb

  1. Master上创建复制用户

GRANT REPLICATION SLAVE ON . TO ‘repluser’@‘192.168.100.12’ IDENTIFIED BY ‘123456’;

FLUSH PRIVILEGES;

show master status;

  1. Slave上执行

mysql -uroot -p

CHANGE MASTER TO

MASTER_HOST=‘192.168.100.11’,

MASTER_USER=‘repluser’,

MASTER_PASSWORD=‘replpass’,

MASTER_LOG_FILE=‘mariadb-bin.000001’,

MASTER_LOG_POS=403;

start slave;

show slave statusG

安装mycat并启动

yum -y install java mariadb

#确认安装成功

java -version

wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

mkdir /app

tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /app

配置环境变量

echo ‘PATH=/app/mycat/bin:$PATH’ > /etc/profile.d/mycat.sh

source /etc/profile.d/mycat.sh

启动mycat

mycat start

ss -ntlp

#查看日志,确定成功,可能需要等一会儿才能看到成功的提示

tail /app/mycat/logs/wrapper.log

用默认密码123456来连接mycat

mysql -uroot -p123456 -h 192.168.100.10 -P8066

在mycat 服务器上修改文件配置Mycat的连接信息

vim /app/mycat/conf/server.xml

#连接Mycat的用户名

#连接Mycat的密码

123456

#数据库名要和schema.xml相对应

testdb

</mycat:server>

修改schema.xml实现读写分离策略

vim /app/mycat/conf/schema.xml

<mycat:schema xmlns:mycat=“http://io.mycat/”>

<schema name=“TESTDB” checkSQLschema=“false” sqlMaxLimit=“100”

dataNode=“dn1”>

<dataHost name=“localhost1” maxCon=“1000” minCon=“10” balance=“1

writeType=“0” dbType=“mysql” dbDriver=“native” switchType=“1”

slaveThreshold=“100”>

select user()

***<writeHost host=“host1” url=“192.168.100.11:3306” user=“root”

password=“123456”>***

***<readHost host=“host2” url=“192.168.100.12:3306” user=“root”

password=“123456” />***

</mycat:schema>

#重新启动mycat

[root@centos8 ~]#mycat restart

balance改为1,表示。以上配置达到的效果就是192.168.100.11为主库,192.168.100.12为从库

要保证192.168.100.11和192.168.100.12机器能使用root/123456成功登录mysql数据库。

同时,也一定要授权mycat机器能使用root/123456权限成功登录这两台机器的mysql数据库!这很重要,否则会导致登录mycat后,对库和表操作失败

在后端主服务器创建用户并对mycat授权

[root@centos8 ~]#mysql -uroot -p

mysql> create database mycat;

mysql>GRANT ALL ON . TO ‘root’@‘192.168.100.10’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;

mysql> flush privileges;

在Mycat服务器上连接并测试

mysql -uroot -pmagedu -h127.0.0.1 -P8066 -DTESTDB

mysql> show databases;

±---------+

| DATABASE |

±---------+

| TESTDB | //只能看一个虚拟数据库

±---------+

mysql> use TESTDB;

mysql> create table t1(id int);

MySQL> select @@server_id;

MySQL> select @@hostname;

通过通用日志确认实现读写分离

在mysql

show variables like ‘general_log’; #查看日志是否开启

set global general_log=on; #开启日志功能

show variables like ‘general_log_file’; #查看日志文件保存位置

set global general_log_file=‘tmp/general.log’; #设置日志文件保存位置

在主和从服务器分别启用通用日志,查看读写分离

vim /etc/my.cnf.d/mariadb-server.cnf

[mysqld]

general_log=ON

systemctl restart mariadb

tail -f /var/lib/mysql/centos8.log

停止从节点,MyCAT自动调度读请求至主节点

systemctl stop mariadb

mysql -uroot -pmagedu -h192.168.100.10 -P8066

MySQL [(none)]> select @@server_id;

±------------+

| @@server_id |

±------------+

| 1 |

±------------+ 1 row in set (0.00 sec)

#停止主节点,MyCAT不会自动调度读请求至从节点

二. ProxySQL(读写分离 代理服务器

==========================================================================================

https://proxysql.com/

ProxySQL: MySQL中间件 两个版本:官方版和percona版,percona版是基于官方版基础上修改C++语言开发,轻量级但性能优异(支持处理千亿级数据)具有中间件所需的绝大多数功能,包括

多种方式的读/写分离

定制基于用户、基于schema、基于语句的规则对SQL语句进行路由

缓存查询结果

后端节点监控

官方站点:https://proxysql.com/

官方手册:https://github.com/sysown/proxysql/wiki

**proxySQL的判断标准

从节点的read-only**

ProxySQL安装


准备

实现读写分离前,先实现主从复制

注意:slave节点需要设置read_only=1

基于YUM仓库安装

cat <<EOF | tee /etc/yum.repos.d/proxysql.repo

[proxysql_repo]

name= ProxySQL YUM repository

baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/$releasever

gpgcheck=1

gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key

EOF

基于RPM下载安装:https://github.com/sysown/proxysql/releases

ProxySQL组成

服务脚本:/etc/init.d/proxysql

配置文件:/etc/proxysql.cnf

主程序:/usr/bin/proxysql

基于的数据库文件:/var/lib/proxysql/

启动ProxySQL:service proxysql start

启动后会监听两个默认端口

6032:ProxySQL 的管理端口

6033:ProxySQL 对外提供服务的端口

使用mysql客户端连接到ProxySQL的,默认管理员用户和密码都是admin

通过sql命令来配置管理

mysql -uadmin -padmin -P6032 -h127.0.0.1

数据库说明

main 是默认的”数据库”名,表里存放、等信息。表名以 runtime_开头的表示proxysql当前运行的配置内容,不能通过dml语句修改,只能修改对应的不以 runtime_ 开头的(在内存)里的表,然后 LOAD 使其生效,SAVE 使其存到硬盘以供下次重启加载

disk 是持久化到的配置,sqlite数据文件

stats 是proxysql运行抓取的统计信息,包括到后端各命令的执行次数、流量、processlist、查询种类汇总/执行时间,等等

monitor 库存储 的信息,主要是对后端db的健康/延迟检查

在main和monitor数据库中的表, runtime_开头的是,不能修改,只能修改非runtime_表

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

1、JAVA面试核心知识整理(PDF:包含JVMJAVA集合JAVA多线程并发,JAVA基础Spring原理微服务,Netty与RPC,网络,日志ZookeeperKafkaRabbitMQ,HbaseMongoDB,Cassandra设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

2、Redis学习笔记及学习思维脑图

3、数据面试必备20题+数据库性能优化的21个最佳实践

[外链图片转存中…(img-lL3Xcmcy-1711803618610)]

1、JAVA面试核心知识整理(PDF:包含JVMJAVA集合JAVA多线程并发,JAVA基础Spring原理微服务,Netty与RPC,网络,日志ZookeeperKafkaRabbitMQ,HbaseMongoDB,Cassandra设计模式负载均衡数据库一致性哈希JAVA算法数据结构,加密算法分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算共30个章节。

[外链图片转存中…(img-lzeWMMzS-1711803618611)]

2、Redis学习笔记及学习思维脑图

[外链图片转存中…(img-mB9zAlX8-1711803618611)]

3、数据面试必备20题+数据库性能优化的21个最佳实践

最新文章
网站优化中的内部链接和外部链接?
对于网站优化而言,内部链接和外部链接一定是我们经常接触到的名词,但对于许多刚接触网站的朋友这两个名词可能会有些许陌生,因此,下面就来给大家讲讲这两个我们日后会经常接触到的名词。一、内部链接 指通过用户点击此超链接,将用户从
小米全新智能生活App引领智能生活新时代
小米推出最新款App,引领智能生活革新。该应用致力于提供便捷、智能的服务,为用户带来全新的生活体验。通过先进的科技手段,实现智能家居控制、健康管理、娱乐休闲等功能,让日常生活更加智能化、便捷化。这款App将成为用户智能生活的得力
用AI一键生成超逼真美女写真,轻松搞定你的视觉需求!
Deep Dream Generator:这个工具擅长通过深度学习技术来重塑图像,能生成独特的艺术风格。生成的图像富有梦幻色彩,适合希望创造出奇异效果的用户。不过,由于其生成的的图像往往较为抽象,可能不符合所有用户的需求。Generate.AI:作为新
轻松搭建企业,塑造专业品牌形象全攻略
本教程将指导您轻松搭建企业,助您塑造专业企业形象。涵盖从到设计、内容编辑及SEO优化等关键步骤,助您快速上线并提升品牌影响力。挑选合适的建设明确的功能与布局设计建设详细步骤的与优化策略在互联网迅猛发展的今天,企业已成为企业塑
这些豫企相当潮丨一只“雨燕”翱翔AI时代——来自麒麟合盛网络技术股份有限公司的调研报告
  企业家名片  李涛,麒麟合盛网络技术股份有限公司(APUS)董事长兼CEO,1999年进入互联网行业,2014年创办APUS,见证了中国互联网乃至全球互联网起起伏伏的发展历程,凭借敏锐的市场洞察力,对我国互联网、大数据、云计算、移动安全
星尘智能发布AI机器人Astribot S1
  上证报中国证券网讯(记者 孙小程)近日,星尘智能发布新一代AI机器人Astribot S1。在未经加速处理的视频中,S1机器人通过模仿学习,在家居、工作场景中执行一系列对人有用的复杂任务。公司表示,S1已接入大模型测试,能像人一样学习、
首个被人类骗钱骗感情的AI出现了
一段话,让 AI 给我打几万美元。爽文都不敢想的情节,发生在了现实之中。事实上并没有。11 月 29 日,Freysa 累计和 195 名人类聊了 482 次,被骗走约 4.7 万美元。12 月 2 日,在和 330 名人类周旋之后,Freysa 又一次被骗走约 1.3 万美元
耐玩又不氪金的手游排行榜
简介:  3733游戏盒子集合全网公益服手游,包括BT版、满VIP版、GM版、无敌汉化版等,内置的游戏,充值低至0.1折,可20倍加速,让任务/跑环更轻松。3733游戏盒还重磅打造帐号交易与小号回收功能,小号不玩,官方高价回收。此外,盒子还拥
刘春雄:快消品时代之问:新增长与高效率 | 营销盛典分享
12月6日至7日,以“越关山·突破周期,创新增长”为主题,由销售与市场杂志社与安得智联主办,名仁苏打水、淘工厂・淘宝买菜赞助的第二十一届中国营销盛典暨第二届中国消费品新供应链新增长大会在广东佛山顺德如期举行,来自不同领域的品牌
最好的Google关键词长尾词查找挖掘工具 – 2019收藏版
英文SEO内容优化是一个复杂的系统工程,要提高这项工作的能力,除了应该具备一套完整的结构化思维之外,找到一个好用的工具能够极大的提高工作效率。1.  AdWordSEO Keyword Permutation Generator想找到更多的关键词组合,这个工具可以轻
相关文章
推荐文章
发表评论
0评