IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]CentOS下Mycat+MySQL水平分割负载均衡配置记录

    testcs_dn发表于 2016-05-19 18:33:32
    love 0

    CentOS 6.5 下Mycat+MySQL水平分割负载均衡配置记录

    什么是MYCAT?

    Mycat数据库分库分表中间件,更多的就不说了,参考官网;

    什么是中间件?

    专业的定义我也不说了,说点相关类似的例子:

    1、类似房屋中介:你自己要找到想出租出售房屋的人比较费劲,他们可以一下子提供给你很多;

    2、大超市:你想一下子买到多种多样的生活用品可能需要跑很多地方,去大超市一个地方就可以了;

    3、装修队:你想装修一下房子,可是你自己电工、木工、瓦工都不会,找一个装修队全搞定了;

    4、Windows API:你想编程控制音量大小之类的,有那么多种品牌、型号的声卡,但你不必考虑那么多,只需要调用API就行了;

    5、Mycat:你希望将相同类型的数据分库分表保存到不同的服务器上、不同的数据库(MySQL、MSSQL、Oracle、NoSQL)中的不同的表中,但操作起来就像操作一种类型的一个数据库那么简单,用它就OK了;

    配置成功后

    我们先来看看配置成功以后,能过Navicat for MySQL来连接Mycat是什么效果,有个直观的认识。


    工具的应用请参考:MySQL学习(二)图形界面管理工具Navicat for MySQL安装和使用

    环境概述

    CentOS 6.5

    Mycat-server-1.5-release版本

    MySQL 5.7.12

    jdk1.8.0_92

    前置条件

    相关安装可参考以下链接:

    CentOS 6.5 下MySQL 5.7.12主从复制架构配置记录

    如何从官方网站下载jdk1.7?

    CentOS下安装JDK7

    这里用的是jdk1.8.0_92,安装步骤比较简单,不需要配置环境变量;

    修改MySQL配置文件(可选)

    vi /etc/my.cnf

    添加一行配置:lower_case_table_names=1

    # vi /etc/my.cnf
    
    # For advice on how to change settings please see
    # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
    
    [mysqld]
    
    #[必须]启用二进制日志
    log-bin=mysql-bin
    #[必须]服务器唯一ID,默认是1,一般取IP最后一段
    server-id=153
    
    lower_case_table_names=1
    
    # Remove leading # and set to the amount of RAM for the most important data
    # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
    # innodb_buffer_pool_size = 128M
    #
    # Remove leading # to turn on a very important data integrity option: logging
    # changes to the binary log between backups.
    # log_bin
    #
    # Remove leading # to set options mainly useful for reporting servers.
    # The server defaults are faster for transactions and fast SELECTs.
    # Adjust sizes as needed, experiment to find the optimal values.
    # join_buffer_size = 128M
    # sort_buffer_size = 2M
    # read_rnd_buffer_size = 2M
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    如果找不到my.cnf文件,copy一个: cp /usr/share/mysql/my-default.cnf /etc/my.cnf
    注意:Linux 下部署安装 MySQL,默认不忍略表名大小写,需要手动到/etc/my.cnf 下配置
    lower_case_table_names=1 使 Linux 环境下 MySQL 忍略表名大小写,否则使用 MyCAT 的时候会提示找不到
    表的错误!

    解压复制文件

    我这里将 mycat 放到“/usr/local/mycat/”目录下,你可以根据自己的需要选择合适的目录

    tar -zxvf Mycat-server-1.5.1-RELEASE-20160509173344-linux.tar.gz
    cp -r  mycat /usr/local/mycat
    cd /usr/local/mycat/
    chmod +x *
    chmod +x 命令是给文件添加可执行权限

    需要再装一台Mycat?直接用命令把文件复制过去:

    scp -r /usr/local/mycat root@192.168.0.153:/usr/local/

    配置环境变量

    vi /etc/profile

    在文件末尾添加一行:
    export MYCAT_HOME=/usr/local/mycat
    使修改生效:
    source /etc/profile
    测试是否生效:
    echo $MYCAT_HOME

    配置主机名映射

    vi /etc/hosts

    在文件中添加你的数据节点MySQL的IP映射:
    192.168.0.151 sam_server_1
    192.168.0.153 sam_server_2

    配置schema

    vi /usr/local/mycat/conf/schema.xml

    参考我的配置吧,我从官网下载的Release版本的里面带的文件有好多错误,我修改了很长时间才能用。

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://org.opencloudb/" >
    	<!-- schema 中可以有多个table节点,列几个在Navicat中就能看到几个,库里有这里没有的话客户端中也看不到 -->
    	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
    		<table name="travelrecord" dataNode="dn1,dn2" rule="auto-sharding-long" />
    		<table name="company" primaryKey="ID" dataNode="dn2,dn1" rule="mod-long"/>
    		<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
    		<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" dataHost="sam_server_1" database="db1" />
    	<dataNode name="dn2" dataHost="sam_server_2" database="db2" />
    	<!-- 节点主机信息 -->
    	<dataHost name="sam_server_1" 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.0.151:3306" user="root" password="password">
    			<!-- 指定读取数据的主机,可以有多个 -->
    			<readHost host="hostS1" url="192.168.0.152:3306" user="root" password="password" />
    		</writeHost>
    	</dataHost>
    	
    	<dataHost name="sam_server_2" maxCon="1000" minCon="10" balance="0"
    		writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		
    		<writeHost host="hostM2" url="192.168.0.153:3306" user="root" password="password">
    			<!-- can have multi read hosts -->
    			<readHost host="hostS2" url="192.168.0.154:3306" user="root" password="password" />
    		</writeHost>
    	</dataHost>
    </mycat:schema>
    
    这里的用户密码是MySQL的远程登录用户名密码。

    配置用户

    vi /usr/local/mycat/conf/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://org.opencloudb/">
    	<system>
    	<property name="defaultSqlParser">druidparser</property>
          <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
    	<!-- <property name="processorBufferChunk">40960</property> -->
    	<!-- 
    	<property name="processors">1</property> 
    	<property name="processorExecutor">32</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="mutiNodeLimitType">1</property> 0:开启小数量级(默认) ;1:开启亿级数据排序
    	    	<property name="mutiNodePatchSize">100</property> 亿级数量排序批量
    			<property name="processors">32</property> <property name="processorExecutor">32</property> 
    			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
    			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
    			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
    	</system>
    	<user name="test">
    		<property name="password">test</property>
    		<property name="schemas">TESTDB</property>
    	</user>
    
    	<user name="mycat">
    		<property name="password">123456</property>
    		<property name="schemas">TESTDB</property>
    		<property name="readOnly">false</property>
    	</user>
    	<!-- 
    	<quarantine> 
    	   <whitehost>
    	      <host host="127.0.0.1" user="mycat"/>
    	      <host host="127.0.0.2" user="mycat"/>
    	   </whitehost>
           <blacklist check="false"></blacklist>
    	</quarantine>
    	-->
    
    </mycat:server>
    这里配置的是连接Mycat的用户,密码是明文的,schemas对应schema.xml文件中的schema节点。

    创建数据库

    在每个数据节点MySQL上创建分库,数据将会根据你指定的策略分配保存到不同的节点上。

    这个要单独连接到每个MySQL上去创建,创建的数据库名称对应schema.xml文件中指定的名称,不做这一步的话客户端连接上操作的时候会不响应卡死。

    启动服务

    经过以上几个步骤的配置,就可以到/usr/local/Mycat/bin 目录下执行:
    ./mycat start
    即可启动 mycat 服务!

    注:mycat 支持的命令{ console | start | stop | restart | status | dump }

    可以通过以下命令查看服务是否启动成功:

    ./mycat status

    如果启动失败了,可以查看以下文件的内容,分析具体原因:

    /usr/local/mycat/logs/wrapper.log

    启动成功了,你应该已经知道怎么做了,恭喜!

    结束语

    日志是最好的朋友,不明白出了什么问题,有日志的话就去查看它,没有比它更精确直接的了;

    即使官网提供的帮助也是很杂乱,各种版本,我是根据几个版本来完成的。

    对于用惯了Windows的图形配置界面的小伙伴,开始的时候会感觉比较吃力的。


    参考:

    Mycat官网

    MyCat:开源分布式数据库中间件

    mycat安装入门(两节点)





沪ICP备19023445号-2号
友情链接