- mycat是什么---作用:
java应用程序与数据库紧耦合-----解耦application和db
高访问量高并发对数据库压力----分库分表,多数据源整合
读写请求数据量不一致---(双主双从)读写分离(基于mysql的主从复制)
2.Mycat的安装
需要事先安装jvm环境和安装mysql(jdk采用解压缩,mysql:sudo apt install mysql-server),Mycat压缩包:Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz,解压安装(安装包通常放在/opt路径下,解压后文件通常放在/usr/local路径下)
windows文件拷贝到linux系统,pscp工具,对应命令:pscp 本地文件dir root@IP:/home/dir,随后mv移动文件到/opt路径下(pscp/scp时提示connection refused,原因可能目标linux中没有安装ssh-server或没有启动,sudo apt-get install openssh-server命令安装)
linux解压命令 tar -zxvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar,随后mv文件夹到/usr/local路径下
3.mycat的配置
备份config路径下server.xml,schema.xml,rule.xml文件
修改配置文件server.xml
mycat-server-config.png (vi模式下显示行号:set nu,删除多行是dnd,如d27d)修改配置文件schema.xml:
mycat-schema-config.png 4.Mysql远程访问验证
Mycat作为数据库中间件,要和不同地址的数据库建立访问,准备3台虚拟机数据库地址
mysql -uroot -p556600 -h 10.0.0.214 -P 3306
mysql -uroot -p556600 -h 10.0.0.212 -P 3306
mysql -uroot -p556600 -h 10.0.0.177 -P 3306
如果无权远程访问,主机间授权:grant all privileges on . to root@被受限的主机IP identified by '556600';
如果遇到报错:Can't connect to MySQL server on (111),修改mysql配置:/etc/mysql/mysql.cnf.d/mysqld.cnf,注释bind地址或者改成0.0.0.0,重启mysql服务:service mysql restart
如果遇到报错Can't connect to MySQL server on (110),需关闭防火墙,ubuntu16.04 开启/关闭防火墙:sudo ufw enable/sudo ufw disable
5.Mycat的启动/访问
linux系统中6个任意目录都可以执行的路径:bin sbin usr/bin usr/sbin usr/local/bin usr/local/sbin
控制台启动:mycat/bin目录下执行 ./mycat console(推荐)
后台启动: mycat/bin目录下执行 ./mycat start
运维登录方式访问:mysql -uuser1 -p556600 -h 10.0.0.162 -P9066
数据查询方式访问:mysql -uuser1 -p556600 -h 10.0.0.162 -P8066
注:大p和小p都要写,并且mycat服务器本分要开启远程访问,否则localhost方式只能适合访问本地mysql而不能访问mycat配置的数据库
6.mysql 一主一从搭建
1.不同于redis的主从复制,redis从头复制,替换rdb文件,而mysql从主从复制的切入点开始复制
2.从机读主机的binary log后写入自身的relay log,多次io操作,数据有延迟
主机配置-修改配置文件:vim /etc/mysql/mysql.conf.d/mysqld.cnf(提前备份)
1.主机唯一id server-id=1
2.启动二进制日志 log-bin=mysql-bin
3.设置需要复制的数据库 binlog-do-db=需要复制的主数据的名字
4.设置不需要复制的数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema
5.设置logbin格式 binlog_format=STATEMENT(默认)
从机配置-修改配置文件:vim /etc/mysql/mysql.conf.d/mysqld.cnf(提前备份)
1.从机唯一id server-id=2
2.启用中继日志
relay-log=mysql-relay
重启mysql主机从机的服务
主机从机关闭防火墙
在主机上以-hlocalhost而非主机ip方式登录,建立账户并授权salve,授权命令 GRANT REPLICATION SALVE ON . TO 'slave'@'可以以这个用户名密码访问主机的ip(%表示任意ip)' IDENTIFIED BY '556600';
查看主机状态
show master status;
从机复制主机的命令 CHANGE MASTER TO MASTER_HOST = '主机ip'
,MASTER_USER='slave'
,MASTER_PASSWORD='556600'
,MASTER_LOG_FILE='mysql-bin.具体数字'---show master status信息
,MASTER_LOG_POS=722;---show master status信息
(如果报错ERROR3021,表示已经启动了从机复制,需要stop slave(停止主从复制关系),然后reset master(重新配置主从),再执行上面的语句)
启动从机复制功能 start slave
查看从机状态
show slave status\G;---Slave_IO_Running和Slave_SQL_Running都是Yes表示主从复制搭建成功
如果MySQL报错:master and slave have equal MySQL server UUIDs 或者A slave with the same server_uuid/server_id as this slave has connected to the master,主要是因为两台虚拟服务器是经过链路复制生成的,导致auto.cnf中的UUID一样,此时vi /var/lib/mysql/auto.cnf修改auto.cnf中的UUID即可,如cd时permission denied,sudo su,cd openfiledir
注:从机一旦复制报错,就停止复制操作,即便stop后再start slave,目前验证下来有效的方式是删除库,stop slave后reset slave,start slave就可以了(实际生产环境可操作性待商榷)
验证读写分离
基于之前mycat的配置,启动mycat,进入配置的数据库TESTDB(逻辑库),use TESTDB,select * from mytbl可以查到数据
验证查询的配置的主机的数据还是从机的数据,方式:
分别在各机器的mysqll设置set @hostname=主机名,在写主机中执行insert into mytbl(1,@@hostname);在mycat中看插入数据的主机名---(@@系统变量)
结果:显然一定是查询的主机,因为需要更改<dataHost>的balance属性,通过此属性配置读写分离的类型,
为了能看到读写分离的效果,把balance设置成2,会在两个主机间切换查询,实际应用场景中使用1或者3,配置负载均衡类型,目前的取值有4 种:
(1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
(2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
(3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
(4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
7.mysql 双主双从搭建
基于前面的一主一从的环境,首先stop slave和reset master,删除已存在各个机器上的mycat库
注:提前确保都安装了ssh,命令sudo apt-get install openssh-server
参照一主一从设置权限配置,同上修改mysql配置和主机间访问权限,其次:
对于主机M1特殊配置增加:
log-slave-updates
auto-increment-increment = 2
auto-increment-increment = 1
对于主机M2特殊配置增加:
log-slave-updates
auto-increment-increment = 2
auto-increment-increment = 2
s1机器reset master to m1,s2机器reset master to m2,m1机器reset master to m2,m2机器reset master to m1,命令如change master to master_host = '192.168.0.11',master_user='slave',master_password='556600',master_log_file='mysql-bin.000001',master_log_pos=154;具体master_log_file和master_log_pos以主机show master status信息为准
各主机登录mysql,授权从机拷贝主机数据,命令grant replication slave on . to slave@从机IP identified by ‘556600’;
各从机start slave,查看slave状态
双主双重读写分离
修改schema.xml配置,其中
balance="1": 全部的readHost与stand by writeHost参与select语句的负载均衡
writeType="0": 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
writeType="1",所有写操作都随机的发送到配置的 writeHost,1.5 以后废弃不推荐
启动mycat
网友评论