查看“构建读写分离的数据库集群”的源代码
←
构建读写分离的数据库集群
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==规划节点== 使用Mycat作为数据库中间件服务构建读写分离的数据库集群,节点规划见表4-1-1。 表4-1-1 节点规划 <nowiki>IP 主机名 节点 172.16.51.6 mycat Mycat中间件服务节点 172.16.51.18 db1 MariaDB数据库集群主节点 172.16.51.30 db2 MariaDB数据库集群从节点</nowiki> ==基础准备== 使用CentOS 7.2系统,flavor使用2vCPU/4G内存/50G硬盘,创建3台虚拟机进行实验。 其中2台虚拟机db1和db2部署MariaDB数据库服务,搭建主从数据库集群;一台作为主节点,负责写入数据库信息;另一台作为从节点,负责读取数据库信息。 使用一台虚拟机部署Mycat数据库中间件服务,将用户提交的读写操作识别分发给相应的数据库节点。这样将用户的访问操作、数据库的读与写操作分给3台主机,只有数据库集群的主节点接收增、删、改SQL语句,从节点接收查询语句,分担了主节点的查询压力。 Yum源使用提供的gpmall-repo文件夹作为本地源,Mycat组件使用提供的Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz压缩包安装。 ===修改主机名=== 使用hostnamectl命令修改3台主机的主机名。 Mycat节点修改主机名命令: <nowiki>[root@localhost ~]# hostnamectl set-hostname mycat [root@localhost ~]# bash [root@mycat ~]#</nowiki> db1节点修改主机名命令: <nowiki>[root@localhost ~]# hostnamectl set-hostname db1 [root@localhost ~]# bash [root@db1 ~]#</nowiki> db2节点修改主机名命令: <nowiki>[root@localhost ~]# hostnamectl set-hostname db2 [root@localhost ~]# bash [root@db2 ~]#</nowiki> ===编辑hosts文件=== 3台集群虚拟机的/etc/hosts文件配置部分: [root@mycat ~]# cat /etc/hosts <nowiki>127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.51.6 mycat 172.16.51.18 db1 172.16.51.30 db2</nowiki> ===配置yum安装源=== 数据库集群需要安装MariaDB数据库服务,需要给集群虚拟机配置Yum安装源文件,使用提供的gpmall-repo文件上传至3个虚拟机的/opt目录下,设置本地Yum源。 首先将3个节点/etc/yum.repo.d目录下的文件移动到/media下,命令如下: mv /etc/yum.repos.d/* /media/ 3台集群虚拟机的Yum安装源文件配置部分: cat /etc/yum.repos.d/local.repo <nowiki>[mariadb] name=mariadb baseurl=file:///opt/gpmall-repo gpgcheck=0 enabled=1</nowiki> ===安装JDK环境=== 部署Mycat中间件服务需要先部署JDK 1.7或以上版本的JDK软件环境,这里部署JDK 1.8版本。 Mycat节点安装Java环境: yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel [root@mall ~]# java -version <nowiki>openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_222-b10) OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)</nowiki> ==部署MariaDB主从数据库集群服务== 可参考[[部署MariaDB主从数据库集群服务]] ==部署Mycat读写分离中间件服务== 部署Mycat读写分离中间件服务 ===安装Mycat服务=== 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中。赋予解压后的Mycat目录权限。 [root@mycat ~]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/ [root@mycat ~]# chown -R 777 /usr/local/mycat/ 在/etc/profile系统变量文件中添加Mycat服务的系统变量,并生效变量。 [root@mycat ~]# echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile [root@mycat ~]# source /etc/profile ===编辑Mycat的逻辑库配置文件=== 配置Mycat服务读写分离的schema.xml配置文件在/usr/local/mycat/conf/目录下,可以在文件中定义一个逻辑库,使用户可以通过Mycat服务管理该逻辑库对应的MariaDB数据库。在这里定义一个逻辑库schema,name为USERDB;该逻辑库USERDB对应数据库database为test(在部署主从数据库时已安装);设置数据库写入节点为主节点db1;设置数据库读取节点为从节点db2。 (可以直接删除原来schema.xml的内容,替换为如下。) 注意:IP需要修改成实际的IP地址。 [root@mycat ~]# cat /usr/local/mycat/conf/schema.xml <nowiki><?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="USERDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1"></schema> <dataNode name="dn1" dataHost="localhost1" database="test" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" dbType="mysql" dbDriver="native" writeType="0" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="172.16.51.18:3306" user="root" password="123456"> <readHost host="hostS1" url="172.16.51.30:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema></nowiki> 代码说明: *sqlMaxLimit:配置默认查询数量。 *database:为真实数据库名。 *balance="0":不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。 * balance="1":全部的readHost与stand by writeHost参与select语句的负载均衡,简单来说,当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2、S1、S2都参与select语句的负载均衡。 *balance="2":所有读操作都随机的在writeHost、readhost上分发。 *balance="3":所有读请求随机地分发到wiriterHost对应的readhost执行,writerHost不负担读压力,注意balance=3只在1.4及其以后版本有,1.3版本没有。 *writeType="0":所有写操作发送到配置的第一个writeHost,第一个挂了需要切换到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件dnindex.properties中。 *writeType="1":所有写操作都随机的发送到配置的writeHost。 ===修改配置文件权限=== 修改schema.xml的用户权限,命令如下: [root@mycat ~]# chown root:root /usr/local/mycat/conf/schema.xml ===编辑mycat的访问用户=== 修改/usr/local/mycat/conf/目录下的server.xml文件,修改root用户的访问密码与数据库,密码设置为123456,访问Mycat的逻辑库为USERDB,命令如下。 [root@mycat ~]# cat /usr/local/mycat/conf/server.xml 在配置文件的最后部分,修改如下字段 <nowiki><user name="root"> <property name="password">123456</property> <property name="schemas">USERDB</property> </user></nowiki> 然后删除如下几行: <nowiki><user name="user"> <property name="password">user</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> </user></nowiki> 保存并退出server.xml配置文件。 ===启动Mycat服务=== 通过命令启动Mycat数据库中间件服务。 [root@mycat ~]# /bin/bash /usr/local/mycat/bin/mycat start 启动后使用netstat -ntpl命令查看虚拟机端口开放情况,如果有开放8066和9066端口,则表示Mycat服务开启成功。端口查询情况类似如下所示。 [root@mycat ~]# netstat -ntpl <nowiki>Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 764/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1027/master tcp 0 0 127.0.0.1:32000 0.0.0.0:* LISTEN 1590/java tcp6 0 0 :::9066 :::* LISTEN 1590/java tcp6 0 0 :::38794 :::* LISTEN 1590/java tcp6 0 0 :::22 :::* LISTEN 764/sshd tcp6 0 0 ::1:25 :::* LISTEN 1027/master tcp6 0 0 :::45086 :::* LISTEN 1590/java tcp6 0 0 :::1984 :::* LISTEN 1590/java tcp6 0 0 :::8066 :::* LISTEN 1590/java</nowiki> ==验证数据库集群服务读写分离功能== ===用Mycat服务查询数据库信息=== 先在Mycat虚拟机上使用Yum安装mariadb-client服务。 [root@mycat ~]# yum install -y MariaDB-client 在Mycat虚拟机上使用mysql命令查看Mycat服务的逻辑库USERDB,因为Mycat的逻辑库USERDB对应数据库test(在部署主从数据库时已安装),所以可以查看库中已经创建的表company。命令如下。 [root@mycat ~]# mysql -h127.0.0.1 -P8066 -uroot -p123456 <nowiki>Welcome to the MariaDB monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MySQL [(none)]> show databases; +----------+ | DATABASE | +----------+ | USERDB |us +----------+ 1 row in set (0.001 sec) MySQL [(none)]> use USERDB Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MySQL [USERDB]> show tables; +----------------+ | Tables_in_test | +----------------+ | company | +----------------+ 1 row in set (0.003 sec) MySQL [USERDB]> select * from company; +----+----------+------+ | id | name | addr | +----+----------+------+ | 1 | facebook | usa | +----+----------+------+ 1 row in set (0.005 sec)</nowiki> ===用Mycat服务添加表数据=== 在Mycat虚拟机上使用mysql命令对表company添加一条数据(2,"basketball","usa"),添加完毕后查看表信息。命令如下。 MySQL [USERDB]> insert into company values(2,"bastetball","usa"); Query OK, 1 row affected (0.050 sec) MySQL [USERDB]> select * from company; <nowiki>+----+------------+------+ | id | name | addr | +----+------------+------+ | 1 | facebook | usa | | 2 | bastetball | usa | +----+------------+------+ 2 rows in set (0.002 sec)</nowiki> ===验证Mycat服务对数据库读写操作分离=== 在Mycat虚拟机节点使用mysql命令,通过9066端口查询对数据库读写操作的分离信息。可以看到所有的写入操作WRITE_LOAD数都在db1主数据库节点上,所有的读取操作READ_LOAD数都在db2主数据库节点上。由此可见,数据库读写操作已经分离到db1和db2节点上了。命令如下。 [root@mycat ~]# mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show @@datasource;' <nowiki>+----------+--------+-------+--------------+------+------+--------+------+------ +---------+-----------+------------+ | DATANODE | NAME | TYPE | HOST | PORT | W/R | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD | +----------+--------+-------+--------------+------+------+--------+------+------ +---------+-----------+------------+ | dn1 | hostM1 | mysql | 172.30.14.18 | 3306 | W | 0 | 10 | 1000 | 174 | 0 | 1 | | dn1 | hostS1 | mysql | 172.30.14.30 | 3306 | R | 0 | 8 | 1000 | 173 | 3 | 0 | +----------+--------+-------+--------------+------+------+--------+------+------ +---------+-----------+------------+</nowiki> 至此,Mycat读写分离数据库案例完成。
返回至
构建读写分离的数据库集群
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息