Mycat的安装、读写分离配置、故障转移

     

               使用Mycat 做简单的读写分离

       原本使用的是amoeba做的读写分离,但是amoeba早已经停止了维护,有问题也没有办法解决,并且不支持双主多重模式.最近mycat又非常火热.觉得用mycat替换现有的amoeba.

温馨提示:

配置mycat之前请做好准备工作,统一各个数据库的字符集.并且最好使用mysql5.6的版本进行配置.以免以为版本问题带来很多未知的麻烦!

一、下载mycat 安装     

mycat的官网网址

 http://www.mycat.org.cn/

我使用的是mycat的1.6的Linux安装包

     tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 

     #解压后放到/usr/local下  

     mv mycat /usr/local

二、配置环境变量

检查是否已经配置好了java的环境变量

如果你还没用配置好,需先配置.

三、修改mycat配置文件

接下来修改mycat的配置文件

    cd  /usr/local/mycat/conf

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

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数据库的只读权限

注意

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

    B:这里的配置的用户名和密码,是我们 连接mycat的用户名和密码,和  schema.xml中配置的 连接真实mysql的用户名和密码 不一定一样

 

(二)接下来配置schema.xml

.因为我们现在只做库的读写分离,没用分库 没用分表这些东西.

<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>show slave status</heartbeat>

    <writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="asdf1@34">

        <readHost host="hostS1" url="192.168.1.101:3306" user="root" password="asdf1@34" />

    </writeHost>

   <writeHost host="hostS1" url="192.168.1.101:3306" user="root"  

                password="asdf1@34"/>  

</dataHost>

下载地址:

        https://www.tapd.cn/22121161/documents/show/1122121161001000020

(三)配置文件解释

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

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

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

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

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

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

三,<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”

a. 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 没有。

b. writeType 属性
负载均衡类型,目前的取值有 3 种:
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。

c. switchType 属性

-1:表示不启用主从切换;

1:为默认值,自动切换;心跳检测语句,一般为select user();

2:基于主从同步的状态,决定是否切换,与show slave status心跳对应;
3:基于多住galary集群切换,与show status like 'wsrep%'对应;

d. Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master>slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到很久之前的旧数据

建议组合值:

    balance="1" writeType="0"   switchType="2" 

四,

<writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="asdf1@34">

<readHost host="hostS1" url="192.168.1.101:3306" user="root" password="asdf1@34" />

</writeHost>

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

四、启动mycat

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

        cd /usr/local/mycat/bin

        ./mycat start

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

五、注意事项:

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

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

错误:

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

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

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

3,错误: 

        java.lang.IllegalArgumentException: Invalid DataSource:0

        明显是链接后面的MYSQL有问题,但是MYSQL配置也没错,后来发现MYSQL新安装以后是不能用-h 127.0.0.1来登录,只能sock登录,所以登录mysql后修改ROOT用户,update user set host = '%' where user = 'root'; ,重启服务后一切正常了

4,错误mycat.log中:  Unknown charsetIndex:224

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

         vim index_to_charset.properties

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

比如我的数据库中 224=utf8mb4

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

猜你喜欢

转载自my.oschina.net/u/3693993/blog/1800388
今日推荐