构建读写分离的数据库集群

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 [email protected]‘%‘ 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 status\G;

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

创建库表数据(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;‘

原文地址:https://www.cnblogs.com/tui463/p/12411301.html

时间: 2024-07-29 01:39:07

构建读写分离的数据库集群的相关文章

windows NLB实现MSSQL读写分离--从数据库集群读负载均衡

主从模式,几乎大部分出名的数据库都支持的一种集群模式. 当Web站点的访问量上去之后,很多站点,选择读写分离,减轻主数据库的的压力.当然,一主多从也可以作用多个功能,比如备份.这里主要演示如何实现从数据库集群的读负载均衡 搭建一主三从的MSSQL集群 192.168.99.250 //主服务器 192.168.99.8 //从服务器(WIN-6S3JNU8C4TB) 192.168.99.10 //从服务器(WIN-HF1GQ5U288H) 192.168.99.11 //从服务器(WIN-EA

数据库双重负载均衡读写分离及双活集群

双重负载均衡读写分离及双活集群 ---数据库性能和容灾一体化解决方案 说明: 1. 第一重负载均衡读写分离:节点DB-A和DB-B之间负载均衡和读写分离,数据同步方式为同步模式. 2. 第二重负载均衡读写分离:节点DB-C执行报表.OLAP查询等,数据同步方式为异步模式. 3. 双活集群:两节点DB-A和DB-B构成双活集群(故障时数据零丢失.服务不停止). 4. 兼容性:客户端代码零修改,和原本单机数据库访问保持二进制兼容.

负载与读写分离图片服务器集群模型

对于绝大多数网站,图片资源是一个非常重要的元素.社区论坛里面图片相册,电子商务线上产品展示图,移动端应用图片分享功能等.都在说互联网正在处于读图时代,各大中小型网站都需要保持良好的图片处理能力.需要支持海量图片资源存储时,更加要搭建高可用负载图片服务集群支撑网站系统,保证网站上图片相关功能准确无误运行,用户对象访问页面体验流畅. 环境:四台Linux主机,一台LVS负载均衡,一台FastDFS_tracker,两台FastDFS_storage,FastDFS_client在FastDFS_tr

十四、linux-MySQL的数据库集群读写分离及高可用性、备份等

一.数据库集群及高可用性 二. 三.mysql实现读写分离 mysql实现读写分离有多种方式: 1)代码语言(php\python\java等)层面实现读写分离,找开发进行实现. 2)通过软件工具实现读写分离,例如amoeba软件 amoeba软件既可以实现负载均衡,也可以实现读写分离,就是进行服务器端压力的分离. 原文地址:https://www.cnblogs.com/dangjingwei/p/11567368.html

浅谈高性能数据库集群——读写分离

本文主要介绍高性能数据库集群读写分离相关理论,基本架构,涉及的复杂度问题以及常见解决方案. 1 读写分离概述 基本架构图: 2 适用场景 读写分离不是银弹,并不是一有性能问题就上读写分离,而是应该先优化,例如优化慢查询,调整不合理的业务逻辑,引入缓存查询等只有确定系统没有优化空间后才考虑读写分离集群 3 引入的系统复杂度问题 问题一 主从复制延迟 问题二 分配机制 如何将读写操作区分开来,然后访问不同的数据库服务器? 解决方案1 客户端程序代码封装实现 基本架构图 业界开源实现 Sharding

CentOS7+MySQL/MariaDB+Galera+HAProxy+Keepalived构建高可用数据库集群

方案优势: Galera能够实现MySQL/MariaDB数据库的主主复制和多主复制等模式,这些复制模式都是同步进行的,同步时间非常短 每一个节点都可以同时写入和读取,当某一节点发生故障时,可自动从集群中自动剔除 HAProxy能提供负载均衡和故障判断等功能解决服务器系统存在的单点故障 Keepalived能提供客户端连接数据库时使用的虚拟IP地址(VIP) 关于HAProxy的负载均衡算法 轮询方式(roundrobin):不适合用于backend为web服务器的情况,因为session.co

数据库集群之路一

最近把前端angular开发框架搭建好了,比较顺利的解决了框架,三方库,jquery以及jquery插件库的依赖和使用.对框架内部实现了控件封装,形如分页控件,排版控件,选择器控件,下拉选择控件,再到表单生命周期,动态创建组件,页面路由,模块整理,路由守卫,http拦截,sso,文件上传,过场动画等等各个节点实现了,基本完全满足现有需求功能开发,我想后面对于前端来说也就是图表,gis,websocket一类的应用结合了. 关于后端,对于一个分布式管理系统来说无外乎就是sso统一授权,webapi

docker应用-6(mysql+mycat 搭建数据库集群)

上一节,通过使用overlay网络,搭建了跨主机的docker容器集群.下面,在这个跨主机的docker容器集群环境下,搭建mysql 数据库集群. mysql主从自动备份和自动切换 从数据安全性考虑,对数据库的数据进行及时备份非常重要.mysql就提供了主从备份的机制,从数据库会非常及时的将主数据库的操作更新到从库上,从而当主数据库down掉之后,数据不会丢失:同时,也可以通过keepalived等程序来实现主库down掉之后,迅速将数据访问服务切换到从库,从而尽可能维护数据库服务的不间断运行

MySQL数据库集群-PXC方案

第1章 课程摘要课程内容的概要介绍,包括课程目标,面向用户,预备知识,课程大纲,软件与硬件环境等. 1-1 课程导学1-2 开发环境要求 第2章 创建PXC集群学习安装与创建PXC集群,为了搭建三高特点的数据库集群,我们将把两组PXC集群组建成分片,由MyCat做数据切分与读写分离,然后对MyCat做集群,用Keepalived+Haproxy实现双机热备.了解数据库的基准测试与压力测试,掌握PXC的实际性能.... 2-1 CentOS安装PerconaServer数据库2-2 安装PXC组建