什么是mycat呢?

简单理解为一个MySQL中间件,它支持分流、基于心跳的自动故障切换,支持读写分离,支持mysql主从,基于Nio管理线程的高并发…
详见官网:http://www.mycat.io/

为什么需要mysql集群?

一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接,一个是客户端与后端的连接,另一个是后端与数据库的连接,说白了就是发送端请求太多,接收端能够的接收和处理的请求并不多,在客户端与后端中可以利用类似nginx的负载均衡解决,而在后端与数据库中可以利用类似mycat的负载均衡实现mysql集群,提高mysql的总体性能。

这里写图片描述

开始我们的旅程,在此之前,需要准备以下:

1 两台服务器(最少),一主(master)一从(slave),这里用vmware里面装的两个ubuntu server 虚拟机演示,每台虚拟机的网络连接方式都设置为桥接模式,两台虚拟机的ip如下

主:ubuntu server1: 192.168.11.109
从:ubuntu server2: 192.168.11.117
(vmware安装ubuntu server16.04在上两篇博文有详细介绍:
http://blog.csdn.net/change_on/article/details/74969314
http://blog.csdn.net/change_on/article/details/74979993)

这里写图片描述

这里写图片描述

2 虚拟机分别安装好mysql 5.7

3 jdk1.7以上,这里以jdk-7u67-Linux-x64.tar.gz为例

4 mycat,以Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz为例

搭建mycat+mysql集群的步骤

1 mysql主从配置

1.1 主虚拟机配置(192.168.11.109)

1.2 从虚拟机配置(192.168.11.117)

1.3 测试

2 配置mycat

2.1 安装jdk

2.2 安装mycat

2.3 配置server.xml

2.4 配置schema.xml

2.5 测试
mysql主从配置

注意 :mysql5.7的配置文件是 /etc/mysql/mysql.conf.d/mysqld.cnf !不是/etc/mysql/my.cnf !

1主虚拟机配置(192.168.11.109)

1.1 修改/etc/mysql/mysql.conf.d/mysqld.cnf文件

1.1.1 在[mysqld]下添加以下
vi /etc/mysql/mysql.conf.d/mysqld.cnf
character_set_server = utf8
init_connect = 'SET NAMES utf8'
log-bin=mysql-bin
server-id=109
1.2 在[mysqld]下注释掉bind-address = 127.0.0.1

这里写图片描述

1.3 配置master

1.3.1 进入mysql,创建一个具有slave复制权限的用户wen
GRANT REPLICATION SLAVE ON *.* to 'wen'@'%' identified by 'wen';
1.3.2 刷新权限
flush privileges;
1.3.3 显示master
show master status;
2 从虚拟机配置(192.168.11.117)
2.1 修改/etc/mysql/mysql.conf.d/mysqld.cnf文件
2.1.1 在[mysqld]下添加以下
vi /etc/mysql/mysql.conf.d/mysqld.cnf
character_set_server = utf8
init_connect = 'SET NAMES utf8'
log-bin=mysql-bin
server-id=117
2.2 在[mysqld]下注释掉bind-address = 127.0.0.1

2.3 配置slave

2.3.1 进入mysql,重置slave
这里的 master_log_file 和 master_log_pos 在主虚拟机的 mysql 的 master 中,就是上面的图所示!

stop slave;
reset slave;
change master to master_host='192.168.11.109',master_user='wen',master_password='wen',master_log_file='mysql-bin.000013',master_log_pos=1609;
1
2.3.2 启动slave
start slave;

2.2.3 显示slave

其中的Slave_IO_Running 和 Slave_SQL_Running 一定要 Yes 才表示slave启动正确!

show slave status \G
1
1

这里写图片描述

2.4 测试
在master虚拟机中创建一个数据库,然后再slave虚拟机中查看,如果,slave中有刚刚测试的数据库,说明mysql主从配置成功。

主:

这里写图片描述

从:

这里写图片描述

配置mycat(在master虚拟机中配置)

jdk与mycat的压缩包都放在/opt目录下

1 安装jdk

mycat依赖于java1.7以上的环境,先安装jdk1.7

解压jdk

tar -zxvf jdk-7u67-linux-x64.tar.gz
配置环境变量

vi /etc/profile
在末尾添加

# set for java
export JAVA_HOME=/opt/jdk1.7.0_67
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

保存退出

2 安装 mycat

解压mycat

tar -zxvf Mycat-server-1.6-RELEASE-20161012170031-linux.tar.gz
配置环境变量

vi /etc/profile
在末尾添加

export MYCAT_HOME=/opt/mycat
export PATH=$PATH:$MYCAT_HOME/bin
保存退出

使环境变量生效

source /etc/profile

这里写图片描述

3.配置server.xml

到 mycat 的 conf 目录下,修改 server.xml 文件添加 test 和user 用户,test 用户,密码也为 test,user 用户,密码也为user

<user name="test">
<property name="password">test</property>
<property name="schemas">TESTDB</property>

<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>

<user name="user">
<property name="password"> www.wmyl88.com user</property>
<property name="schemas"> www.wmyl15.com TESTDB</property>
<property name="readOnly">true</property>
</user>

4.配置schema.xml

设置读和写服务器的ip与端口,以及集群策略。这里的 schema 的 name 要与 server.xml 的 schema 保持一致, database 对应的是 mysql 里面已经存在的数据库,也就是说,mycat 的 TESTDB 代理了 主/从虚拟机的 mysql 的 test 数据库

<schema name=" www.hbwfjx.cn/ TESTDB" www.feifanshifan8.cn checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>

<dataNode name="dn1" dataHost="master" database="test" />

<dataHost name="master" maxCon="1000" www.caihonyule.com minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>show slave status</heartbeat>
<writeHost host="host2"www.wmyl11.com url="192. www.yigozongdai2.cn 168.11.109:3306" user="root" password="root" />
<writeHost host="host4" url="192.168.11.117:3306" user="root" password="root" />
show slave status 表示一种集群策略,只适用在一主一从的环境中,当主 down 掉, 从可以充当主和从

balance属性

balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上
balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡
balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
balance=”3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力

writeType 属性

负载均衡类型,目前的取值有 3 种:
writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost, 重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties
writeType=”1”,所有写操作都随机的发送到配置的 writeHost

5 启动mycat
cd www.lieqibiji.com/ /opt/mycat/bin
./mycat start

补充:mycat的常用命令

关闭

mycat stop

重启

mycat restart

查看mycat状态

mycat status

6 测试
现在 mycat 可以代理 mysql 了,用 navicat 连接 mycat(8066端口)

这里写图片描述

往数据库里面添加一条数据 wen

这里写图片描述

现在到主虚拟机用命令行查看数据库,看看刚在 navicat 写进 mycat 的数据有没有显示出来

用 mycat 的账号密码登录到主虚拟机的 mycat,查看并添加一条数据 tom

mysql -utest -ptest -h127.0.0.1 -P8066
1
1

这里写图片描述

再切到从虚拟机,用 mysql -uroot -p 登录 mysql,看看刚刚在主虚拟机的 mycat 添加的数据 tom 在从虚拟机能不能看到

这里写图片描述

如果想看看读写分离的细节,可以到 logs 目录下查看日志

/opt/ www.yongshiyule178.com mycat/logs/
tail -f mycat.log
———————————————————分割线—————————————————————-

mysql的问题其实是由于一系列的软肋决定的,所以不得不利用中间件或者其它方案去解决,包括:

在强制约束和事务与全文索引之间做出选择(InnoDb vs MyISAM)

在客户机代码中“模拟”事务是不容易的

如果不执行约束,就很容易得到不一致的db状态

如果没有全文搜索,会变得疯狂,比如% y %

必须在更新触发器之前创建检查约束的错误

当数据变得太大时,Mysql的承受能力就不妙了

Mysql创建的执行计划效率低下

Mysql有超过多个连接的问题(最好说多个连接)

但是! Oracle是所有这些问题的解决方案,它是一个完整的DBMS:事务、检查合同、视图的很多选项、全文搜索…

所以问题的本质是:成本!,mysql 很讨厌,却又不得不用!

mycat实现简单的mysql集群负载均衡的更多相关文章

  1. haproxy(单机)+mysql集群负载均衡

    HAProxy是 七层代理 ,在使甠HAProxy后,在MySQL上 看不到Apps的源IP地址 ,看到的是HAProxy地址,而 MySQL的权限访问设置是和IP地址有关 ,这样就导致了MySQL无 ...

  2. lunix 集群,负载均衡,location

       nginx location语法: location支持的语法优先级: 复制代码location匹配顺序 #  www.s14hanju.com/1.location = / {  我是代码1} ...

  3. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  4. 转】Nginx+tomcat配置集群负载均衡

    原博文出自于:http://blog.csdn.net/bruce_6/article/details/38228299         感谢! 相信很多人都听过nginx,这个小巧的东西慢慢地在吞食 ...

  5. ngnix apache tomcat集群负载均衡配置

    http://w.gdu.me/wiki/Java/tomcat_cluster.html 参考: Tomcat与Apache或Nginx的集群负载均衡设置: http://huangrs.blog. ...

  6. 【nginx+tomcat集群】Nginx1.12.2+Tomcat7集群+负载均衡+Session共享

    今天想着将项目优化一下,就想的实现集群分布,在本机测试:利用nginx+tomcat实现 通过上一篇博客(http://www.cnblogs.com/qlqwjy/p/8535235.html),N ...

  7. 运维小知识之nginx---nginx配置Jboss集群负载均衡

      codyl 2016-01-26 00:53:00 浏览385 评论0 负载均衡 转自 运维小知识之nginx---nginx配置Jboss集群负载均衡-博客-云栖社区-阿里云https://yq ...

  8. Apache + Tomcat集群 + 负载均衡

    Part I: 取经处: http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html  http://blog ...

  9. .net core 跨平台开发 微服务架构 基于Nginx反向代理 服务集群负载均衡

    1.概述 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客 ...

随机推荐

  1. ES6-课程介绍

    ES6 可以提高开发效率,把ES3比做斧头,ES5比做锯子,那么ES6就是电锯. ES6新特性 默认参数.字符串模板.结构赋值.箭头函数.set\mat .异步操作.类和对象 .模块化

  2. 广电的宽带网络真流氓,替换google的广告为百度的广告

    以前联通也有干过这事,最近联通,有没有继续干,不清楚.没有用联通了. 最近,连到某wifi,发现网站的google广告,居然显示成百度的,特别去访问另一家网站,发现,本该是google广告的位置,同样 ...

  3. phpstorm 2018.1.2的安装和破解

    1.什么是phpstorm? PhpStorm是一个轻量级且便捷的PHP IDE,其旨在提高用户效率,可深刻理解用户的编码,提供智能代码补全,快速导航以及即时错误检查.但是phpstorm是商业软件, ...

  4. prop和attr的比较

    prop来获取或设置固有属性  removeProp()  删除固有属性 attr来获取或设置自定义属性     removeAttr() 删除自定义属性 案例:全选与全不选 <body> ...

  5. JXOI2018简要题解

    JXOI2018简要题解 T1 排序问题 题意 九条可怜是一个热爱思考的女孩子. 九条可怜最近正在研究各种排序的性质,她发现了一种很有趣的排序方法: Gobo sort ! Gobo sort 的算法 ...

  6. 案例学python——案例二:连接数据库MySql

    调侃的话:案例一跑完之后,欣赏把玩了一番.人就有点飘飘然,昨天除了做饭吃饭,就是玩三国杀,江郎才尽,今天周一,不飘了,敲点代码,看看Python操作数据库有啥不一样的. 前期准备: 1.数据库 电脑上 ...

  7. 软件工程(四)数据流图DFD

    结构化分析中,常用到数据模型为实体关系图,功能模型是数据流图 DFD 可以认为,一个基于计算机的信息处理系统由数据流和一系列的转换构成,这些转换将输入数据流变换为输出数据流.数据流图就是用来刻画数据流 ...

  8. 数据结构--图 的JAVA实现(下)

    在上一篇文章中记录了如何实现图的邻接表.本文借助上一篇文章实现的邻接表来表示一个有向无环图. 1,概述 图的实现与邻接表的实现最大的不同就是,图的实现需要定义一个数据结构来存储所有的顶点以及能够对图进 ...

  9. suqid透明正向代理

    如果想实现透明正向代理,则必需将用户的网关IP指向 Squid 服务器,而此后便无需再修改浏览器选项 在命令行 <菜单+R> 中使用 ping  命令: ping  www.baidu.c ...

  10. SpringMVC一例 是否需要重定向

    在ASP.NET MVC下: return view("List") 和 return RedirectToAction("List") 百度知道的最佳答案: ...