mycat配置脚本
[root@s8 mycat-1.6.6.1]# ll total 12 drwxr-xr-x. 2 root root 190 Sep 29 04:01 bin drwxrwxrwx. 2 root root 6 Oct 31 2018 catlet drwxrwxrwx. 4 root root 4096 Oct 9 02:53 conf drwxr-xr-x. 2 root root 4096 Sep 29 04:01 lib drwxrwxrwx. 3 root root 92 Oct 11 00:02 logs drwxr-xr-x. 2 root root 25 Oct 9 02:53 tmlogs -rwxrwxrwx. 1 root root 185 Oct 31 2018 version.txt [root@s8 mycat-1.6.6.1]# cd conf/ [root@s8 conf]# ll total 128 -rwxrwxrwx. 1 root root 88 Oct 31 2018 autopartition-long.txt -rwxrwxrwx. 1 root root 48 Oct 31 2018 auto-sharding-long.txt -rwxrwxrwx. 1 root root 62 Oct 31 2018 auto-sharding-rang-mod.txt -rwxrwxrwx. 1 root root 334 Oct 31 2018 cacheservice.properties -rwxrwxrwx. 1 root root 3244 Oct 31 2018 dbseq.sql -rw-r--r--. 1 root root 50 Oct 9 02:53 dnindex.properties -rwxrwxrwx. 1 root root 439 Oct 31 2018 ehcache.xml -rwxrwxrwx. 1 root root 2132 Oct 31 2018 index_to_charset.properties -rwxrwxrwx. 1 root root 1253 Oct 31 2018 log4j2.xml -rwxrwxrwx. 1 root root 178 Oct 31 2018 migrateTables.properties -rwxrwxrwx. 1 root root 262 Oct 31 2018 myid.properties -rwxrwxrwx. 1 root root 15 Oct 31 2018 partition-hash-int.txt -rwxrwxrwx. 1 root root 102 Oct 31 2018 partition-range-mod.txt -rwxrwxrwx. 1 root root 4678 Oct 31 2018 rule.xml -rwxr-xr-x. 1 root root 4678 Oct 9 02:33 rule.xml.bak -rwxrwxrwx. 1 root root 3112 Oct 9 21:10 schema.xml -rwxr-xr-x. 1 root root 4219 Oct 9 02:21 schema.xml.bak -rwxrwxrwx. 1 root root 413 Oct 31 2018 sequence_conf.properties -rwxrwxrwx. 1 root root 75 Oct 31 2018 sequence_db_conf.properties -rwxrwxrwx. 1 root root 27 Oct 31 2018 sequence_distributed_conf.properties -rwxrwxrwx. 1 root root 51 Oct 31 2018 sequence_time_conf.properties -rwxrwxrwx. 1 root root 4870 Oct 9 03:56 server.xml -rwxr-xr-x. 1 root root 4851 Oct 9 02:17 server.xml.bak -rwxrwxrwx. 1 root root 16 Oct 31 2018 sharding-by-enum.txt -rwxrwxrwx. 1 root root 4299 Oct 31 2018 wrapper.conf drwxrwxrwx. 2 root root 4096 Sep 29 04:01 zkconf drwxrwxrwx. 2 root root 36 Sep 29 04:01 zkdownload
[root@s8 conf]# more server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
<property name="useHandshakeV10">1</property>
<property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
<property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
<property name="sequnceHandlerType">2</property>
<property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
<!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
<property name="processorBufferPoolType">0</property>
<!--默认是65535 64K 用于sql解析时最大文本长度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<property name="serverPort">8066</property>
<property name="managerPort">9066</property>
<property name="idleTimeout">300000</property>
<property name="frontWriteQueueSize">4096</property>
<property name="processors">32</property>
<property name="bindIp">0.0.0.0</property>
<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1开启 0关闭
-->
<property name="useOffHeapForMerge">1</property>
<!--
单位为m
-->
<property name="memoryPageSize">64k</property>
<!--
单位为k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
单位为m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否采用zookeeper协调切换 -->
<property name="useZKSwitch">false</property>
<!-- XA Recovery Log日志路径 -->
<!--<property name="XARecoveryLogBaseDir">./</property>-->
<!-- XA Recovery Log日志名称 -->
<!--<property name="XARecoveryLogBaseName">tmlog</property>-->
<!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
<property name="strictTxIsolation">false</property>
<property name="useZKSwitch">true</property>
</system>
<!-- 全局SQL防火墙设置 -->
<!--白名单可以使用通配符%或着*-->
<!--例如<host host="127.0.0.*" user="root"/>-->
<!--例如<host host="127.0.*" user="root"/>-->
<!--例如<host host="127.*" user="root"/>-->
<!--例如<host host="1*7.*" user="root"/>-->
<!--这些配置情况下对于127.0.0.1都能以root账户登录-->
<!--
<firewall>
<whitehost>
<host host="1*7.0.0.*" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
-->
<user name="root" defaultAccount="true">
<property name="password">mycoding</property>
<property name="schemas">cp_test1</property>
<!-- 表级 DML 权限设置 -->
<!--
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
-->
</user>
<!--
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
-->
</mycat:server>
[root@s8 conf]# more schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="cp_test1" checkSQLschema="false" sqlMaxLimit="100">
<!-- global table is auto cloned to all defined data nodes ,so can join
with any table whose sharding node is in the same data node -->
<table name="cpuser" primaryKey="id" autoIncrement="true" type="global" dataNode="dn1" />
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="mycat-228" database="cp_test1" />
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
<dataHost name="mycat-228" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="s1" url="192.168.1.221:3306" user="root" password="mycoding">
<!-- can have multi read hosts -->
<readHost host="s2" url="192.168.1.222:3306" user="root" password="mycoding" />
<readHost host="s3" url="192.168.1.223:3306" user="root" password="mycoding" />
<readHost host="s4" url="192.168.1.224:3306" user="root" password="mycoding" />
<readHost host="s5" url="192.168.1.225:3306" user="root" password="mycoding" />
<readHost host="s9" url="192.168.1.229:3306" user="root" password="123456" />
</writeHost>
</dataHost>
<!--
<dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
<heartbeat> </heartbeat>
<writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng" password="jifeng"></writeHost>
</dataHost>
<dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
<writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base" password="123456" > </writeHost> </dataHost>
<dataHost name="jdbchost" maxCon="1000" minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>
<dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
<heartbeat> </heartbeat>
<writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng" password="jifeng"></writeHost> </dataHost> -->
<!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
</dataHost> -->
</mycat:schema>
Mycat的配置看起来有些复杂,尤其是处理分布式事务和SQL防火墙设置部分。
隔境之羌╰: @释怀¥
在配置Mycat时,确实会遇到一些复杂的部分,尤其是在处理分布式事务和SQL防火墙配置时。为了更好地理解这些设置,可以参考一些具体的配置示例。
例如,Mycat的分布式事务配置需要设置事务管理器,可以参考以下简单配置:
此外,关于SQL防火墙,如果想要确保某些SQL语句不被执行,可以在Mycat的配置文件中设置过滤规则:
为了更深入地了解这些配置的细节,建议参考Mycat的官方文档,网址是 Mycat Documentation。这样的文档通常提供了更全面的示例和解释,有助于深入理解 Mycat 的配置和用法。
配置文件中详细展示了Mycat的系统属性,比如
serverPort
和user
配置,确保了系统的安全性和可操作性。泓渊: @痴男
配置Mycat时,详细的系统属性配置确实是保障系统正常运行的重要环节。特别像
serverPort
和user
这样的参数,通过合理配置,可以有效增强系统安全性。在实践中,为了避免配置错误,建议使用如下的方法来管理配置文件:在这些基础参数之外,建议再添加一些如
maxConnections
和minConnections
参数,以便于管理数据库连接池,例如:合理调整这些参数能有效提升系统的可扩展性和性能。
同时,可以考虑将配置文件放置在版本控制系统中(例如Git),这在团队协作时能够提供更好的管理能力,确保每位成员都能获取到最新的配置文件。
如需了解更多配置细节,可以参考官方文档:Mycat Documentation。
通过
schema.xml
配置,可以看到如何定义不同的数据节点和主机。这对于分库分表的设置至关重要。愫暮: @扯不断
在配置 Mycat 的过程中,
schema.xml
的定义确实是对数据库分片与路由策略的基础。特别是当需要处理多数据源或者复杂查询时,合理配置节点可以显著提高系统的扩展性和性能。举个例子,如果需要对用户数据进行分表,可以在
schema.xml
中定义如下:上述配置中,通过设置
shardingType
为hash
,可以根据用户ID将数据均匀分布到不同的分库中。这种方式可以有效减小单一数据库负载,实现更好的读写性能。另外,建议可以查看 Mycat 官方文档 以获取更多关于配置和最佳实践的详细信息,帮助更好地理解分库分表的策略和配置方法。这对优化大数据场景下的性能无疑是有帮助的。
server.xml
中的useZKSwitch
属性值得注意,它涉及到Zookeeper的使用,影响节点的高可用性。韦庆龙: @如果
对于
useZKSwitch
属性的讨论很有意思,它确实在配置Mycat时扮演了重要角色,尤其是涉及到使用Zookeeper进行集群管理时。提高节点的高可用性不仅关乎数据的一致性,也与系统的整体稳定性密切相关。在配置
server.xml
时,可以参考以下示例,以更好地理解如何配置useZKSwitch
属性:通过以上设置,Mycat将会启用Zookeeper集群模式。值得注意的是,Zookeeper的监控和管理功能可以显著减少单点故障的风险,提高系统的可靠性。同时,应确保Zookeeper的连接稳定,以及主机能够访问配置的Zookeeper服务器。
在此背景下,了解Zookeeper的工作机制和最佳实践也是十分重要的,可以参考Zookeeper官方文档来获取更多信息。这样有助于深入理解如何实现更高的可用性和系统容错能力。
建议在配置时合理规划数据节点以及其对应的数据库实例,以避免读写分离或分片策略带来的潜在瓶颈。
温存: @人间
在配置数据节点时,确实需要仔细思考读写分离与分片策略对系统性能的影响。合理规划可以有效减少潜在的瓶颈,有助于提高系统的整体效率。例如,在进行读写分离时,可以将读请求发送到从库,而将写请求发送到主库。以下是一个简单的配置示例:
对于分片策略,如果有大量的数据写入,可以根据某些字段(如用户ID)进行分片,这样可以合理地分布负载。例如,可以将用户ID为1-1000的数据分配到分片A,1001-2000分配到分片B等。
此外,建议参考一些实践案例来验证这些策略的有效性,比如 MyCat官方文档 上的配置示例和最佳实践,可能会提供更深入的见解。同时,关注性能监控工具也是一个不错的选择,以实时观察节点的负载和瓶颈,自动调整配置。
通过合理规划节点和策略,可以有效增强系统的扩展性与稳定性。
文档内的注释帮助了解每个配置项的作用,尤其是在处理复杂的SQL动态路由时提供了大的指导。
文魁: @摇曳
在注释中可以明确指出
connection-url
的格式要求和注意事项,这对于新手来说尤为重要。此外,考虑到不同环境(如开发、测试、生产)可能会有不同的配置,建议可以使用变量来进行管理,以降低维护成本。例如,可以使用类似${DB_URL}
的方式进行替换。另外,建议参考以下网址,里面有更详细的动态路由配置实例及最佳实践:MyCat Documentation ```
其中的
systemReserveMemorySize
和memoryPageSize
配置有助于优化系统的内存分配和使用效率。kaifeng: @想哭不想流泪
在内存管理方面,合理配置
systemReserveMemorySize
和memoryPageSize
的确能够对性能产生积极影响。比如,在处理大规模数据时,调优这些参数可以减少内存碎片,提高内存的使用效率。例如,如果
systemReserveMemorySize
设置过低,可能会导致在高并发情况下频繁的内存申请,增加了系统的负担。可以尝试将其值设置为系统总内存的10%-20%来观察性能变化。同时,对于
memoryPageSize
,较小的页面大小在某些情况下能够更精细地管理内存,有助于减少大对象带来的内存浪费。不过,也要注意如果设置过小,可能会增加管理开销。可以参考相关的文档和性能调优指南,例如MyCat的官方文档中有关内存配置的部分,以获得更全面的理解和应用策略。
对于Mycat初学者,可能最好逐项测试配置的影响,尤其是在真实环境中应用之前做性能调优。
距离: @淡色调
在配置Mycat的时候,确实逐项测试配置对理解各选项的影响至关重要。可以尝试使用负载测试工具,比如Apache JMeter,来评估不同配置下的性能表现。在真实环境中应用之前,进行这样的测试可以帮助发现潜在的瓶颈。
例如,可以编写一个简单的JMeter计划,对Mycat配置的各个方面进行基准测试。以下是一个基本示例的概念:
建议在测试后对结果进行深入分析,观察响应时间、吞吐量等指标,进而调整Mycat配置,找到最佳性能设置。此外,可以参考Mycat的官方文档和社区资源,例如Mycat文档和Mycat GitHub,获取更详细的配置指导和最佳实践。
Mycat支持多种数据库类型,通过配置文件,可以快速切换和连接不同的数据库,这体现了Mycat的灵活性。
沉淀: @黎巴嫩
我觉得提到Mycat的灵活性确实是个亮点,尤其是在多个数据库类型的支持上,能够通过配置文件轻松切换和连接不同数据库,极大地方便了开发和运维。
例如,Mycat的配置文件通常在
mycat.conf
中,假设我们要连接MySQL和PostgreSQL,可以按照如下方式配置:通过以上配置,可以方便地在不同的数据源间切换。此外,Mycat还支持多种路由策略和分片功能,这些都能为项目的扩展性提供很大的支持。
关于更多的配置和功能,可以参考Mycat文档了解更详细的信息和示例,以充分利用Mycat的能力。
Mycat的文档可以参考Mycat官方文档。该文档提供了全面的配置指南和实践策略。
血红: @离爱
很高兴看到关于Mycat的讨论。Mycat作为一个开源的数据库中间件,确实在分布式数据库管理方面表现出色。配置方面,理解不同的参数对性能的影响是很重要的,比如连接池的配置、路由策略的选择等。
在配置中,一个较为常用的连接池设置示例可以参考:
此外,关于路由策略,可以使用hash路由以实现更好的负载均衡,例如:
为更深入的理解Mycat的配置,推荐访问Mycat官方文档获取更多具体的实例和使用建议,帮助优化配置以满足特定的业务需求。