一只虎 发表于 2012-12-10 14:55:25

cobar配置安装

<div id="cnblogs_post_body">1、下载cobar http://code.alibabatech.com/wiki/display/cobar/release
2、进入cobar-server-1.2.4目录,可以看到Cobar的主要目录如下:
bin    #包含Cobar的启动、重启、停止等脚本文件
conf   #包含Cobar所有配置文件
lib    #包含Cobar及其依赖的jar文件
logs   #包含Cobar所有日志文件
3、Cobar的所有配置文件全部放在conf目录中,进入conf目录,可以看到:
server.xml   #Cobar系统、用户、集群等相关配置
schema.xml   #schema,dataNode,dataSource相关配置
rule.xml   #分布式规则定义
log4j.xml    #日志相关配置


4、mysql中数据准备
    配置两台机器的mysql,ip地址分别为:192.168.1.110 、 192.168.1.113 端口为3306 用户名 root 密码为空。我们需要在 192.168.1.110上创建database:dbtest1,dbtest2,dbtest3;table:tb1(在dbtest1上),tb2(dbtest2、dbtest3上)。在192.168.1.113上创建database:dbtest31,dbtest32;table:tb1(dbtest31上),tb2(dbtest32上)
数据库创建脚本:
#########################################192.168.1.110
#创建dbtest1
drop database if exists dbtest1;
create database dbtest1;
use dbtest1;
#在dbtest1上创建tb1
create table tb1(
id int not null,
gmt datetime);
#创建dbtest2
drop database if exists dbtest2;
create database dbtest2;
use dbtest2;
#在dbtest2上创建tb2
create table tb2(
id int not null,
val varchar(256));
#创建dbtest3
drop database if exists dbtest3;
create database dbtest3;
use dbtest3;
#在dbtest3上创建tb2
create table tb2(
id int not null,
val varchar(256));
#########################################192.168.1.113
#创建dbtest31
drop database if exists dbtest1;
create database dbtest1;
use dbtest31;
#在dbtest1上创建tb1
create table tb1(
id int not null,
gmt datetime);
#创建dbtest32
drop database if exists dbtest2;
create database dbtest2;
use dbtest32;
#在dbtest2上创建tb2
create table tb2(
id int not null,
val varchar(256));













































5、配置schema.xml
参考:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7671478

请确保机器上设置了JAVA环境变量JAVA_HOME
<!--定义schema db_single, 该schema未做分布式存储,类似于5.1节中schema逻辑层次图中的db2-->
<!--对schema db_single所有表的访问均路由到dnTest1 上执行-->
<!--<schema name="db_single" dataNode="dnTest1"/>-->
<!--定义schema db_shard-->
<!--所有除tb1,tb2之外表的访问都路由到dnTest1 去执行-->
<schema name="db_shard" dataNode="dnTest1">
<!--对tb1的访问会根据规则tb1Rule路由到dnTest1,dnTest1的某一个或某几个datanode执行-->
<table name="tb1" dataNode="dnTest1,dnTest1" rule="rule1" />
<!--对tb2的访问会根据规则string_val_2路由到dnTest2,dnTest3,dnTest5的某一个或两个datanode执行-->
<table name="tb2" dataNode="dnTest2,dnTest3,dnTest5" rule="rule1" />
</schema>

<!--rule1,将会在rule.xml的tableRule中定义,可以不想同-->


<!--数据节点由主、备数据源,心跳,连接池等配置组成。-->
<!--数据节点名称-->
<dataNode name="dnTest1">
    <property name="dataSource">
      <!--第一行dataSourceRef表示主数据源-->
      <dataSourceRef>dsTest</dataSourceRef>
      <!--第二行dataSourceRef表示备数据源-->
      <!--<dataSourceRef>ds_single_slave</dataSourceRef>-->
      <!--如果需要一主多备的情况,可以将第二备数据源配置在第三行,以此类推-->
      <!--<dataSourceRef>ds_single_slave2</dataSourceRef>-->
    </property>

    <!--Cobar与后端数据源连接池大小设置-->
    <!--<property name="poolSize">256</property>-->

    <!--Cobar通过心跳来实现后端数据源HA,一旦主数据源心跳失败,便切换到备数据源上工作-->
    <!--Cobar心跳是通过向后端数据源执行一条SQL语句,根据该语句的返回结果判断数据源的运行情况-->
    <!--<property name="heartbeat">select user()<property>-->
</dataNode>
   <dataNode name="dnTest2">
    <property name="dataSource">
      <dataSourceRef>dsTest</dataSourceRef>
    </property>
</dataNode>
<dataNode name="dnTest3">
    <property name="dataSource">
      <dataSourceRef>dsTest</dataSourceRef>
    </property>
</dataNode>
<dataNode name="dnTest4">
    <property name="dataSource">
      <dataSourceRef>dsTest</dataSourceRef>
    </property>
</dataNode>
<dataNode name="dnTest5">
    <property name="dataSource">
      <dataSourceRef>dsTest</dataSourceRef>
    </property>
</dataNode>

<!-- 数据源定义,数据源是一个具体的后端数据连接的表示。-->
<!--数据源的名称与类型,Cobar暂时只支持mysql这种类型-->
<dataSource name="dsTest" type="mysql">
    <!--连接的地址,端口和schema名称-->
    <property name="location">
      <location>192.168.1.110:3306/dbtest1</location>
   <location>192.168.1.110:3306/dbtest2</location>
   <location>192.168.1.110:3306/dbtest3</location>
   <location>192.168.1.113:3306/dbtest31</location>
   <location>192.168.1.113:3306/dbtest32</location>
    </property>

   <!--连接用户名,密码-->
    <property name="user">root</property>
    <property name="password"></property>

    <!--连接的SQL模式-->
    <property name="sqlMode">STRICT_TRANS_TABLES</property>
</dataSource>
















































































此处要注意开启远程连接root用户的权限
grant all privileges on *.* to root#'%'
6、配置rule.xml
tableRule
tableRule主要作用是用来判断SQL语句路由到哪些datanode执行,Cobar是通过在SQL中提取一个或多个字段的值,并根据这些字段的值来决定路由到哪个库执行。因此,tableRule定义两个要素:
1)按表中的哪个字段路由?------下文中我们称此字段为路由字段
2)有了字段值,如何路由?------即路由函数

<tableRule name="rule1">
    <rule>
      <!--id为路由字段-->
    <columns>id</columns>
      <!--func1 是路由函数,参数为id-->
    <algorithm><!]></algorithm>
    </rule>
</tableRule>













function
参考:http://code.alibabatech.com/wiki/pages/viewpage.action?pageId=7671871
<!--定义function名称,如果路由字段是字符串类型,对应class路径为com.alibaba.cobar.route.function.PartitionByString-->
<function name="func" class="com.alibaba.cobar.route.function.PartitionByString">
    <!--该路由函数将1024分成多少个区段-->
    <property name="partitionCount">4</property>
    <!--每一区段的长度, 满足4 * 256 = 1024-->
    <property name="partitionLength">256</property>
    <!--字符串需要先取hash值再做映射,这里定义取字符串的哪一部分子串做hash-->
    <!--:8表示子串的下标,意思是取路由字段的前8个字符做hash,该语法与python取字符串下标方式相同-->
    <property name="hashSlice">:8</property>
</function>

<function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">
    <!--该路由函数将1024分成多少个区段-->
    <property name="partitionCount">2</property>
    <!--每一区段的长度, 满足4 * 256 = 1024-->
    <property name="partitionLength">512</property>
    <!--字符串需要先取hash值再做映射,这里定义取字符串的哪一部分子串做hash-->
</function>

























7、配置server.xml
System
<!--system中包含系统参数定义,服务端口、管理端口,处理器个数、线程池等定义-->
<!--这些配置都有默认值,一般情况下用户可以完全不用配置-->
<system>
    <!--端口定义,如果没有端口冲突,可不用配置-->
    <!--Cobar服务端口, 通过此端口执行SQL语句,默认值8066-->
    <property name="serverPort">8066</property>
    <!--Cobar管理端口,通过此端口执行Cobar管理命令, 默认值9066-->
    <property name="managerPort">9066</property>

    <!--Cobar内部处理器个数,线程池等定义,默认值为Cobar所在机器处理器个数-->
    <!--这些配置主要影响Cobar内部处理性能,可在做性能优化时调整-->
    <property name="initExecutor">16</property>
    <property name="timerExecutor">4</property>
    <property name="managerExecutor">4</property>
    <property name="processors">4</property>
    <property name="processorHandler">8</property>
    <property name="processorExecutor">8</property>

    <!--Cobar与Cobar间心跳的用户名和密码, 默认值即是_HEARTBEAT_USER_和_HEARTBEAT_PASS_-->
    <!--如果两台Cobar之间需要心跳,这两项配置必须相同,一般不建议自行配置,使用默认值即可-->
    <property name="clusterHeartbeatUser">_HEARTBEAT_USER_</property>
    <property name="clusterHeartbeatPass">_HEARTBEAT_PASS_</property>
</system>





























User
<!--Cobar的用户定义,包括用户名,密码以及访问权限设置,可以配置任意多个用户-->
<!--普通用户配置-->
<user name="test">                            <!--用户名-->
    <property name="password">test</property>   <!--密码-->
    <!--Cobar对用户进行了简单的权限控制,可定义用户对某些schema是否有访问权限-->
    <!--这里不区分读写权限,一旦拥有访问权限,便是读写权限-->
    <!--以逗号分隔多个schema, test用户只能访问db_single和db_shard两个Cobar定义的schema-->
    <property name="schemas">db_single,db_shard</property>
</user>

<!--超级用户配置,超级用户是指对所有schema都有访问权限的用户-->
<!—
<user name="root1">
 <property name="password">root</property>
-->
 
 <!--不配置任何访问权限,表示对所有schema都有访问权限-->
 <!--
</user>
<user name="root2">
 <property name="password">root</property>
-->
 
    <!--配置为空同样表示对所有schema都有访问权限-->
    <!-<property name="schemas"></property>
</user>-->
































Cluster
在实际应用中,经常需要部署一个Cobar集群,我们称集群中的一台Cobar为一个Cobar节点。

<!--组建一个Cobar集群,只需在cluster配置中把所有Cobar节点(注意:包括当前Cobar自身)都配置上便可-->
<cluster>
    <!--node名称,一个node表示一个Cobar节点,一旦配置了node,当前Cobar便会向此节点定期发起心跳,探测节点的运行情况-->
    <node name="cobar1">
      <!--Cobar节点IP, 表示当前Cobar将会向192.168.1.110上部署的Cobar发送心跳-->
      <property name="host">192.168.1.110</property>
      <!--节点的权重,用于客户端的负载均衡,用户可以通过命令查询某个节点的运行情况以及权重-->
      <property name="weight">1</property>
    </node>
    <!--当前Cobar将会向192.168.1.113上部署的Cobar发送心跳-->
    <node name="cobar2">
      <property name="host">192.168.1.113</property>
      <property name="weight">2</property>
    </node>
   
    <!--用户还可以将Cobar节点分组,以便实现schema级别的细粒度负载均衡-->
    <group name="group12">
      <property name="nodeList">cobar1,cobar2</property>
    </group>

</cluster>

































用户只需登录Cobar的服务端口(8066),运行Cobar自带的查询命令show cobar_cluster,便可查询集群中所有节点的运行情况以及权重,并根据查询结果做负载均衡。
mysql -h192.168.1.110 -utest -ptest -P8066
mysql>show cobar_cluster; #查询cluster配置中正常的Cobar节点
+---------------+--------+
| HOST          | WEIGHT |
+---------------+--------+
| 192.168.1.110   |      1 |
| 192.168.1.113   |      2 |
+---------------+--------+
注意:
1)如果需要配置Cobar集群,当前Cobar自身也需要作为一个节点配置在cluster中,Cobar不会默认向自己发心跳;
2)show cobar_cluster只显示cluster配置中得正常Cobar节点,如果节点异常(如超时或错误),结果中便不会包含此节点。

8、访问方式
由于Cobar遵循MySQL协议,访问Cobar的方式与访问MySQL数据库完全相同。
支持MySQL命令行方式访问
#命令行
mysql -h192.168.1.110 -utest -ptest -P8066 -Ddb_shard
页: [1]
查看完整版本: cobar配置安装