美文网首页
Mycat知识精粹-ing

Mycat知识精粹-ing

作者: ___Kevin | 来源:发表于2020-12-20 21:38 被阅读0次
    1. 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 以后废弃不推荐

    switchType="1": 1 默认值,自动切换,-1 表示不自动切换,2 基于 MySQL 主从同步的状态决定是否切换 mycat-schema-double-config.png

    启动mycat

    相关文章

      网友评论

          本文标题:Mycat知识精粹-ing

          本文链接:https://www.haomeiwen.com/subject/vgsknktx.html