关系型数据库分布式中间件 mycat 部署

关系型数据库分布式中间件 mycat 部署

本指南主要针对 mysql 数据库

1 平台需求

  • (1) 操作系统:CentOS 7.2 (1511)
  • (2) JDK:1.8(1.7以上均可)

注:安装 可使用

yum install java-1.8.0-openjdk-devel.x86_64
  • (3) mycat

下载

wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

如果链接失效,请登录 http://mycat.io 手动下载

2 安装 MySQL 节点

一共有三个 mysql 节点,分别是

IP地址         主机名 
10.20.17.129   centos-broker1 
10.20.17.139   centos-broker2 
10.20.17.149   centos-broker3 

三个节点都做如下安装:

# 禁用并停止防火墙
systemctl disable firewalld
systemctl stop firewalld

# 安装数据库

# 数据库安装
yum install mariadb mariadb-server

#配置
nano /etc/my.cnf
[mysqld]

bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
lower_case_table_names = 1 # 忽略大小写

# 启动数据库服务,并将其配置为开机自启
systemctl enable mariadb.service
systemctl start mariadb.service

# 设置root用户密码,并进行初始设置
mysql_secure_installation


# 设定初始密码为 1
mysqladmin -u root password 1
# 此时会要求你输入老的密码,第一次设定没有老密码,直接按回车就好

# 登陆数据库
mysql -u root -p1

# 创建数据库 
create database db1 character set utf8;

# 赋root远程访问权
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '1';

3 安装(Mycat节点)

mycat 节点 IP 为 10.20.17.239

# 修改 hosts 添加下列项目
nano /etc/hosts
...
10.20.17.129   centos-broker1
10.20.17.139   centos-broker2
10.20.17.149   centos-broker3
...

# 测试 ping 主机名
ping centos-broker1
ping centos-broker2
ping centos-broker3

# 解压到指定位置
cp Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz /usr/local
cd /usr/local
tar -xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
rm -rf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

# 修改 /etc/profile 加入环境变量
nano /etc/profile

MYCAT_HOME=/usr/local/mycat

# 如下:
# /etc/profile

# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc

MYCAT_HOME=/usr/local/mycat

# 刷新环境变量
source /etc/profile

4 配置 mycat

mycat 的主要配置文件存放于 /etc/local/mycat/conf 下,这里主要涉及三个配置文件,分别是 server.xml,schema.xmlrule.xml

  • server.xml 是 mycat 的系统配置

下面说明,定义了一个 mycat 的逻辑用户 root, 其密码为 123456,并拥有一个 database 为 TESTDB。


	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
	</user>

  • schema.xml 是 mycat 的系统配置

数据节点配置

定义了三个 dataNode 分别为 dn1, dn2, dn3, 分别对应 三个主机 mysql 服务器中的 db1 数据库。


	<dataNode name="dn1" dataHost="centos-broker1" database="db1" />
	<dataNode name="dn2" dataHost="centos-broker2" database="db1" />
	<dataNode name="dn3" dataHost="centos-broker3" database="db1" />

数据主机配置

下面部分是对 dataHost 的配对说明,以 centos-broker2为例子,它的writeHost中定义了centos-broker2中mysql数据库的连接配置,用户名是 root,密码是 1。


	<dataHost name="centos-broker1" maxCon="1000" minCon="10" balance="0"
			  writeType="1" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
         
        <writeHost host="hostM1" url="centos-broker1:3306" user="root" password="1">
			<!-- can have multi read hosts -->
			<!--<readHost host="hostS2" url="centos-broker1:3306" user="root" password="1" />-->
		</writeHost>

	</dataHost>
    
    
    <dataHost name="centos-broker2" maxCon="1000" minCon="10" balance="0"
			  writeType="1" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
        <writeHost host="hostM2" url="centos-broker2:3306" user="root" password="1" />
	</dataHost>
 
    
    <dataHost name="centos-broker3" maxCon="1000" minCon="10" balance="0"
			  writeType="1" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
        <writeHost host="hostM3" url="centos-broker3:3306" user="root" password="1" />
	</dataHost>

逻辑表规则配置

配置了 逻辑表 travelrecord, 对应数据节点 dn1, dn2, dn3, 使用 mod-long (取模)规则,此规则与 dataHost 数量是相关的


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

注意 rule.xml 中的配置

这是初始定义的规则,说明内容使用的方法,根据那个字段起作用。


	<tableRule name="mod-long">
		<rule>
			<columns>id</columns>
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>

真正的算法实现,要根据 dataHost 数量修改 <property name="count">3</property>


	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
		<property name="count">3</property>
	</function>

5 启动关闭 mycat


cd /etc/usr/local/mycat/bin
# 启动, 关闭可以使用 ./mycat stop
./mycat start

6 使用 navicat for mysql 访问 mycat

mycat 作为一个总 mysql 网关,管理起来背后三个 mysql 节点,此时访问 mysql 只看到了一个逻辑上的数据库和内部的逻辑表。

使用 navicat 时,配置如下:

IP: 10.20.17.239
PORT: 8066
数据库: TESTDB

mycat 中的逻辑表初始创建

在进入 navicat 后,你会看到 travelrecord 等相关 逻辑表,但是其实是不可使用的,必须进行创建。创建后,才会在 三个数据节点上创建真正的 物理表。之后,您就可以进行任意的 SQL 操作了。


CREATE TABLE `travelrecord` (
`id`  bigint(20) NOT NULL ,
`user_id`  varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,
`traveldate`  date NULL DEFAULT NULL ,
`fee`  decimal(10,0) NULL DEFAULT NULL ,
`days`  int(11) NULL DEFAULT NULL ,
PRIMARY KEY (`id`)
)

    原文作者:数据库基础
    原文地址: https://my.oschina.net/crooner/blog/839747
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞