赞
踩
server.xml配置文件包含了mycat的系统配置信息,对应的源码使systemconfig.jar。它有两个重要的标签,分别是user和system,system标签的各属性时mycat调优的关键。
user标签主要用于定义登录mycat的用户和权限。如上面定义用户名和密码均为user,该用户可以访问的schema只有TESTDB。
可以直接修改对应的属性值来修改密码,如果需要同时访问多个schema,则多个schema之间使用英文逗号隔开。
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
<property name="benchmark">1111</property>
<property name="usingDecrypt">1</property>
</user>
#介绍下后面两个属性
benchmark: 通过该属性来限制前端的整体连接数量。如果其值为0或者不对其进行设置,则表示不限制连接数量。
usingDecrypt: 通过设置该属性来开启密码加密功能。默认值是0,表示不开启加密,值为1说明开启密码加密功能。
这个标签的属性与系统配置有关,下面会一一介绍其属性。
charset属性
配置字符集时一定要保证mycat字符集与数据库字符集的一致性。
defaultSqlParser属性
由于mycat最初是时候Foundation DB的sql解析器,而后才添加的Druid的解析器。所以这个属性用来指定默认的解析器。目前的可用的取值有:druidparser和 fdbparser。使用的时候可以选择其中的一种,目前一般都使用druidparser。mycat1.4之后的版本中fdbparser属性作废。
processors属性
这个属性主要用于系统可用的线程数,配置系统可用的线程数量,默认值为CPU核心X每个核心运行线程的数量。主要影响processorBufferPool、processorBufferLocalPercent、processorExecutor属性。NIOProcessor的个数也是由这个属性定义的,所以调优的时候可以适当的调高这个属性。
processorBufferChunk属性
这个属性指定每次分配Socket Direct Buffer的大小,默认是4096个字节。这个属性也影响buffer pool的长度。
processorBufferPool属性
该属性指定bufferpool的计算比例。由于每次执行NIO读,写操作都需要使用到buffer,所以mycat初始化时会建立一定长度的buffer池来加快NIO读,写效率,减少建立buffer的时间。mycat中有两个主要的buffer池:BufferPool,ThreadLocalPool。BufferPool使用ThreadLocalPool作为二级缓存,每次从BufferPool中获取时都会优先获取ThreadLocalPool中的buffer值,如果ThreadLocalPool未命中,则会获取BufferPool中的Buffer值。ThreadLocalPool中的Buffer在每个线程内部使用。然而,BufferPool是每个NIOProcessor共享的。
processorBufferLocalPercent属性
该属性用来控制ThreadLocalPool分配pool的比例大小,这个属性默认值是100.线程缓存百分比=bufferlocalpercent/processor。
processorExecutor属性
这个属性主要用于指定NIOProcessor上共享的businessExecutor固定线程池大小。mycat在需要处理一些异步逻辑的时候会把任务提交到这个线程池中。新版本中这个连接池的使用频率不是很大了,可以设置一个较小的值。
sequenceHandlerType属性
指定使用Mycat全局序列的属性。0为本地文件方式,1为数据库方式,2为本地时间戳方式,3为分布式zk ID生成器,4为zk递增ID生成。默认是使用本地文件方式,文件方式主要只是用于测试使用。从1.6增加两种zk的全局ID生成算法。
MySQL连接相关属性
初始化MySQL的前后端连接所涉及的属性如下。
心跳属性
服务相关属性
这里介绍与mycat服务相关的属性,主要影响外部系统对mycat的感知。
fakeMySQLversion属性
mycat使用mysql的通信协议模拟了一个mysql服务器,默认为5.6版本。若非特许,不需要更改,从Mycat1.6开始支持此属性。
分布式事务开关属性
handleDistributedTransaction是分布式事务开关:0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务只涉及全举表,则不过滤);2为不过滤分布式事务,但是记录分布式事务日志。从mycat1.6版本开始支持此属性。
useOffHeapForMerge属性
该属性用于配置是否启用非堆内存处理跨分片结果集,1为开启,0为关闭,mycat从1.6开始支持。
全局表一致性检测
其原理是通过在全局表中增加_MYCAT_OP_TIME字段来进行一致性检测,为bigint类型。create语句通过mycat执行时会自动添加上该字段,其他情况需要手动添加。1为开启,0为关闭,mycat从1.6版本开始支持。
useSqlStat属性
开启SQL实时统计,1为开启,0为关闭。
schema.xml作为mycat中重要的配置文件之一,涵盖了mycat的逻辑库,表,分片规则,分片节点及数据源。schema.xml配置文件中有7个标签,下面来一一介绍。
schema标签用于定义mycat实例中的逻辑库,mycat可以有多个逻辑库,每个逻辑库都有自己的相关配置。可以使用schema标签来划分这些不同的逻辑库。如果不配置schema标签,所有的表配置,会属于同一个默认的逻辑库。
逻辑库的概念和mysql数据库中Datebase的概念相同,我们在查询这两个逻辑库中的表的时候,需要切换到该逻辑库下才可以查到所需要的表。
<schema name="TESTDB" checkSQLschema="false" >
.....
</schema>
dataNode属性
该属性用于绑定逻辑库到某个具体的database上,如果定义了这个属性,那么这个逻辑库就不能工作在分库分表模式下了。也就是说对这个逻辑库的所有操作会直接作用到绑定的dataNode上,这个schema就可以用作读写分离和主从切换,具体如下配置:
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<!—这里不能配置任何逻辑表信息-->
</schema>
那么现在USERDB就绑定到dn1所配置的具体database上,可以直接访问这个database。当然该属性只能配置绑定到一个database上,不能绑定多个dn。
checkSQLschema属性
当该值设置为 true 时,如果我们执行语句select * from TESTDB.travelrecord;
则MyCat会把语句修改为select * from travelrecord;
。即把表示schema的字符去掉,避免发送到后端数据库执行时报ERROR 1146 (42S02): Table‘testdb.travelrecord’ doesn’t exist
,不过,即使该值设置为true,如果语句所带的schema名字不是shcema指定的名字,那么mycat不会删除这个schema。
sqlMaxlimit属性
当该值设置为某个数值时,每条执行的sql语句,如果没有加上limit语句,mycat也会自动的加上所对应的值。如果不设置该值,mycat会默认把查询到的信息全部展示处理,造成过多的输出。所以,正常使用中,还是尽量加入该值,用于减少过多的数据返回。如果sql语句中显式指定了limit的大小,不受该属性的约束。需要注意的是,** 如果运行的schema为非拆分库的,那么该属性不会生效,需要手动添加limit语句。**
table标签定义了逻辑表,所有需要拆分的表都需要在这个标签中定义。
<table name="address" primaryKey="autoIndex" rule="sharding-by-murmur" dataNode="dn1,dn2" />
table标签的属性如下:
childTable标签用于定义E-R分片的子表,通过标签上的属性与父表进行关联。
dataNode标签定义了mycat中的数据节点,也就是数据分片。一个dataNode标签就是一个独立的数据分片。
<dataNode name="dn2" dataHost="host02" database="db" />
#使用host02主机上数据实例中db物理数据库,这就组成一个数据分片,使用dn2标识这个分片。
作为Schema.xml中最后的一个标签,该标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读写分离配置和心跳语句。现在我们就解析下这个标签。一个dataHost标签的属性如下:
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: 所有的读请求都随机分配到writeHost对应的readHost上执行,writeHost不负担读压力,注意balance=3只在mycat1.4之后版本中有效。
- writeType=“0”, 所有写操作都发送到可用的writeHost上。
- writeType=“1”,所有写操作都随机的发送到readHost。
- writeType=“2”,所有写操作都随机的在writeHost、readhost分上发。
-1:表示不自动切换。
1: 默认值,表示自动切换
2: 表示基于MySQL主从同步状态决定是否切换,心跳语句: show slave status.
3: 表示基于mysql galary cluster的切换机制,适合mycat1.4之上的版本,心跳语句show status like “%esrep%”;
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。
jdbc:mysql://localhost:3306/
。rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRule和function这两个标签。在具体使用过程中可以按照需求添加tableRule和function。
这个标签定义表规则,定义的表的规则在schema.xml中引用。
name属性指定唯一的名字,用于标识不同的表规则,内嵌的rule标签则指定对物理表中的那一列进行拆分和使用什么路由算法。
columns内指定要拆分的列名字。
algorithm使用function标签中的name属性。连接表规则和具体路由算法。当然,多个表规则可以连接到同一个路由算法上。
name指定算法的名字。
class指定路由算法具体的类名字。
property为具体算法需要用到的一些属性。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。