原始的项目架构是将项目和数据库的服务放在一台服务器上,那时,访问量达不到的上限,不足以让数据库或者服务宕机,客户端的请求直接访问到某一台服务器上,并由具体的服务器软件解析请求,定位到指定的项目资源,再由项目资源访问数据库,获取对应的数据,返回给服务器软件,再做出相应的业务,并响应到客户端.
后来,随着网络的发展,开始的项目架构已经不能满足现有的需求,所有,项目架构开始发生变化.服务器中存在有数据库服务器,.现在的架构,将数据库服务器分离出去了,成为了一个完整的服务,只是完成数据的服务.这种的架构能提高用户的访问量
随着技术的发展,但是在今天,分类的架构已经不能完成现在的需求,架构继续发生着变化,变的成熟,变得复杂,变得庞大,在实际的生产环境中,由单台的数据库服务器不能满足现在的需求了.为了解决这一个问题,我们使用集群,就可以很好的解决这一问题.
通过增加数据库的数量,来达到减轻单台数据库的访问压力,这些数据库要进行统一管理,数据统一…这一系列的问题.为了同步数据,就采用了主从复制的方式来解决.这样以来从数据库只能用来读数据,不能用来写数据,因为,从数据库没有同步到主数据.如果有一个请求在从数据中添加了一条数据,另一个请求在主数据库中读,是没有的,因为主数据是不会去复制从数据库中数据的.
为了解决这一问题,使用了数据库中间件来解决这一问题.中间件可以来识别你的操作是读还是写,如果是写的操作的话,还是只能访问一台数据库,这一台数据库是不能解决实际的问题的,所有要把主数据库建立一个集群.这样就能减轻主数据库的压力.
我们先搭建主从复制.采用mysql数据库来实现主从复制
搭建前的准备:
准备三台服务器,
master 主数据库
slave1 从数据
slave2 从数据
三台服务器上安装mysql数据库.
关闭防火墙,如果不关闭防火墙,需要开放端口,mysql的默认端口是3306,需要开放端口
这里我选择虚拟机来实现
克隆三台安装了mysql
的虚拟机,系统是centos7
,安装了mysql
的centos
中在/etc目录下,会有一个my.cnf
文件,需要我们添加一些参数,进行配置:
注意:这些配置要配置到socket的配置下面,负责会出现一些问题
这个是主数据库的配置, 建议修改之前先复制一份该文件,做好备份
参数解析:
server-id 是唯一标识,不要重复就好了
bog-bin=mysql-bin mysql的日志文件名
log-slave 根据主数据库的日志来更新从数据库的数据
从数据库的配置,也是在/etc/my.cnf文件修改,添加如下配置
注意:这个配置也要配置在socket下面,避免一些错误
配置好了两个从数据库.
将三台服务器的数据库进行重启:
systemctl restart mysqld
如果在这里重启数据一直卡,说明你刚刚配置的信息错误,或者配置位置错误.
进入数据库:
执行命令
show VARIABLES like 'server_id';
如果可以查询出你刚刚配置的id出来,就证明你的配置成功了.检查你的两个从数据库是否配置成功.
查看主数据库的日志
在主数据库中执行:
show master status;
登陆到两个从数据库中:
执行:
change master to
master_host='192.168.64.200',
master_user='root',
master_password='1234',
master_log_file='mysql-bin.000001',
master_log_pos=627;
参数解析:
master_host 主数据库的IP
master_user 主数据库的用户名
master_password 主数据的密码
master_log_file 主数据库的日志名
master_log_pos 主数据库据的日志开始行数
命令:
start slave; 开启主从复制
stop slave; 停止主从复制
show slave status; 查看主从复制的状态
这里可以发现存在一个错误:
错误信息告诉我们,mysql
的UUID
重复了.我们需要将mysql
的UUID
的值修改成不一样就好了
为什么会报错;原因其实很简单,因为我们的虚拟机是克隆的,里面的mysql也是克隆的,所有里面的配置信息都是一样的.
解决方案:
先退出从数据库,把按照的mysql数据库唯一标识的文件删除了,让它重新生成一个就好了.
执行命令:
find / -name "auto.cnf"
rm -rf /var/lib/mysql/auto.cnf
systemctl restart mysqld
重新进入数据库中,启动主从复制,在查看状态
执行命令:
start slave;
show slave status;
在win10的系统上进行访问数据库吧.
基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。
MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。
将虚拟机上的mycat解压;
命令:
tar -zxvf mycat.tar.gz
解压完成后,到/etc/profile
文件中进行环境变量的配置
export MYCAT_HOME=/usr/mycat
export PATH=$MYCAT_HOME/bin:$PATH
source /etc/profile
在mycat
的安装目中进行配置
将schema.xml
中的
标签中内容全部删除,配置下面的内容
配置Mycat
的逻辑库
定义MyCat的逻辑库
name: 逻辑库的名字 dataNode:配置真实的数据节点
<schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode">schema>
配置数据节点
定义MyCat的数据节点
name:对应schema中dataNode属性 dataHost:配置执行sql的数据库服务器 databse:操作的真实数据库
<dataNode name="testNode" dataHost="dtHost" database="test" />
配置数据库主机
配置数据主机,sql的数据库服务器
name:与dataNode中的dataHost对应
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
....
dataHost>
在配置主机中配置心跳检测
<heartbeat>select user()heartbeat>
在配置主机中配置主从节点
配置主节点以及从节点 从节点需要配置在主节点中
<writeHost host="hostM1" url="192.168.28.4:3306" user="root" password="root">
<readHost host="hostS1" url="192.168.28.5:3306" user="root" password="root" />
<readHost host="hostS2" url="192.168.28.6:3306" user="root" password="root" />
writeHost>
总体配置
<schema name="test_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="testNode">schema>
<dataNode name="testNode" dataHost="dtHost" database="test" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()heartbeat>
<writeHost host="hostM1" url="192.168.28.4:3306" user="root"
password="root">
<readHost host="hostS1" url="192.168.28.5:3306" user="root" password="root" />
<readHost host="hostS2" url="192.168.28.6:3306" user="root" password="root" />
writeHost>
dataHost>
修改server.xml
文件, 同样是在conf
文件夹中
<system>
<property name="defaultSqlParser">druidparserproperty>
<property name="charset">utf8property>
system>
<user name="root">
<property name="password">rootproperty>
<property name="schemas">test_schemaproperty>
user>
编写程序:
配置数据库连接:
username 是你的mycat的用户名
password 是你的mycat的密码
url 是你的mycat的连接地址,mycat的端口默认是8066
后面是mycat配置的逻辑库
type 是你使用的数据库连接池
driver 数据库的驱动
进行测试: