(九)数据库集群技术Galera+mycat(数据库运维学习终章)

学习预览:

(一)mysql 运维基础篇(Linux云计算从入门到精通)

(二)mysql 索引和视图(数据库运维基础补充)

(三)mysql 触发器、存储过程和函数(数据库运维基础补充)

(四)MySQL安全机制和日志管理(mysql运维)

(五)mysql数据备份—物理备份(完备+lvm快照+xtrabackup)+逻辑备份(mysqldump+导入导出)

(六)mysql复制技术—M-S主从配置(传统+GTID)+M-M-S-S主从配置(GTID)

(七)mysql中间件mycat配置和部署(基于M-M-S-S)

(八) 数据库集群技术—Galera Cluster安装与配置

(九)数据库集群技术Galera+mycat(数据库运维学习终章)


 

声明:

上一章我已经介绍了数据库集群技术—Galera Cluster安装与配置,这篇mycat的配置就是基于上篇文章的基础而做的。

点击查看博客—Galera Cluster安装与配置

配置好Galera Cluster之后,就开始安装配置mycat了。安装mycat之前的java环境和安装的教程可以看下面这篇博客:

点击查看博客—mycat安装环境配置

这篇博客主要介绍下配置文件schema.xml 和server.xml在Galera集群下的配置。还有其它区别于之前mysql8下安装mycat。因为之前装的是mysql8,这次装的mysql5.7,其实区别并不大,就需要修改下mysql-connector-java的版本(正常你下载的mycat不需要额外花功夫搞这个,只是上次做实验我装的mysql-connector-java8,这次又要换回来。其它主要都是配置文件schema.xml 的区别)。

(1)先在Galera1创数据库并授权给mycat用户,我就先创三个数据库(根据需要授权数据库)。

create database blog;
create database shop;
create database blog;
grant all on testdb.* to testdb@'%' identified by 'Galera@123';
grant all on shop.* to shop@'%' identified by 'Galera@123';
grant all on blog.* to blog@'%' identified by 'Galera@123';
flush privileges;

(2)更换 mysql-connector-java(提醒,如果你做过我之前的实验这一步要做的,没做过的话可以跳过这一步)

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar
ll
cp mysql-connector-java-5.1.35.jar /usr/local/mycat/lib/
cd /usr/local/mycat/
mv lib/mysql-connector-java-8.0.19.jar /root
chmod 777 lib/mysql-connector-java-5.1.35.jar
ll lib

  (3) vim /usr/local/mycat/conf/server.xml 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!--配置连接mycat的用户-->
        <user name="testdb">
                <property name="password">123456</property>
                <!--虚拟数据库,这个要和schema.xml定义的数据库相一致-->
                <property name="schemas">testdb</property>
        </user>
        <user name="shop">
                <property name="password">123456</property>
                <!--虚拟数据库,这个要和schema.xml定义的数据库相一致-->
                <property name="schemas">shop</property>
        </user>
        <user name="blog">
                <property name="password">123456</property>
                <!--虚拟数据库,这个要和schema.xml定义的数据库相一致-->
                <property name="schemas">blog</property>
        </user>
</mycat:server>

(4)vim /usr/local/mycat/conf/schema.xml 。先做一个简单介绍:

  • balance=1         开启读写分离机制,所有读操作都发送到当前可用的writeHost上。
  • wirteType=0      所有写操作发送到第-个writeHost ,第一个挂了切换到第二个
  • switchType=3    基于MySQL Galera cluster的切换机制, 心跳语句为show status like 'wsrep%'
     
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>

        <schema name="shop" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">
        </schema>
        <schema name="blog" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3">
        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="testdb" />

        <dataNode name="dn2" dataHost="localhost2" database="shop" />
        <dataNode name="dn3" dataHost="localhost3" database="blog" />

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
                <heartbeat>show status like 'wsrep%'</heartbeat>
                <writeHost host="galera1" url="galera1:3306" user="testdb" password="Galera@123"> </writeHost>
                <writeHost host="galera2" url="galera2:3306" user="testdb" password="Galera@123"> </writeHost>
                <writeHost host="galera3" url="galera3:3306" user="testdb" password="Galera@123"> </writeHost>
                <writeHost host="galera4" url="galera4:3306" user="testdb" password="Galera@123"> </writeHost>
    </dataHost>

        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
                <heartbeat>show status like 'wsrep%'</heartbeat>
                <writeHost host="galera1" url="galera1:3306" user="shop" password="Galera@123"> </writeHost>
                <writeHost host="galera2" url="galera2:3306" user="shop" password="Galera@123"> </writeHost>
                <writeHost host="galera3" url="galera3:3306" user="shop" password="Galera@123"> </writeHost>
                <writeHost host="galera4" url="galera4:3306" user="shop" password="Galera@123"> </writeHost>

    </dataHost>

        <dataHost name="localhost3" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
                <heartbeat>show status like 'wsrep%'</heartbeat>
                <writeHost host="galera1" url="galera1:3306" user="blog" password="Galera@123"> </writeHost>
                <writeHost host="galera2" url="galera2:3306" user="blog" password="Galera@123"> </writeHost>
                <writeHost host="galera3" url="galera3:3306" user="blog" password="Galera@123"> </writeHost>
                <writeHost host="galera4" url="galera4:3306" user="blog" password="Galera@123"> </writeHost>
    </dataHost>
</mycat:schema>

(5)启动mycat

#先关掉mycat,在控制台中运行mycat,检查错误,没有错误就启动mycat
/usr/local/mycat/bin/mycat  stop
/usr/local/mycat/bin/mycat  console
Running Mycat-server...
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    | 
jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log

#启动mycat
/usr/local/mycat/bin/mycat  start

#检测java端口是否打开
ss -nltp | grep java
LISTEN     0      1      127.0.0.1:32000                    *:*                   users:(("java",pid=88675,fd=4))
LISTEN     0      100         :::9066                    :::*                   users:(("java",pid=88675,fd=68))
LISTEN     0      100         :::8066                    :::*                   users:(("java",pid=88675,fd=72))

(6)客户端登录

先添加主机解释,这个自己做相应的修改(每台都要做的)

192.168.119.163 galera1
192.168.119.160 galera2
192.168.119.161 galera3
192.168.119.162 galera4

开始登录(登录三个账号查看)

mysql -h192.168.119.165 -utestdb -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| testdb   |
+----------+

mysql -h192.168.119.165 -ushop -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| shop     |
+----------+

mysql -h192.168.119.165 -ublog -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| blog     |
+----------+

(7)检测mycat是否实现读写分离

  • 所有节点都正常writeHost负责写操作,备writHost负责读操作
  • 当第一个writeHost失效时 ,其中一个备的writeHost负责写操作,其他备的writeHost负责读操作
  • 当只有一个writeHost时,同时负担读写

先配置conf/log4j.xml文件,将输出级别调整为debug级别,便于观察问题:

vim /usr/local/mycat/conf/log4j2.xml 

然后在客户机上插入数据,并在mycat主机上查看日志:tailf /usr/local/mycat/logs/mycat.log 

MySQL [(none)]> insert into testdb.t1 values (5,'77777777777777777777');

如下图,很明显在Galera1上进行写的:
 

如果读呢?很明显从Galera2上读。

 MySQL [(none)]> select * from testdb.t1 where name='77777777777777777777';

 

如果我直接把Galera1和Galera2挂掉呢?看看有什么改变:

读的时候发生读节点转换,转换到Galera3上读。

MySQL [(none)]> select * from testdb.t1 where name='77777777777777777777';

 

写入数据的时候,开始从Galera4上写入数据:

MySQL [(none)]> insert into testdb.t1 values (7,'888888888888887');


结束语:

自此Linux云计算之mysql运维篇就结束了,我觉得这些还挺实用的,后面讲的数据库中间件mycat,其实介绍的很浅显。有兴趣的童鞋可以去官网下载官方文档好好学习,比如它还适用于分布式数据库等等。后面如果我还会遇到一些比较有用的知识,也愿意和大家一起分享。😀

 

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硬核的无脸man~

你的鼓励是我创作的最大功力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值