zoukankan      html  css  js  c++  java
  • 构建读写分离的数据库集群

    4.1实战案例——构建读写分离的数据库集群

    使用Mycat作为数据库中间件服务构建读写分离的数据库集群

    使用一台虚拟机部署Mycat数据库中间件服务,将用户提交的读写操作识别分发给相应的数据库

    节点。这样将用户的访问操作、数据库的读与写操作分给3台主机,只有数据库集群的主节点接

    收增、删、改SQL语句,从节点接收查询语句,分担了主节点的查询压力

    基础准备

    使用CentOS 7.2系统,创建3台虚拟机进行实验。

    其中2台虚拟机db1和db2部署MariaDB数据库服务,搭建主从数据库集群;一台作为主节点,负

    责写入数据库信息;另一台作为从节点,负责读取数据库信息。

    基础环境配置

    修改主机名

    # hostnamectl set-hostname mycat

    # hostnamectl set-hostname db1

    # hostnamectl set-hostname db2

    修改完之后使命令生效

    # bash

    编辑hosts文件(mycat,db1,db2)

    # vi /etc/hosts

    安装JDK环境(mycat)

    安装java环境

    # yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

    查看java版本

    # java -version

    部署MariaDB主从数据库集群服务

    安装MariaDB服务(db1和db2)

    # yum install -y mariadb mariadb-server

    启动服务并设置开机自启

    # systemctl start mariadb

    # systemctl enable mariadb

    初始化MariaDB数据库(db1和db2)

    初始化MariaDB数据库,并设置MariaDB数据库root访问用户的密码为123456

    # mysql_secure_installation

    还没有设置根密码,直接回车

    设置根密码,yes

    删除匿名用户,yes

    不允许远程登陆,no

    删除测试数据库并访问它,yes

    现在重新加载特权表,yes

     

    配置数据库集群主节点(db1)

    编辑配置文件

    # vi /etc/my.cnf

     

     log_bin = mysql-bin   记录操作日志

     binlog_ignore_db = mysql    不同步MySQL系统数据库

     server_id = 12    数据库集群中的每个节点ip都要不同,一般使用ip最后段的数字

    编辑完成后重启服务

    # systemctl restart mariadb

    关闭防火墙

    # systemctl stop firewalld

    开放数据库权限(db1)

    登录数据库

    # mysql -uroot -p123456

    授权在任何客户端机器上可以以root用户登录到数据库

    > grant all privileges  on  *.*  to root@'%' identified by "123456";

    创建一个用户,并赋予从节点同步主节点数据库的权限

    > grant replication slave on  *.*  to 'user'@'db2' identified by '123456';

    配置同步(db2)

    登录数据库

    # mysql -uroot -p123456

    配置连接信息

    >  change master to master_host='db1',master_user='user',master_password='123456';

    开启从服务

    > start slave;

    查看从服务状态

    > show slave statusG;

    验证主从数据库的同步功能

    创建库表数据(db1)

    创建库test

    > create database test;

    在库test中创建表company

    > use test

    > create table company(id int not null primary key,name varchar(50),addr varchar(255));

    插入表数据

    > insert into company values(1,"facebook","usa");

    查看表数据

    > select * from company;

    查询是否同步(db2)

    查询数据库

    > show databases;

    查询表company

    > select * from test.company;

    部署mycat读写分离中间件服务

    安装mycat服务(mycat)

    将软件包上传到mycat的/root目录下,将软件包解压

    # tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

    赋予权限

    # chown -R 777 /usr/local/mycat/

    添加系统变量,并生效变量

    # echo export MYCAT_HOME=/usr/local/mycat/ >> /etc/profile

    # source /etc/profile

    编辑逻辑库配置文件(mycat)

    在文件中定义一个逻辑库

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

    <?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>

    保存并退出

    注释:

    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

    修改配置文件权限(mycat)

    修改schema.xml的用户权限

    # chown root:root /usr/local/mycat/conf/schema.xml

    编辑访问用户(mycat)

    修改root用户的访问密码与数据库

    # vi /usr/local/mycat/conf/server.xml

    修改内容

    删除内容

    <user name="user">

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

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

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

    </user>

    保存并退出

    启动服务(mycat)

    启动数据库中间件服务

    # /bin/bash /usr/local/mycat/bin/mycat start

    查看虚拟机端口开放情况(8066和9066)

    # netstat -ntpl

    验证数据库集群服务读写分离功能

    查询数据库信息(mycat)

    安装服务

    # yum install -y mariadb mariadb-client

    登录数据库

    # mysql -h127.0.0.1 -P8066 -uroot -p123456

    查看逻辑库

    > show databases;

    > use USERDB

    > show tables;

    查看表company

    > select * from company;

    添加表数据(mycat)

    在表中添加一条数据

    > insert into company values(2,"bastetball","usa");

    查看表信息

    > select * from company;

    验证读写操作分离(mycat)

    查询对数据库读写操作的分离信息

    # mysql -h127.0.0.1 -P9066 -uroot -p123456 -e 'show  @@datasource;'

  • 相关阅读:
    十 mybatis逆向工程
    九 spring和mybatis整合
    八 mybatis查询缓存(一级缓存,二级缓存)和ehcache整合
    七 mybatis的延迟加载
    利用游标循环删除数据
    oracle11g空表导不出来的解决办法
    关闭启动数据库AWR功能
    数据库维护操作
    开启和关闭oracle数据库中的审计功能
    Oracle序列
  • 原文地址:https://www.cnblogs.com/tui463/p/12411301.html
Copyright © 2011-2022 走看看