概述
当系统处于高并发的请求环境下,我们的服务器易出现单点故障
与单点压力
问题,因此采用集群的方式进行·负载均衡·。同时,开启数据库的主从复制
与读写分离
策略。本篇将以一台主机、一台从机介绍简单MySQL集群的搭建。
工具准备
- MyCat中间件 获取地址:(
获取码:d7g3
)https://pan.baidu.com/s/1YHKyVpeMpErJTLNh3PAd6Q
什么是MyCat?https://www.jianshu.com/p/c6e29d724fca
主从复制
①准备2台MySQL服务器
②设置主机
- 进入主机服务器,进入
/etc/my.cnf
进行设置
vim /etc/my.cnf
在此文件下,添加如下配置
[mysqld]
#主机与从机的ID要不同
server-id=1
log-bin=mysql-bin #开启二进制日志文件的名字
log-slave-updates #从机随着日志文件的变化而变化
slave-skip-errors=all #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
效果图如下:
- 重启主机MySQL服务
[root@hbase ~] systemctl restart mysql
- .登录mysql执行如下命令检测配置是否生效
mysql> show variables like 'server_id';
#配置成功则显示如下
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 1 |
+---------------+-------+
1 row in set (0.00 sec)
- 查看master`日志文件
mysql> show master status;
#这里的日志文件要与从机进行对接
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 4294 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec
③设置从机
- 进入从机服务器,进入
/etc/my.cnf
进行设置
vim /etc/my.cnf
在此文件下,添加如下配置
[mysqld]
#id要区别与主机
server-id=2
log-bin=mysql-bin #开启二进制日志功能
log-slave-updates
slave-skip-errors=all #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
- 重启从机MySQL服务
[root@hbase ~] systemctl restart mysql
- .登录mysql执行如下命令检测配置是否生效
mysql> show variables like 'server_id';
#配置成功则显示如下
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 2 |
+---------------+-------+
1 row in set (0.00 sec)
- 执行如下命令,使得从机与主机日志保持一致
mysql> change master to
-> master_host='10.10.0.151',
-> master_user='root',
-> master_password='0',
-> master_log_file='mysql-bin.000002', #这里的文件要与主机的日志文件名保持一致
-> master_log_pos=120;
- 启动从节点
start slave;
- 查看从节点状态
当下图所示的两个状态都是 YES 成功配置
show master status\G;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
...............................
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
- 额外
当以上状态中存在No
的时候,我们可以使用以下命令查看mysql执行日志文件,查看异常信息。
cat /var/log/mysqld.log
出现以下异常时:
[ERROR] Slave I/O: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work. Error_code: 1593
- 停止从机
stop slave;
- 找到auto.cnf文 件,并删除,重启mysql会产生一个新的此文件
find / -name "auto.cnf" # 查找
rm -rf /var/lib/mysql/auto.cnf #删除
systemctl restart mysql #重启mysql服务
此时我们再次启动从机,查看状态,两者即为yes。
至此,我们的主从复制
就搭建完成。
读写分离
①安装MyCat
[root@hbase mycat] tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
②配置schema.xml
进入 安装目录下的conf文件中
[root@hbase mycat] vi schema.xml
配置如下信息
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 定义MyCat的逻辑库 name是自定义的mycat逻辑库名 dataNode 定义数据节点,对应下一行的name -->
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dataNode"></schema>
<!-- 定义MyCat的数据节点 database配置你的真实数据库名 -->
<dataNode name="dataNode" dataHost="dtHost" database="project" />
<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="10.10.0.151:3306" user="root" password="0">
<!--从节点-->
<readHost host="hostS1" url="10.10.0.152:3306" user="root" password="0" />
</writeHost>
</dataHost>
</mycat:schema>
③配置登陆mycat的权限server.xml
[root@hbase mycat] vi server.xml
配置如下信息
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<!-- 这里配置的都是一些系统属性,可以自己查看mycat文献参考-->
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8</property>
</system>
<!--配置mycat的用户信息-->
<user name="root">
<property name="password">root</property>
<!-- 配置逻辑库名 -->
<property name="schemas">mycat</property>
</user>
</mycat:server>
③配置启动超时等待时间
因为mycat默认的启动时间为5s,超时即失败。因此我们要自己设置它的启动等待时间
进入 wrapper.xml文件进行配置,在任意位置添加即可。
[root@hbase conf] vi wrapper.conf
#设置启动等待时长为2小时 单位 s
wrapper.startup.timeout=7200
如下图所示
启动MyCat
进入bin目录下执行
[root@hbase bin]# ./mycat console
查看日志
进入logs
目录下
tail -f mycat.log
SpringBoot集成
在yml
文件中添加:
#配置数据源(读写分离数据源)
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://10.10.0.151:8066/mycat #连接mycat逻辑库
username: root
password: root
至此,我们的读写分离
配置完成。