Mysql部署高可用-Mycat安装
Mycat部署架构图
下载Mycat
下载地址http://dl.mycat.org.cn/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
[root@mysql-150-master home]# wget http://dl.mycat.org.cn/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz 2021-03-02 00:22:00 (7.72 MB/s) - 已保存 “Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz” [17820584/17820584]) [root@mysql-150-master home]# ll 总用量 17404 -rw-r--r--. 1 root root 17820584 9月 27 2019 Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
安装java
因为mycat是java开发的,需要安装java
略
mycat 主机设置host
[root@mysql-150-master home]# vi /etc/hosts ###追加 192.168.1.150 mysql-150-master 192.168.1.151 mysql-151-master 192.168.1.152 mysql-152-slave 192.168.1.153 mysql-153-slave 192.168.1.154 mysql-154-slave
[root@mysql-151-master ~]# vi /etc/hosts ###追加 192.168.1.150 mysql-150-master 192.168.1.151 mysql-151-master 192.168.1.152 mysql-152-slave 192.168.1.153 mysql-153-slave 192.168.1.154 mysql-154-slave
解压安装mycat
[root@mysql-150-master home]# tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz [root@mysql-150-master home]# ll 总用量 588 drwx------. 2 haproxy haproxy 62 3月 3 01:17 haproxy drwxr-xr-x. 8 root root 255 3月 2 00:27 jdk1.8.0 -rw-r--r--. 1 root root 601873 6月 23 2020 keepalived-1.2.24.tar.gz drwxr-xr-x. 7 root root 85 3月 3 13:22 mycat drwx------. 4 mysql mysql 110 3月 2 11:24 mysql [root@mysql-150-master home]#
配置Mycat环境变量
[root@mysql-150-master home]# vi /etc/profile ### 在末尾追加 export MYCAT_HOME=/home/mycat PATH=$PATH:$MYCAT_HOME/bin export PATH ###保存并立即生效 [root@mysql-150-master home]# source /etc/profile
配置MyCat
配置之前要确保mysql的主从搭建是Ok。架构如下图:
补充: (1) MySQL主从复制配置中,如果涉及到函数或存储过程的同步复制,需要在/etc/my.cnf中的[mysqld]段中增加配置log_bin_trust_function_creators=true 或在客户端中设置 set global log_bin_trust_function_creators = 1; (2) 如果要做读写分离下的主从切换,那么从节点也有可能会变为写节点,因此从节点就不能设置为只读 read_only=1 。 (3) Linux版本的MySQL,需要设置为MySQL大小写不敏感,否则可能会发生找不到表的问题。可在/etc/my.cnf的[mysqld]段中增加lower_case_table_names=1 。
配置schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <!-- 定义MyCat的逻辑库,逻辑库的概念与MySQL中的 database 概念相同 --> <!-- schema name="rc_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="rc_dn1"></schema --> <!--schema name="pay_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="pay_dn1"></schema--> <schema name="lyz_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="lyz_dn1"></schema> <schema name="lyz_schema2" checkSQLschema="false" sqlMaxLimit="100" dataNode="lyz_dn2"></schema> <!-- 其中checkSQLschema表明是否检查并过滤SQL中包含schema的情况,如逻辑库为 TESTDB,则可能写为select * from TESTDB.edu_user,此时会自动过滤TESTDB,SQL变为select * from edu_user,若不会出现上述写法,则可以关闭属性为false --> <!--sqlMaxLimit默认返回的最大记录数限制,MyCat1.4版本里面,用户的Limit参数会覆盖掉MyCat的sqlMaxLimit默认设置--> <!-- 定义MyCat的数据节点 --> <dataNode name="lyz_dn1" dataHost="dtHost2" database="lyzdb1" /> <dataNode name="lyz_dn2" dataHost="dtHost2" database="lyzdb2" /> <!-- dataNode 中的 name 数据表示节点名称, dataHost表示数据主机名称, database表示该节点要路由的数据库的名称 --> <!-- 使用MyCat托管MySQL主从切换 --> <!-- 定义数据主机dtHost2,连接到MySQL读写分离集群,并配置了读写分离和主从切换 --> <dataHost name="dtHost2" maxCon="500" minCon="20" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100"> <!-- 通过show slave status检测主从状态,当主宕机以后,发生切换,从变为主,原来的主变为从,这时候show slave status就会发生错误,因为原来的主没有开启slave,不建议直接使用switch操作,而是在DB中做主从对调。 --> <heartbeat>show slave status</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM2" url="192.168.209.131:3306" user="root" password="root" /> <writeHost host="hostS2" url="192.168.209.132:3306" user="root" password="root" /> </dataHost> <!-- 参数balance决定了哪些MySQL服务器参与到读SQL的负载均衡中 --> <!-- balance="0",为不开启读写分离,所有读操作都发送到当前可用的writeHost上--> <!-- balance="1",全部的readHost与stand by writeHost参与select语句的负载均衡--> <!-- balance="2",所有读操作都随机的在writeHost、readHost上分发--> <!-- writeType="0",所有写操作都发送到可用的writeHost上 --> <!-- writeType="1",仅仅对于galera for mysql集群这种多主多节点都能写入的集群起效,此时Mycat会随机选择一个writeHost并写入数据,对于非galera for mysql集群,请不要配置writeType=1,会导致数据库不一致的严重问题 --> <!-- dataHost配置的是实际的后端数据库集群(当然,也可以是非集群) --> <!-- 注意:schema中的每一个dataHost中的host属性值必须唯一,否则会出现主从在所有dataHost中全部切换的现象 --> <!-- 定义数据主机dt150master--> <dataHost name="dt150master" maxCon="500" minCon="20" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.150:3306" user="root" password="ruanjie@0511" /> </dataHost> <dataHost name="dt151master" maxCon="500" minCon="20" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.151:3306" user="root" password="ruanjie@0511" /> </dataHost> </mycat:schema>