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@local
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
连接 MySQL Cluster 集群可以通过两种方式:使用 MySQL Shell 或者使用 MySQL Connector/Net。以下是连接 MySQL Cluster 集群的步骤: ### 使用 MySQL Shell 连接 1. 打开 MySQL Shell,输入以下命令连接到 MySQL Cluster: ``` mysqlsh root@<ndb_mgmd_ip>:<ndb_mgmd_port> ``` 其中,`root` 是 MySQL 的用户名,`<ndb_mgmd_ip>` 是 MySQL Cluster Management Server 的 IP 地址,`<ndb_mgmd_port>` 是 MySQL Cluster Management Server 的端口号(默认为 1186)。 2. 输入密码登录 MySQL。 3. 输入以下命令查看 MySQL Cluster 集群节点的状态: ``` dba.getCluster().status() ``` 如果输出的信息包含了所有的 MySQL Cluster 节点,说明连接成功。 ### 使用 MySQL Connector/Net 连接 1. 在 Visual Studio 中创建一个新的 C# 项目。 2. 在项目中添加 MySQL Connector/Net。 3. 在代码中引入 MySQL Connector/Net 的命名空间: ``` using MySql.Data.MySqlClient; ``` 4. 使用以下代码连接到 MySQL Cluster: ``` string connectionString = "server=<ndb_mgmd_ip>;port=<ndb_mgmd_port>;database=<database_name>;uid=<username>;pwd=<password>"; MySqlConnection connection = new MySqlConnection(connectionString); connection.Open(); ``` 其中,`<ndb_mgmd_ip>` 是 MySQL Cluster Management Server 的 IP 地址,`<ndb_mgmd_port>` 是 MySQL Cluster Management Server 的端口号(默认为 1186),`<database_name>` 是要连接的数据库名称,`<username>` 是 MySQL 的用户名,`<password>` 是 MySQL 的密码。 5. 使用 `connection` 对象执行 SQL 查询等操作。 以上是连接 MySQL Cluster 集群的方法,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值