做网站工作条件,搞个网站需要多少钱,网络宣传的好处,泰康人寿网站如何做计划领取Mycat适用的场景很丰富#xff0c;以下是几个典型的应用场景#xff1a;
1.单纯的读写分离#xff0c;此时配置最为简单#xff0c;支持读写分离#xff0c;主从切换
2.分表分库#xff0c;对于超过1000万的表进行分片#xff0c;最大支持1000亿的单表分片
3.多租户应…Mycat适用的场景很丰富以下是几个典型的应用场景
1.单纯的读写分离此时配置最为简单支持读写分离主从切换
2.分表分库对于超过1000万的表进行分片最大支持1000亿的单表分片
3.多租户应用每个应用一个库但应用程序只连接mycat从而不改造高程序本身实现多租户化报表系统借助于mycat的分表能力处理大规模报表的统计。
4.替代hbash分析大数据作为海量数据实时查询的一种简单有效方案比如100亿条频繁查询的记录需要在3秒内查询出来结果除了基于主键的查询还可能存在范围查询或其他属性查询此时mycat可能是最简单有效的选择。
mycat长期路线图
强化分布式数据库中间件的方面的功能使之具备丰富的插件、强大的数据库只能优化功能、全面的系统监控能力、以及方便的数据运维工具实现在线数据扩容、迁移等高级功能进一步挺进大数据计算领域深度结合spark stream和storm等分布式实时流引擎能够完成快速的巨表关联、排序、分组聚合等OLAP方向的能力并集成一些热门常用的实时分析算法让工程师以及DBA们更容易用mycat实现一些高级数据分析处理功能不断强化Mycat开源社区的技术水平吸引更多的IT技术专家使得Mycat社区成为中国的Apache并将mycat推到Apache基金会称为国内顶尖开源项目最终能够让一部分志愿者成为专职的mycat开发者。
mycat可以简单概括为
一个彻底开源的面向企业应用开发的大数据集群。
支持事务、ACID、可以替代mysql的加强版数据库
一个可以视为mysql集群的企业级数据库用来替代昂贵的oracle集群
一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品
mycat部署
mycat安装目录结构说明 bin:mycat命令启动重启停止等运行目录 catlet:catlet为mycat的一个扩展功能 conf:mycat配置信息 lib:mycat引用的jar包mycat是java开发的 logs:日志文件包括mycat启动的日志和运行的日志 version.txt:mycat版本说明 mycat的常用配置文件
mycat的配置文件都在conf目录里面介绍以下几个常用的文件 server.xml:mycat软件本身相关的配置文件设置账号参数等 schema.xml:mycat对应的物理数据库和数据库表的配置读写分离高可用分布式策略定制节点控制 rule.xml:mycat分片(分库分表)规则配置文件记录分片规则列表使用方法等 mycat日志: mycat的日志文件都在logs目录里面* wrapper.logmycat启动日志 mycatl.logmycat详细工作日志 mycat的读写分离实验
1. 环境准备及架构
mycat服务器上不能装mysql。客户端与mysql主从服务器安装mysql 主机Node1作为客户端 主机Node2作为mycat服务器不能装MySQL 主机Node3作为mysql主服务器 主机Node4作为mysql从服务器 客户端登录mycat访问的是mycat服务器通过mycat服务器后台调取mysql服务器的数据。主记录写数据从记录读数据。
架构如图 2. 初始化环境 systemctl stop firewalld #防火墙 setenforce 0 #核心防护 3. 部署主从复制客户端搭建mysql数据库
Node3主Node4从。Node1客户端
数据库的安装参考我前面的博客这里在数据库安装完成的前提下只做主从复制数据库的安装(与主从复制原理与实现)
Node3开启二进制日志
[rootNode3 ~]#:vim /etc/my.cnf
......
server-id30
log-bin/data/mysql/mysql-bin
#创建路径
[rootNode3 ~]#:mkdir /data/mysql -p
#修改权限
[rootNode3 ~]#:chown -R mysql.mysql /data
#重启
[rootNode3 ~]#:systemctl restart mysqld
[rootNode3 ~]#:systemctl status mysqld
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 三 2024-07-10 15:10:33 CST; 6s agoDocs: man:mysqld(8)
......
Node4开启二进制日志 同理与Node3一样只需要修改一个server-id
[rootNode4 ~]#:vim /etc/my.cnf
server-id40
log-bin/data/mysql/mysql-bin
#创建路径
[rootNode4 ~]#:mkdir /data/mysql -p
#修改权限
[rootNode4 ~]#:chown -R mysql.mysql /data
#重启查看状态
[rootNode4 ~]#:systemctl restart mysqld
[rootNode4 ~]#:systemctl status mysqld
● mysqld.service - MySQL ServerLoaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)Active: active (running) since 三 2024-07-10 15:14:02 CST; 11s agoDocs: man:mysqld(8)
......
Node3操作登录数据库查看节点添加一个用户test并授权
[rootNode3 ~]#:mysql -uroot -pabc123 #用户名和密码(可以不遵守密码策略但要现修改密码策略)
......
mysql show master status;
-------------------------------------------------------------------------------
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
-------------------------------------------------------------------------------
| mysql-bin.000001 | 154 | | | |
-------------------------------------------------------------------------------
1 row in set (0.00 sec)
mysql grant replication slave on *.* to test192.168.114.% identified by Admin123;
Query OK, 0 rows affected, 1 warning (0.00 sec)
Node4操作作为从指定主服务器
[rootNode4 ~]#:mysql -uroot -pabc123
mysql CHANGE MASTER TO- MASTER_HOST192.168.114.30,- MASTER_USERtest,- MASTER_PASSWORDAdmin123,- MASTER_PORT3306,- MASTER_LOG_FILEmysql-bin.000001,- MASTER_LOG_POS154;
Query OK, 0 rows affected, 2 warnings (0.01 sec)#启动
mysql start slave;
Query OK, 0 rows affected (0.00 sec)#查看状态两个线程yes。
mysql show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.114.30Master_User: testMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 449Relay_Log_File: Node4-relay-bin.000002Relay_Log_Pos: 615Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: YesSlave_SQL_Running: Yes
......
测试主从
把一个准备好的数据库文件导入到Node3主服务器中看从服务器是否同步
[rootNode3 ~]#:mysql -uroot -pabc123 -e show databases
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------------
| Database |
--------------------
| information_schema |
| mysql |
| performance_schema |
| sys |
--------------------
[rootNode3 ~]#:mysql -uroot -pabc123 hellodb_innodb.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[rootNode3 ~]#:mysql -uroot -pabc123 -e show databases
mysql: [Warning] Using a password on the command line interface can be insecure.
--------------------
| Database |
--------------------
| information_schema |
| hellodb |
| mysql |
| performance_schema |
| sys |
--------------------
主上有了hellodb数据库文件
查看从是否同步
mysql show databases;
--------------------
| Database |
--------------------
| information_schema |
| hellodb |
| mysql |
| performance_schema |
| sys |
--------------------
5 rows in set (0.00 sec)#查看一个数据表teachers
mysql select * from hellodb.teachers;
---------------------------------
| TID | Name | Age | Gender |
---------------------------------
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
---------------------------------#从上也同步了主上创建的test用户
mysql select user,host from mysql.user;
------------------------------
| user | host |
------------------------------
| test | 192.168.114.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
------------------------------
4 rows in set (0.00 sec)
已同步
4. 安装mycat
Node2
准备一个mycat安装包。在我的/data/下这个是自己建的一个目录。
创建一个目录/apps/解压到该目录下
[rootNode2 data]#:mkdir /apps
[rootNode2 data]#:tar xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
[rootNode2 data]#:cd /apps/
[rootNode2 apps]#:ls
mycat
#添加环境变量也可以做软链接。目的是能够补全命令而不必使用绝对路径
[rootNode2 apps]#:echo PATH/apps/mycat/bin:$PATH /etc/profile.d/mycat.sh
[rootNode2 apps]#:source /etc/profile.d/mycat.sh启动mycat
[rootNode2 apps]#:mycat
#只有以下参数
Usage: /apps/mycat/bin/mycat { console | start | stop | restart | status | dump }
[rootNode2 apps]#:mycat start
Starting Mycat-server...
#查看状态
[rootNode2 apps]#:mycat status
Mycat-server is running (8372).
is running启动起来了
mycat安装成功成功启动
使用客户端Node1登录mycat测试 -u用户名 -p密码默认123456 -h主机是Node2我的ip为192.168.114.20 -P端口号默认8066 [rootNode1 ~]#:mysql -uroot -p123456 -h192.168.114.20 -P8066
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql show databases;
----------
| DATABASE |
----------
| TESTDB |
----------
1 row in set (0.00 sec)mysql TESTDB虚表。客户端访问mycat是虚表。
5. 修改mycat配置文件使其与后端mysql主从服务器联系
进入/apps/mycat/conf/下。配置文件修改server.xml文件45行取消注释修改一个端口号为3306客户端不用指定8066端口号了直接指定用户密码主机即可。
[rootNode2 apps]#:cd /apps/mycat/conf/
[rootNode2 conf]#:vim server.xml
......
property nameserverPort3306/property property namemanagerPort9066/property
property nameidleTimeout300000/property property namebindIp0.0.0.0/property
property namedataNodeIdleCheckPeriod300000/property
property namefrontWriteQueueSize4096/property property nameprocessors32/property
......
修改schema配置参数文件清空把下面配置复制进去注意修改IP地址
[rootNode2 conf]#:vim schema.xml
?xml version1.0?
!DOCTYPE mycat:schema SYSTEM schema.dtd
mycat:schema xmlns:mycathttp://io.mycat/schema nameTESTDB checkSQLschemafalse sqlMaxLimit100 dataNodedn1/schemadataNode namedn1 dataHostlocalhost1 databasehellodb /dataHost namelocalhost1 maxCon1000 minCon10 balance1writeType0 dbTypemysql dbDrivernative switchType1 slaveThreshold100heartbeatselect user()/heartbeatwriteHost hosthost1 url192.168.114.30:3306 userroot passwordAdmin123readHost hosthost2 url192.168.114.40:3306 userroot passwordAdmin123//writeHost/dataHost
/mycat:schema
解释 #dataNode:表存储到哪些节点多个节点用逗号分隔。节点为下文dataNode设置的name #dataNode标签: 定义mycat中的数据节点也是通常说的数据分片也就是分库相关配置 #database: 物理数据库中数据库名该属性用于定义该分片属性哪个具体数据库实例上的具体库 #balance: 均衡负载的方式 #writeType: 写入方式 #host用于标识不同实例一般 writeHost 我们使用*M1readHost 我们用*S1。 #url后端实例连接地址。Native地址端口 JDBCjdbc的url #user后端存储实例需要的用户名字 #password:后端存储实例需要的密码 重启并查看状态会先开一下如果有问题还会再关闭可以多看一下是否真正的起来
[rootNode2 conf]#:mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
[rootNode2 conf]#:mycat status
Mycat-server is running (8863).
[rootNode2 conf]#:mycat status
Mycat-server is running (8863).
[rootNode2 conf]#:mycat status
Mycat-server is running (8863).
6. 主从服务器创建一个root用户给mycat连接并授权
在主上创建好一个root用户后从服务器也就同步了。
[rootNode3 ~]#:mysql -uroot -pabc123
......
mysql GRANT ALL ON *.* TO root192.168.114.% IDENTIFIED BY Admin123;
Query OK, 0 rows affected, 1 warning (0.01 sec)
在从上查看用户同步过来了
[rootNode4 ~]#:mysql -uroot -pabc123
......
mysql select user,host from mysql.user;
------------------------------
| user | host |
------------------------------
| root | 192.168.114.% |
| test | 192.168.114.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
------------------------------
5 rows in set (0.01 sec)主从两台服务器开启通用日志都需要开通
mysql set global general_log1;
Query OK, 0 rows affected (0.00 sec)
7. 测试读写分离
两台服务器实时(tail -f 日志文件)检测日志文件在/var/lib/mysql/下有一个与主机名同名的日志文件
主Node3.log
从Node4.log
监控主服务器监控写操作从服务器监控读操作在主从服务器上实时查看通用日志
使用Node1客户端访问mycat插入一条数据到表teachers。再查看表数据。观察主从的日志变化是否在主上能看得到写操作在从上能看得到读的操作。进而实现读写分离试验。
客户端登录mycat服务器不需要端口号了
[rootNode1 ~]#:mysql -uroot -p123456 -h192.168.114.20
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 73
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)Copyright (c) 2000, 2023, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type help; or \h for help. Type \c to clear the current input statement.mysql
客户端登录mycat进入数据库TESTDB:查看teachers表查看表结构插入数据再查看数据
[rootNode1 ~]#:mysql -uroot -p123456 -h192.168.114.20
......
mysql show databases;
----------
| DATABASE |
----------
| TESTDB |
----------
1 row in set (0.00 sec)
#进入数据库
mysql use TESTDB
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
#查看数据
mysql select * from teachers;
---------------------------------
| TID | Name | Age | Gender |
---------------------------------
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
---------------------------------
4 rows in set (0.01 sec)
#查看结构
mysql desc teachers;
------------------------------------------------------------------
| Field | Type | Null | Key | Default | Extra |
------------------------------------------------------------------
| TID | smallint(5) unsigned | NO | PRI | NULL | auto_increment |
| Name | varchar(100) | NO | | NULL | |
| Age | tinyint(3) unsigned | NO | | NULL | |
| Gender | enum(F,M) | YES | | NULL | |
------------------------------------------------------------------
4 rows in set (0.00 sec)
#插入数据
mysql insert into teachers values(5,zs,18,M);
Query OK, 1 row affected (0.03 sec)
mysql select * from teachers;
---------------------------------
| TID | Name | Age | Gender |
---------------------------------
| 1 | Song Jiang | 45 | M |
| 2 | Zhang Sanfeng | 94 | M |
| 3 | Miejue Shitai | 77 | F |
| 4 | Lin Chaoying | 93 | F |
| 5 | zs | 18 | M |
---------------------------------
5 rows in set (0.00 sec)
查看主从日志
主服务器日志写入操作 [rootNode3 ~]#:tail -f /var/lib/mysql/Node3.log 从服务器日志读取操作 [rootNode4 ~]#:tail -f /var/lib/mysql/Node4.log 实现了mycat读写分离 ---end---