mycat三步曲之二(mycat的下载和配置)

一、下载mycat      

mycat的官网网址  http://www.mycat.org.cn/,我使用的是mycat1.4Linux安装包

下载地址

https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz

下载mycat的安装包到 /opt 目录下

[root@admin local]#cd /opt

[root@admin local]#wget https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz

[root@admin local]# tar -xvf  Mycat-server-1.4-RELEASE-20151017210032-linux.tar.gz

解压后放到/usr/local下  

[root@admin local]#mv mycat /usr/local

[root@admin local]# pwd

/usr/local/mycat

[root@admin local]# ls

bin  catlet  conf  lib  logs  version.txt

以上显示的就是mycat的文件夹.

 

二、配置环境变量

检查是否已经配置好了java的环境变量(本来不打算写的,结果发现还是有好多人搞不好!!!)

[root@admin local]#vim /etc/profile
向文件里面追加以下内容:(根据自己的jdk的路径来写java_home)

JAVA_HOME=/usr/java/jdk1.8.0
JRE_HOME=/usr/java/jdk1.8.0/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME PATH CLASSPATH
使修改生效

[root@admin local]# source /etc/profile //使修改立即生效
[root@admin local]#java -version

显示

java version "1.8.0_45"

Java(TM) SE Runtime Environment (build 1.8.0_45-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

表示我的java环境变量配置好了

 

三、修改mycat配置文件

接下来修改mycat的配置文件

[root@admin local]#cd /usr/local/mycat/conf

[root@admin local]#ls

autopartition-long.txt       partition-hash-int.txt    sequence_db_conf.properties

cacheservice.properties      partition-range-mod.txt   sequence_time_conf.properties

dnindex.properties           router.xml                server.xml

ehcache.xml                  rule.xml                  wrapper.conf

index_to_charset.properties  schema.xml

log4j.xml                    sequence_conf.properties

 

配置文件非常多,配置项也远比amoeba复杂.如果只是简单配置在不同的服务器上进行读写分离只需要配置两个文件

server.xml 和  schema.xml

 

(一)先配置server.xml

找到这一段

</system>

        <user name="test">

                <property name="password">test</property>

                <property name="schemas">TESTDB</property>

        </user>

 

        <user name="user">

                <property name="password">user</property>

                <property name="schemas">TESTDB</property>

                <property name="readOnly">true</property>

        </user>

 

这里配置了两个可以来连接的用户

用户1  test   密码test   给予了此用户TESTDB数据库的权限

用户2  user   密码user   给予了此用户TESTDB数据库的只读权限

注意这里的testdb 不一定是你数据库上的真实库名.可以任意指定.只要和接下来的schema.xml的配置文件中的库名统一即可

 

(二)接下来配置schema.xml

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

 

        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

                <!-- auto sharding by id (long) -->

                <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

 

                <!-- 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="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

                <table name="hotnews" primaryKey="ID" dataNode="dn1,dn2,dn3"

                        rule="mod-long" />

                <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global" 

                        rule="mod-long" /> -->

                <table name="employee" primaryKey="ID" dataNode="dn1,dn2"

                        rule="sharding-by-intfile" />

                <table name="customer" primaryKey="ID" dataNode="dn1,dn2"

                        rule="sharding-by-intfile">

                        <childTable name="orders" primaryKey="ID" joinKey="customer_id"

                                parentKey="id">

                                <childTable name="order_items" joinKey="order_id"

                                        parentKey="id" />

                        </childTable>

                        <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"

                                parentKey="id" />

                </table>

                        /> -->

        </schema>

        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" 

                /> -->

        <dataNode name="dn1" dataHost="localhost1" database="db1" />

        <dataNode name="dn2" dataHost="localhost1" database="db2" />

        <dataNode name="dn3" dataHost="localhost1" database="db3" />

        <!--<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="localhost1" maxCon="1000" minCon="10" balance="0"

                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

                <heartbeat>select user()</heartbeat>

                <!-- can have multi write hosts -->

                <writeHost host="hostM1" url="localhost:3306" user="root"

                        password="123456">

                        <!-- can have multi read hosts -->

 

                </writeHost>

                <writeHost host="hostS1" url="localhost:3316" user="root"

                        password="123456" />

 

 

看着这一大篇你是否和我一样的开始蛋疼.好复杂有木有!

算了给大家来一份我的简单点的.因为我们现在只做库的读写分离,没用分库 没用分表这些东西.

<mycat:schema xmlns:mycat="http://org.opencloudb/">

<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

</schema>

<dataNode name="dn1" dataHost="localhost1" database="db1" />

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">

<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />

                </writeHost>

        </dataHost>

 

 

(三)配置文件解释

,  <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

这里TESTDB 就是我们对外声称的我们有数据库的名称  必须和server.xml中的用户指定的数据库名称一致

添加一个dataNode="dn1" 是指定了我们这个库只在dn1.没有进行分库

 

, <dataNode name="dn1" dataHost="localhost1" database="db1" />

这里只需要改database的名字 db1 就是你真实数据库服务上的数据库名 .

根据你自己的数据库名进行修改.

 

<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

 

这里只需要配置三个地方    balance="1"writeType="0" ,switchType=”1”

  1. balance 属性负载均衡类型,目前的取值有 4 种:
    1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
    2. balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
    3. balance="2",所有读操作都随机的在 writeHost、 readhost 上分发。
    4. balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。
  2. writeType 属性
    负载均衡类型,目前的取值有 种:
    1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
    writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
    2. writeType="1",所有写操作都随机的发送到配置的 writeHost
    3. writeType="2",没实现。
  3. switchType 属性
    - -1 表示不自动切换
    - 1 默认值,自动切换
    - 2 基于MySQL 主从同步的状态决定是否切换

,<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456">

<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="123456" />

</writeHost>

这里是配置的我们的两台读写服务器IP地址访问端口和 访问用户的用户名和密码

注意:这里配置的连接的两个库,一定要先在mycat的这台服务器上使用命令登陆这两个数据库保证没有问题后再配置.(经常发现群里有小伙伴配置的时候启动起来了出各种问题,结果是他配置的两个数据库根本就连不上!!!!!!!)

 

 

 

四、启动mycat

主要就是这两个配置文件,配置完成.们试试能否正常启动

[root@admin local]#cd /usr/local/mycat/bin

[root@admin local]#./mycat console

Running Mycat-server...

wrapper  | --> Wrapper Started as Console

wrapper  | Launching a JVM...

jvm 1    | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=64M; support was remove

d in 8.0jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org

jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.

jvm 1    | 

jvm 1    | log4j 2015-10-24 12:07:08 [./conf/log4j.xml] load completed.

jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log

 

如果你看到这一段说明你的服务已经启动起来了;

这里可以使用Navicat for MySQL,来尝试连接一下,能连接成功.如果没有连接成功过,有错误的话会在/logs/mycat.log中去查看

 

五、注意事项:

1,记得给你的防火墙开端口默认的mycat端口是8066,9066是管理端口

 

2,如果你在连接数据库的时候日志文件中一直报错错

错误:

Host is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

这个时候估计是你的数据库的账号和密码错误了.所以IP被锁

.首先需要去数据库执行flush hosts;命令清除 被锁死的IP

 

3,错误mycat.log:  Unknown charsetIndex:224

  说明是字符集问题引起的数据库不能连接成功

  #vim index_to_charset.properties

编辑配置文件中  设置224的字符集

比如我的数据库中 224=utf8mb4

设置完成后再重启服务就可以了!

 

 4,host文件未修改报错unknown error!!!!

STATUS | wrapper  | 2015/11/24 16:05:32 | Launching a JVM...
INFO   | jvm 5    | 2015/11/24 16:05:32 | Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=300M; support was removed in 8.0
ERROR  | wrapper  | 2015/11/24 16:05:37 | JVM exited while loading the application.
INFO   | jvm 5    | 2015/11/24 16:05:37 | Error: Exception thrown by the agent : java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: DB-01: DB-01: unknown error
修改/etc/hosts就行,network不用动要解析hostM1 和hostS1 这两个到对应的ip!!!!!!!!!!!!!!!!!!!!!!
 
 

转载于:https://www.cnblogs.com/yjdeihc/p/4993140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值