Linux安装Mycat1.6.7.6实现Mysql数据库读写分离

1、Mycat简介

  • 一个彻底开源的,面向企业应用开发的大数据库集群
  • 支持事务、ACID、可以替代MySQL的加强版数据库
  • 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品
    官网:http://www.mycat.org.cn/
2. Mycat优势

基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到Mycat的基因中,使Mycat在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。
  Mycat背后有一支强大的技术团队,其参与者都是5年以上软件工程师、架构师、DBA等,优秀的技术团队保证了Mycat的产品质量。
  Mycat并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。

3. 前期准备
3.1、安装Mysql主从复制(请参考mysql8主从复制)
3.2、安装jdk
# yum源安装
$ yum search jdk

$ yum -y install java-1.8.0-openjdk.x86_64

# 查看jsk版本
$ java -version
3.3、下载Mycat1.6.7.6安装包
$ cd /usr/local/src/
$ wget http://dl.mycat.org.cn/1.6.7.6/20211016233725/Mycat-server-1.6.7.6-release-20211016233725-linux.tar.gz
#mysql8的驱动
$ wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar
4、安装mycat
# 解压
# 解压
$ tar -zxvf Mycat-server-1.6.7.6-release-20211016233725-linux.tar.gz

# 改名(可忽略)
$ mv mycat/ mycat-1.6.7.6

# 移动到/usr/local目录
$ mv mycat-1.6.7.6/ /usr/local/

#替换mysql-connector-java-8.0.18.jar
$ cd /usr/local/mycat-1.6.7.6/lib
$ mv mysql-connector-java-8* /tmp
$ mv /usr/local/src/mysql-connector-java-8.0.18.jar .
5. 配置(一主一从)
Linux安装Mycat1.6.7.6实现Mysql数据库读写分离_第1张图片
# 进入配置文件目录,并查看文件
$ cd /usr/local/mycat-1.6.7.6/conf

# 修改server.xml
$ vi server.xml
 # 修改底部管理员用户和只读用户信息及密码,配置schemas
 <user name="root" defaultAccount="true">
                <property name="password">Xinnet@2021</property>
                <property name="schemas">ZABBIXDB</property>
                <property name="defaultSchema">ZABBIXDB</property>
        </user>
   
        <user name="zabbixuser" defaultAccount="true">
                <property name="password">zabbixuser@2021</property>
                <property name="schemas">ZABBIXDB</property>
                <property name="defaultSchema">ZABBIXDB</property>
        </user>
  
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">ZABBIXDB</property>
                <property name="readOnly">true</property>
                <property name="defaultSchema">ZABBIXDB</property>
        </user>

  
#多创建了一个zabbixuser用户
  
# 修改schema.xml
vi schema.xml

# 替换为以下内容
# 其中10.12.69.51为写主机(主数据库)IP,10.12.69.52为读主机(从数据库)IP。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="ZABBIXDB" checkSQLschema="false" sqlMaxLimit="1000" dataNode="dn1">
        </schema>
        <dataNode name="dn1" dataHost="host1" database="zabbix" />
        <dataHost name="host1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="jdbc:mysql://10.12.69.51:3306" user="root" password="Xinnet@2021">
                    <readHost host="hostS1" url="jdbc:mysql://10.12.69.52:3306" user="root" password="Xinnet@2021" />
                </writeHost>
        </dataHost>
</mycat:schema>
  

dataHost节点中的balance(负载均衡类型)属性值共四种情况:

  • balance

​ balance=“0”
   不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;

​ balance=“1”
   全部的readHost与stand by writeHost参与select 语句的负载均衡,简单的说,当双主双从
模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2,S1,S2都参与 select语句的负载均衡;

​ balance=“2”
   所有读操作都随机的在writeHost、readhost上分发;

​ balance=“3”
   所有读请求随机的分发到readhost 执行,writerHost不负担读压力。

  • writeType
      writeType=“0” ,所有写操作发送到配置的第一个writeHost,第一个挂了切到正常的第二个writeHost;writeType=“1”,所有写操作都随机的发送到配置的 writeHost,1.5版本后不推荐使用。
  • writeHost
      Mycat重新启动后以切换后的为准,即可能因为写主机异常而发送写主机变动的情况,切换记录在配置文件中:dnindex.properties。
  • switchType
      switchType=“1”,默认值,自动切换;switchType="-1",表示不自动切换;switchType=“2”,基于Mysql 主从同步的状态决定是否切换。
6、启动mycat
# 重新启动
$ cd /usr/local/mycat-1.6.7.6/bin/
$ ./mycat restart

# 查看启动状态
$ ./mycat status

# 注意关闭防火墙或者放开端口8066
#查看日志是否启动成功
tail -f ../logs/switch.log 
tail -f ../logs/mycat.log  -n 400
7、测试读写分离
7.1、打开主从数据库日志(两台机器全部都操作)
#查看主数据库日志记录开关、日志记录路径是否打开
mysql> show variables like 'general_log';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | OFF   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'general_log_file';
+------------------+------------------------------------------------------+
| Variable_name    | Value                                                |
+------------------+------------------------------------------------------+
| general_log_file | /var/lib/mysql/bj-smzy-devops-zabbix-10-12-69-51.log |
+------------------+------------------------------------------------------+
mysql> set global general_log=ON; ## 打开记录日志开关
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'general_log'; #再次查看
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| general_log   | ON    |
+---------------+-------+
7.2、监控日志

打开多个终端监控日志

主数据库:

$ tail -f /var/lib/mysql/bj-smzy-devops-zabbix-10-12-69-51.log

从数据库:

$ tail -f  /var/lib/mysql/bj-smzy-devops-zabbix-10-12-69-52.log
7.3、通过mycat连接数据库(10.12.69.53位mycat机器)
$  mysql -h 10.12.69.53 -uroot -p -P8066mysql> show databases;+----------+| DATABASE |+----------+| ZABBIXDB |+----------+# 创建测试表mysql> create table t_data2_test(`id`int not null primary key auto_increment, `value` varchar(255));# 插入一条记录mysql> insert into t_data2_test(`value`) values('C3Stones');# 查询mysql> select * from t_data2_test;
7.4、通过日志验证

读查询语句是否只从从库执行

写库语句是否只从主库执行

可以看到读只从读库52上执行,写库只从51主库上执行(因为配置了主从复制,所以看写库日志的时间,主库是先写进去的,从库是随后通过binlog执行写操作的)

8、mycat配置多用户登陆

场景:应用使用zbbixuser用户连接mycat

8.1、主从库执行
#主从库全部创建zabbixuser用户并且访问授权mysql>  create user 'zabbixuser'@'%' identified with mysql_native_password by 'zabbixuser@2021';Query OK, 0 rows affected (0.33 sec)mysql> grant all privileges on *.* to 'zabbixuser'@'%' with grant option;   Query OK, 0 rows affected (0.11 sec)mysql>  flush privileges;Query OK, 0 rows affected (0.02 sec)
8.2、mycat配置server.xml
                 Xinnet@2021                ZABBIXDB                ZABBIXDB                                zabbixuser@2021                ZABBIXDB                ZABBIXDB                                user                ZABBIXDB                true                ZABBIXDB        

新增user zabbixuser 其他保持不变 ,重启macat

$ cd /usr/local/mycat-1.6.7.6/bin/$ ./mycat restart# 测试使用zabbixuser用户连接数据库$ mysql -h 10.12.69.53 -uzabbixuser -p -P8066Enter password: Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 7Server version: 5.6.29-mycat-1.6.7.6-release-20211018151034 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> 

成功!

你可能感兴趣的:(mysql,数据库,linux,mysql)