IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> MySQL集群Cluster -> 正文阅读

[系统运维]MySQL集群Cluster

一、MySQL主从复制

1、服务性能扩展方式

向上扩展,垂直扩展
向外扩展,横向扩展

2、MySQL的扩展

2.1、读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),
而从数据库处理SELECT查询操作。
数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

MySQL 读写分离原理
读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性操作,而从数据库处理 select 查询。数据库复制被用来把主数据库上事务性操作导致的变更同步到集群中的从数据库。
目前较为常见的 MySQL 读写分离分为以下两种:
1)基于程序代码内部实现
在代码中根据 select、insert 进行路由分类,这类方法也是目前生产环境应用最广泛的。
优点是性能较好,因为在程序代码中实现,不需要增加额外的设备为硬件开支;缺点是需要开发人员来实现,运维人员无从下手。
但是并不是所有的应用都适合在程序代码中实现读写分离,像一些大型复杂的Java应用,如果在程序代码中实现读写分离对代码改动就较大。

2)基于中间代理层实现
代理一般位于客户端和服务器之间,代理服务器接到客户端请求后通过判断后转发到后端数据库,有以下代表性程序。

2.2、复制

每个节点都有相同的数据集,向外扩展,基于二进制日志的单向复制

  • 数据分布
  • 负载均衡读操作
  • 备份
  • 高可用和故障切换
  • MySQL升级测试

2.3、主从复制与读写分离

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份。

3、主从复制原理 重要

从库生成两个线程,一个I/O线程,一个SQL线程;
i/o线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一
致;

3.1、主从复制相关线程

主节点:
dump Thread:为每个Slave的I/O Thread启动一个dump线程,用于向其发送binary log events
从节点:
I/O Thread:向Master请求二进制日志事件,并保存于中继日志中
SQL Thread:从中继日志中读取日志事件,在本地完成重放

3.2、 跟复制功能相关的文件:

master.info:用于保存slave连接至master时的相关信息,例如账号、密码、服务器地址等
relay-log.info:保存在当前slave节点上已经复制的当前二进制日志和本地relay log日志的对应关系
mariadb-relay-bin.00000#: 中继日志,保存从主节点复制过来的二进制日志,本质就是二进制日志

3.3、MySQL 主从复制延迟

  1. master服务器高并发,形成大量事务
  2. 网络延迟
  3. 主从硬件设备导致
    cpu主频、内存io、硬盘io
  4. 本来就不是同步复制、而是异步复制
    从库优化Mysql参数。比如增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。
    从库使用高性能主机。包括cpu强悍、内存加大。避免使用虚拟云主机,使用物理主机,这样提升了i/o面性。
    从库使用SSD磁盘
    网络优化,避免跨机房实现同步

二、实际操作

1.环境配置

master服务器: 192.168.133.75 mysql5.7
slave1服务器: 192.168.133.50 mysql5.7
slave2服务器: 192.168.133.100 mysql5.7
Amoeba服务器: 192.168.133.136 jdk1.6、Amoeba
客户端 服务器: 192.168.133.99 mysql

2.初始环境准备

systemctl stop firewalld
setenforce 0

3.搭建时间同步:

3.1 主服务器设置

[root@master ~]# yum install ntp -y
[root@master ~]# vim /etc/ntp.conf

在这里插入图片描述
改成
在这里插入图片描述

[root@master ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service

3.2 从服务器设置

[root@localhost mysql]# yum install ntpdate -y
[root@localhost mysql]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
[root@localhost mysql]# /usr/sbin/ntpdate 192.168.133.75
 4 Dec 22:27:16 ntpdate[60067]: the NTP socket is in use, exiting
 [root@localhost mysql]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

在这里插入图片描述

[root@localhost mysql]# systemctl start crond

4.配置主从

4.1 主服务配置

[root@master ~]# vim /etc/my.cnf

在这里插入图片描述

[root@master ~]# systemctl restart mysqld.service 
[root@master ~]# mysql -uroot -pzy44123
(root@localhost) [(none)]> grant replication slave on *.* to 'zy'@'192.168.133.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
(root@localhost) [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [hellodb]> show master status;

在这里插入图片描述

4.2从服务器配置

[root@localhost mysql]# vim /etc/my.cnf

在这里插入图片描述
id号按主从顺序依次类推

[root@localhost mysql]# systemctl restart mysqld.service
[root@localhost mysql]# mysql -uroot -p
(root@localhost) [(none)]> help change master to

按这个写
在这里插入图片描述

(root@localhost) [(none)]> change master to master_host='192.168.133.75',master_user='zy',master_password='123456',master_log_file='mysqlbk-binter_lo.000002',master_log_pos=10882;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
(root@localhost) [(none)]> start slave;                             开启从服务功能
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [(none)]> show slave status\G

在这里插入图片描述
验证
查看主服务器上现有数据库
在这里插入图片描述
新建一个数据库

(root@localhost) [hellodb]> create database class;
Query OK, 1 row affected (0.00 sec)

再次查看数据库
在这里插入图片描述

从服务器上查看数据库,发现已经有了刚刚在主服务器上建立的新库‘class’
在这里插入图片描述

5、搭建Amoeba 实现读写分离

5.1、安装 Java 环境

因为 Amoeba 基于是 jdk1.5 开发的,所以官方推荐使用 jdk1.5 或 1.6 版本,高版本不建议使用。

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# cd /opt

把软件包拖入系统
在这里插入图片描述

[root@localhost opt]# cp jdk-6u14-linux-x64.bin /usr/local/
[root@localhost opt]# chmod +x /usr/local/jdk-6u14-linux-x64.bin
[root@localhost opt]# cd /usr/local/
[root@localhost local]# ./jdk-6u14-linux-x64.bin

拖到最后,输入yes
在这里插入图片描述

[root@localhost local]# mv jdk1.6.0_14/ jdk1.6
[root@localhost local]# vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.6
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/lib:$JAVA_HOME/jre/bin/:$PATH:$HOME/bin
export AMOEBA_HOME=/usr/local/amoeba
export PATH=$PATH:$AMOEBA_HOME/bin

最后添上如下命令
在这里插入图片描述

[root@localhost local]# source /etc/profile

5.2、安装amoeba

[root@localhost local]# mkdir /usr/local/amoeba
[root@localhost local]# cd /opt
[root@localhost opt]# tar zxvf amoeba-mysql-binary-2.2.0.tar.gz -C /usr/local/amoeba
[root@localhost opt]# chmod -R 755 /usr/local/amoeba/
[root@localhost opt]# /usr/local/amoeba/bin/amoeba

在这里插入图片描述

5.3、配置 Amoeba读写分离,两个 Slave 读负载均衡

#先在Master、Slave1、Slave2 的mysql上开放权限给 Amoeba 访问

grant all on *.* to test@'192.168.133.%' identified by '654321';
flush privileges;

5.4、修改amoeba配置

[root@localhost opt]# cd /usr/local/amoeba/conf/
[root@localhost conf]# cp amoeba.xml amoeba.xml.bak
[root@localhost conf]# vim amoeba.xml

在这里插入图片描述
改成
在这里插入图片描述
在这里插入图片描述
改成
在这里插入图片描述

[root@localhost conf]# vim dbServers.xm

在这里插入图片描述
注释
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上下2行删除,添加密码
在这里插入图片描述
在这里插入图片描述
改name=master 并改成主服务器地址
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@localhost conf]#amoeba start &
#开启服务

在这里插入图片描述
可通过查询端口或者服务看是否配置成功
在这里插入图片描述
在这里插入图片描述
这时开启客户机
客户机上装有mysql
并且关闭防火墙

[root@localhost mysql]# mysql -uamoeba -p654321 -h 192.168.133.136 -P8066
                                用户名     密码     Amoeba服务器地址     端口号

在这里插入图片描述

5.5、测试读写分离

先关闭从服务器上的从的功能

(root@localhost) [(none)]>  stop slave;
Query OK, 0 rows affected (0.00 sec)

slave1上建立第一个数据
在这里插入图片描述
slave2上建立第一个数据
在这里插入图片描述
这时在客户机上查看表格,数据库是轮巡着显示出来的
在这里插入图片描述

5.6、测试写的能力

三台主从服务器都要开启general日志功能
在这里插入图片描述

(root@localhost) [class]> set global general_log=1;
Query OK, 0 rows affected (0.00 sec)

在主服务器和从服务器上找到该文件
在这里插入图片描述
在客户机上新添一条数据
在这里插入图片描述
这时在主服务器的日志里就有了新添的数据
在这里插入图片描述
而同时从服务器上啥数据都没有写入
在这里插入图片描述

三、中间件mycat

1、应用场景

Mycat适用的场景很丰富,以下是几个典型的应用场景
单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化报表系统,借助于Mycat的分表能力,处理大规模报表的统计
替代Hbase,分析大数据
作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择

2、优势

一个彻底开源的,面向企业应用开发的大数据库集群
支持事务、ACID、可以替代MySQL的加强版数据库
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
一个新颖的数据库中间件产品

3、模拟架构

3.1、环境配置

master服务器: 192.168.133.75 mysql5.7
slave1服务器: 192.168.133.50 mysql5.7
Amoeba服务器: 192.168.133.25 java mycat
客户机: 192.168.133.99 mysql5.7

3.2、主mysql服务器配置

[root@localhost ~]#vim /etc/my.cnf

检查是否有以下命令,如没有请添加

server-id = 1
log-bin=master-bin
binlog_format=MIXED
log-slave-updates=true

进入数据库

grant replication slave on *.* to 'myslave'@'192.168.91.%' identified by '123456';
flush privileges;
show master status;

在这里插入图片描述

3.3 mysql从服务器配置

[root@localhost ~]#vim /etc/my.cnf

检查是否有以下命令,没有请添加

server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
[root@localhost ~]# systemctl restart mysqld.service 
[root@localhost ~]#mysql -uroot -p123123
(root@localhost) [(none)]> change master to master_host='192.168.133.75',master_user='zy',master_password='123456',master_log_file='mysqlbk-bin.000002',master_log_pos=599;
Query OK, 0 rows affected, 2 warnings (0.01 sec)
(root@localhost) [(none)]> start slave;
Query OK, 0 rows affected (0.00 sec)
(root@localhost) [(none)]> show slave status\G

在这里插入图片描述

3.4、安装mycat服务器主机

[root@localhost ~]# systemctl stop firewalld.service 
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install java -y
[root@localhost ~]# mkdir /apps
[root@localhost ~]# wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz                可能有更高版本,不过这个版本可以做成功
[root@localhost ~]# tar zxvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps/
[root@localhost ~]# echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
[root@localhost ~]# source /etc/profile.d/mycat.sh
[root@localhost ~]# mycat start
Starting Mycat-server...
[root@localhost ~]# ll /apps/mycat/logs/
[root@localhost ~]# tail -f /apps/mycat/logs/wrapper.log 

在这里插入图片描述
在这里插入图片描述

3.5、第一次在客户机上测试

[root@localhost mysql]# mysql -uroot -p123456 -h 192.168.133.25 -P8066   这里密码初始为123456   需要加端口

进入数据库中可以看到所有的表数据库都被隐藏起来了
在这里插入图片描述

3.6、修改 mycat 配置文件

[root@localhost ~]# vim /apps/mycat/conf/server.xml

在这里插入图片描述

在这里插入图片描述
50行左右修改删除
在这里插入图片描述
在这里插入图片描述
110行这里因为试验我们暂时不改,实际环境中还是要改的

在这里插入图片描述

[root@localhost conf]# vim schema.xml        

删除所有内容重新写如下内容

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
        <dataNode name="dn1" dataHost="localhost1" database="hellodb" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="host1" url="192.168.133.75:3306" user="root" password="123456">
                 <readHost host="host2" url="192.168.133.50:3306" user="root" password="123456"/>

                </writeHost>
        </dataHost>
</mycat:schema>
[root@localhost ~]# mycat restart                          重启mycat
Stopping Mycat-server...
Mycat-server was not running.
Starting Mycat-server...

在这里插入图片描述

[root@localhost conf]# cat /apps/mycat/logs/wrapper.log       查看日志

在这里插入图片描述

3.7、主服务器上建立一个用户

(root@localhost) [(none)]> GRANT ALL ON *.* TO 'root'@'192.168.133.%' IDENTIFIED BY '123456' ;
Query OK, 0 rows affected, 1 warning (0.00 sec)

到从服务器上查看用户表就多了一个我们刚刚建立的用户;
在这里插入图片描述

3.8、客户端测试

[root@localhost ~]# mysql -uroot -p123456 -h 192.168.133.25   这时可以不加端口直接进入数据库了
(root@192.168.133.25) [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)
(root@192.168.133.25) [(none)]> use TESTDB;
Database changed
(root@192.168.133.25) [TESTDB]> SHOW TABLES;                        打开表显示的就是hellodb数据库里的表

在这里插入图片描述

(root@localhost) [mysql]> select @@server_id;

在这里插入图片描述

(root@localhost) [hellodb]> set global general_log=1;      主服务器打开日志
Query OK, 0 rows affected (0.00 sec)

(root@localhost) [mysql]> set global general_log=1;          从服务器打开日志

Query OK, 0 rows affected (0.00 sec)

主从服务器都输入监控数据库的命令

[root@localhost ~]# tail -f /usr/local/mysql/data/mysql_general.log 

当我们在客户机上往表里增加一条数据时
在这里插入图片描述
主服务日志上就只有写入记录
在这里插入图片描述
而从服务器上只有查询记录以及主从复制的记录,并没有直接写入的记录
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-12-06 15:37:23  更:2021-12-06 15:38:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:51:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码