一、三大配置文件介绍
1)rule.xml 片键规则函数映射
2)schema.xml 数据库节点主机映射
3)server.xml 全局参数配置(用户/防火墙/内存/端口等配置)
二、三大配置文件加载过程
1)启动类MycatStartup部分代码 MycatStartup { private static final String dateFormat = "yyyy-MM-dd HH:mm:ss"; private static final Logger LOGGER = LoggerFactory.getLogger(MycatStartup.class); public static void main(String[] args) { //use zk ? //使用单例模式加静态代码块加载/myid.properties配置文件 //如果配置文件中loadZk取值为true则会调用ZktoXmlMain类的loadZktoFile方法, // 否则不使用ZK,这段代码小刘的注释写的很漂亮,值得学习和表扬 ZkConfig.getInstance().initZk(); //检查是否设置SystemConfig中的SYS_HOME = "MYCAT_HOME"变量值 String home = SystemConfig.getHomePath(); if (home == null) { System.out.println(SystemConfig.SYS_HOME + " is not set."); System.exit(-1); } // init //使用单例模式初始化配置文件为启动做准备:读取配置文件和启用scheduler调度器, // 其中配置文件的加载使用的是java中的w3c的DocumentBuilderFactory-->DocumentBuilder, //这种代码比较底层。 dom sax dom4j的区别呢?此处没有用dom4j,估计是考虑到dtd验证问题 MycatServer server = MycatServer.getInstance(); } 2)MycatServer类 private MycatServer() { //读取文件配置,配置文件加载入口 this.config = new MycatConfig(); } 3)MycatConfig类 public MycatConfig() { //读取schema.xml,rule.xml和server.xml ConfigInitializer confInit = new ConfigInitializer(true); this.system = confInit.getSystem(); this.users = confInit.getUsers(); this.schemas = confInit.getSchemas(); this.dataHosts = confInit.getDataHosts(); this.dataNodes = confInit.getDataNodes(); for (PhysicalDBPool dbPool : dataHosts.values()) { dbPool.setSchemas(getDataNodeSchemasOfDataHost(dbPool.getHostName())); } this.firewall = confInit.getFirewall(); this.cluster = confInit.getCluster(); } 4)ConfigInitializer类 public ConfigInitializer(boolean loadDataHost) { //读取rule.xml和schema.xml SchemaLoader schemaLoader = new XMLSchemaLoader(); //读取server.xml XMLConfigLoader configLoader = new XMLConfigLoader(schemaLoader); schemaLoader = null; //加载配置 this.system = configLoader.getSystemConfig(); this.users = configLoader.getUserConfigs(); this.schemas = configLoader.getSchemaConfigs(); //是否重新加载DataHost和对应的DataNode if (loadDataHost) { this.dataHosts = initDataHosts(configLoader); this.dataNodes = initDataNodes(configLoader); } //权限管理 this.firewall = configLoader.getFirewallConfig(); this.cluster = initCobarCluster(configLoader); //不同类型的全局序列处理器的配置加载 if (system.getSequnceHandlerType() == SystemConfig.SEQUENCEHANDLER_MYSQLDB) { IncrSequenceMySQLHandler.getInstance().load(); } if (system.getSequnceHandlerType() == SystemConfig.SEQUENCEHANDLER_LOCAL_TIME) { IncrSequenceTimeHandler.getInstance().load(); } if (system.getSequnceHandlerType() == SystemConfig.SEQUENCEHANDLER_ZK_DISTRIBUTED) { DistributedSequenceHandler.getInstance(system).load(); } if (system.getSequnceHandlerType() == SystemConfig.SEQUENCEHANDLER_ZK_GLOBAL_INCREMENT) { IncrSequenceZKHandler.getInstance().load(); } /** * 配置文件初始化, 自检 */ this.selfChecking0(); } 5)XMLSchemaLoader类 public XMLSchemaLoader() { this(null, null); } public XMLSchemaLoader(String schemaFile, String ruleFile) { //先读取rule.xml XMLRuleLoader ruleLoader = new XMLRuleLoader(ruleFile); //将tableRules拿出,用于这里加载Schema做rule有效判断,以及之后的分片路由计算 this.tableRules = ruleLoader.getTableRules(); //释放ruleLoader ruleLoader = null; this.dataHosts = new HashMap<String, DataHostConfig>(); this.dataNodes = new HashMap<String, DataNodeConfig>(); this.schemas = new HashMap<String, SchemaConfig>(); //读取加载schema配置 this.load(DEFAULT_DTD, schemaFile == null ? DEFAULT_XML : schemaFile); } //读取schema配置,加载【dataHosts/dataNodes/schemas】 private void load(String dtdFile, String xmlFile) { InputStream dtd = null; InputStream xml = null; dtd = XMLSchemaLoader.class.getResourceAsStream(dtdFile); xml = XMLSchemaLoader.class.getResourceAsStream(xmlFile); Element root = ConfigUtil.getDocument(dtd, xml).getDocumentElement(); //先加载所有的DataHost loadDataHosts(root); //再加载所有的DataNode loadDataNodes(root); //最后加载所有的Schema loadSchemas(root); } 6)XMLSchemaLoader类 public XMLRuleLoader(String ruleFile) { // this.rules = new HashSet(); //rule名 -> rule this.tableRules = new HashMap<String, TableRuleConfig>(); //function名 -> 具体分片算法 this.functions = new HashMap<String, AbstractPartitionAlgorithm>(); load(DEFAULT_DTD, ruleFile == null ? DEFAULT_XML : ruleFile); } 7)XMLConfigLoader类 public XMLConfigLoader(SchemaLoader schemaLoader) { XMLServerLoader serverLoader = new XMLServerLoader(); //下面四个个属性【system/users/firewall/cluster】来自Server.xml文件 this.system = serverLoader.getSystem(); this.users = serverLoader.getUsers(); this.firewall = serverLoader.getFirewall(); this.cluster = serverLoader.getCluster(); //下面三个属性【dataHosts/dataNodes/schemas】来自schema文件 this.dataHosts = schemaLoader.getDataHosts(); this.dataNodes = schemaLoader.getDataNodes(); this.schemas = schemaLoader.getSchemas(); schemaLoader = null; } 8)XMLServerLoader类 public XMLServerLoader() { this.system = new SystemConfig(); this.users = new HashMap<String, UserConfig>(); this.firewall = new FirewallConfig(); //加载函数 this.load(); } //读取server.xml配置,加载【system/users/cluster/firewall】 private void load() { InputStream dtd = null; InputStream xml = null; dtd = XMLServerLoader.class.getResourceAsStream("/server.dtd"); xml = XMLServerLoader.class.getResourceAsStream("/server.xml"); Element root = ConfigUtil.getDocument(dtd, xml).getDocumentElement(); //加载System标签 loadSystem(root); //加载User标签 loadUsers(root); //加载集群配置 this.cluster = new ClusterConfig(root, system.getServerPort()); //加载全局SQL防火墙 loadFirewall(root); }
相关推荐
在本文中,我们将深入探讨Mycat 1.6稳定版在Linux环境下的安装、配置以及使用方法。 一、Mycat简介 Mycat的核心功能包括数据分片、读写分离和数据库集群管理。数据分片是将大表的数据分散到多个数据库中,以减轻...
《深入剖析Mycat 1.6源码》 Mycat是一款开源的分布式数据库中间件,它在Java平台上运行,旨在解决大数据分布式存储和处理的问题。Mycat 1.6版本是其一个重要的里程碑,它在前一版本的基础上进行了一系列的优化和...
mycat1.6windows+linux.zip, 我就很不理解,为什么好多人上传的资料,下载都需要积分。0积分能咋地?官网能访问但是下载不了,后再巧合下在另外一个网站上下载的,我在这里给大家分享下。不需要积分也不需要花钱,...
【Mycat1.6与SQLServer操作案例详解】 Mycat是一款开源的分布式数据库中间件,它在大型分布式系统中扮演着数据库分片的角色,能够有效地解决单个数据库性能瓶颈的问题。Mycat 1.6是其一个重要版本,提供了更稳定、...
- 下载:首先从官方渠道或第三方网站获取mycat1.6.7.1的Linux版本压缩包。 - 解压:使用`tar -zxvf MyCat-server-1.6.7.1-release-20190627191042-linux.tar.gz`命令进行解压。 - 配置:进入解压后的目录,编辑...
《深入解析mycat1.6源码:一次技术探索之旅》 Mycat,作为一款开源的分布式数据库中间件,广泛应用于大型分布式系统中,它实现了数据分片、读写分离、故障切换等功能,为高并发、大数据量的场景提供了优秀的解决...
在本压缩包"mycat1.6.7.5.zip"中,包含了在Linux环境下安装Mycat 1.6.7.5所需的所有关键组件,尤其是Java Development Kit (JDK) 1.8的安装文件,因为Mycat运行在Java平台上,所以JDK是其运行的前提。 首先,让我们...
2. **分库分表**:Mycat的核心功能之一就是实现数据库的横向扩展,通过分库分表策略,将大表拆分成多个小表,分布在不同的数据库实例上,提高数据读写性能。 3. **SQL路由**:Mycat支持自定义SQL解析规则,可以根据...
基于MyCat1.6.7.6正式版的源码修改的,支持subTables的按月分表正则配置 subTables=“ tableName_$202101-?” subTableWay="BYMONTH" rule="sharding-by-month" 表示从202101月份开始进行分表处理,?表示当前日期的...
#### 三、Mycat 1.6 的安装步骤 根据文档提供的信息,我们可以按照以下步骤在RHEL服务器上安装Mycat 1.6。 ##### 1. 下载Mycat 首先,访问Mycat官网提供的下载链接:`http://dl.mycat.io/1.6-RELEASE/`,下载最新...
启动过程中,Mycat会加载`conf`目录下的配置,并监听指定的端口,等待客户端的连接请求。了解如何启动和停止Mycat服务是日常运维的基础技能。 Mycat的核心功能包括: 1. **数据分片**:Mycat支持水平分片和垂直分...
《深入解析mycat-server 1.6:源码探索与实战指南》 Mycat-Server 1.6 是一个开源的分布式数据库中间件,它主要用于解决大数据环境下高并发、高性能的问题,尤其在分库分表场景下表现卓越。这款源码包的特点是可...
总的来说,Mycat1.6.7.4是一款强大的数据库中间件,它通过分布式技术解决了大数据量下的存储和处理难题,为企业级应用提供了高效、稳定的数据库解决方案。无论是在电商、社交还是数据分析等领域,Mycat都能发挥其...
总的来说,《Mycat 1.6权威指南》和《Mycat 1.5权威指南》是深入了解和掌握Mycat数据库中间件的重要资源,它们详细讲解了Mycat的架构、配置、管理和优化技巧,对于开发、运维人员来说,是必备的学习资料。...
3. **Config模块**:配置管理模块,用于加载和管理Mycat的配置文件,如schema.xml、server.xml等。这些配置文件定义了数据库连接信息、分片规则、服务器设置等。 4. **Heartbeat模块**:心跳检测模块,定期检测...
**安装与配置Mycat 1.6.7.5**: 1. 解压`Mycat-server-1.6.7.5-release-20210616151418-win.tar.gz`,获取Mycat的服务器端程序。 2. 修改`conf/server.xml`配置文件,配置数据库连接信息、分片规则等。 3. 初始化...
3. **配置Mycat**:解压后,你会看到一个名为`mycat`的目录,里面包含了Mycat的配置文件和可执行程序。你需要编辑`conf`目录下的`server.xml`和`schema.xml`文件,配置数据源、分片规则、端口号等信息。这些配置需要...
标题中的问题涉及到的是在使用Mycat数据中间件时,尝试使用JDBC 8驱动连接到Mycat 1.6版本时遇到的一个错误:`Unknown system variable 'query_cache_size'`。这个问题出现的原因在于MySQL 8.0版本中移除了`query_...
安装和配置Mycat时,需要修改相应的配置文件,如schema.xml定义数据节点和表的分片规则,server.xml配置Mycat服务器的启动参数。启动Mycat服务后,客户端应用程序可以像连接普通数据库一样连接Mycat,而背后的复杂分...
【Mycat1.6与Oracle操作案例详解】 在IT行业中,数据库管理是核心部分,尤其是在大型企业级应用中。Mycat是一个开源的分布式数据库中间件,它提供了数据库分片、读写分离、故障切换等功能,适用于高并发、大数据量...