分享好友 最新动态首页 最新动态分类 切换频道
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个最佳实践

最新文章
刘春雄:快消品时代之问:新增长与高效率 | 营销盛典分享
12月6日至7日,以“越关山·突破周期,创新增长”为主题,由销售与市场杂志社与安得智联主办,名仁苏打水、淘工厂・淘宝买菜赞助的第二十一届中国营销盛典暨第二届中国消费品新供应链新增长大会在广东佛山顺德如期举行,来自不同领域的品牌
最好的Google关键词长尾词查找挖掘工具 – 2019收藏版
英文SEO内容优化是一个复杂的系统工程,要提高这项工作的能力,除了应该具备一套完整的结构化思维之外,找到一个好用的工具能够极大的提高工作效率。1.  AdWordSEO Keyword Permutation Generator想找到更多的关键词组合,这个工具可以轻
谷歌推广是什么?谷歌推广怎么做?
谷歌推广是什么? GoogleAds,原名GoogleAdWords,是Google公司主要的广告服务产品。AdWords是一种在Google搜索结果页展示的按点击付费的关键字广告。 谷歌推广怎么做? 一:外贸网站建设 外贸网站建设是谷
服装品牌策划方案(大全8篇)
随着市场经济的飞速发展,女性的生活品味、生活质量,正在发生着质的飞跃,饰物与服装也实现了完美结合。下面是本站小编为你带来的服装品牌策划方案范文,欢迎参阅。一、专场活动名称:源于自然 演绎时尚——---------专业毕业设计作品展示
该股的最大炒作亮点是什么?潜在题材又是什么?验证成为手机用户,查看该股万隆原创动态分析报告
老铁们,今天行情,如果没有昨天那个会议利好和高开的走势,老白会觉得微涨还不错,加上美股那边已经跌了两天,而A股则是连涨两天,但是现在的情况好像是昨天那波高开低走是消失了一样,一点都没影响到A股,今天来到了3432点,成交量也有1.
国际站店铺装修指南:打造高转化率的视觉营销空间
尊敬的店主,您是否曾遇到这样的情况:您精心挑选了商品,却发现销售效果并不理想,顾客在进入店铺后很快流失?不用担心,今天就为大家分享一份宝贵的指南,教您如何打造一个高转化率的视觉营销空间。第一步:合理规划空间布局第二步:选用
目前有那些信息流广告(5个搜索引擎信息流广告效果和投放体验)
我们致力于提供一个高质量内容的交流平台。为落实国家互联网信息办公室依法管网、依法办网、依法上网的要求,为完善跟帖评论自律管理,为了保护用户创造的内容、维护开放、真实、专业的平台氛围,我们团队将依据本公约中的条款对注册用户和
百度网站收录提交,百度网站收录提交器
快速提升网站可见度与搜索引擎排名的必备技巧一、理解网站收录的重要性百度作为中国最大的搜索引擎,拥有庞大的用户群体和高度的市场占有率。为了确保您的网站能够被更多潜在用户发现并访问,网站是至关重要的一步。正确的提交方式不仅能加
一步到位,利用AI生成超逼真美女写真,轻松上手!
在这个科技飞速发展的年代,AI的应用已经渗透到我们生活的方方面面。其中,AI绘画、AI写真制作更是得到了广泛的关注。不少小伙伴们都曾幻想过,拥有一张属于自己的专属美女写真,甚至可以用它来当做社交平台的头像,或者送给好友作为惊喜。
Python爬虫入门实战(详细步骤)
爬虫这个功能,我个人理解是什么语言都能写的,只要能正常发送 HTTP 请求,将响应回来的静态页面模版 HTML 上把我们所需要的数据提取出来就可以了,原理很简单,这个东西当然可以手动去统计收集,但是
相关文章
推荐文章
发表评论
0评