集群架构设计的三个维度:可用性、扩展性、一致性
所谓mysql集群就是把多台数据库集成在一起提供数据库服务。
集群的目的:
负载均衡:解决高并发
高可用HA:服务可用性
远程备灾:数据有效性
对于数据库之上的业务层来说,基于 MySQL 的主从复制集群,单点写入 Master ,在 event 同步到 Slave 后,读逻辑可以从任何一个 Slave 读取数据,以读写分离的方式,大大降低 Master 的运行负载,同时提升了 Slave 的资源利用。
yum install mysql-community-server --downloadonly
find / -iname “mysql” 查找在哪个位置,在/var/cache/dnf/下
解释:从mysql官网下载rpm,yum下载,为了节约时间,可以只下载先不安装,然后把下载的安装包传到其他服务器去安装下一台数据库。
出现这些软件包
[root@localhost packages]# ll
total 59700
-rw-r--r--. 1 root root 3669387 Dec 17 01:27 mysql-community-client-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 1429852 Dec 17 01:27 mysql-community-client-plugins-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 570718 Dec 17 01:27 mysql-community-common-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 2381873 Dec 17 01:28 mysql-community-icu-data-files-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 1518324 Dec 17 01:28 mysql-community-libs-8.0.35-1.el9.x86_64.rpm
-rw-r--r--. 1 root root 51552173 Dec 17 01:29 mysql-community-server-8.0.35-1.el9.x86_64.rpm
[root@localhost packages]# pwd
/var/cache/dnf/mysql80-community-22d3d3ecd3d92106/packages
[root@localhost packages]# scp ./* root@192.168.85.134:~/
传到对方服务器去安装
[root@localhost packages]# yum install *.rpm 安装mysql
自此两台数据库安装完成。
[root@localhost ~]# vim /etc/hosts
192.168.85.133 master
192.168.85.134 slave
[root@localhost ~]# scp /etc/hosts 192.168.85.134:/etc/hosts
给主服务器创建库表,插入一点数据。
mysql> create database master;
mysql> create table master.master_table(
-> name varchar(10));
mysql> insert into master.master_table values("111");
主服务器开启二进制日志并设置好id,后来用来在集群中区分数据库。
[root@localhost ~]# vim /etc/my.cnf
log_bin
server-id=1
[root@localhost ~]# systemctl restart mysqld
创建复制用户(从服务器要想从主服务器去拷贝数据是需要身份的):
mysql> create user ‘rep’@‘192.168.85.%’ identified by ‘Liang@123’;
mysql> grant replication slave,replication client on . to
‘rep’@‘192.168.85.%’;
备份Master数据库中的数据:
[root@localhost ~]# mysqldump -uroot -pLiang@123 --all-databases --single-transaction --source-data=2 --flush-logs > date +%F
-mysql-all.sql
在这个备份的过程会产生新的数据,去模拟一下插入数据,,后面用日志备份。
注意:关闭防火墙和selinux
在从服务器测试是否能连接到主服务器的数据库:
[root@localhost ~]# mysql -urep -pLiang@123 -h master
成功
设置数据库序号,在集群中区分数据库
[root@localhost ~]# vim /etc/my.cnf
log_bin
server-id=2
[root@localhost ~]# systemctl restart mysqld
手动同步数据:
mysql>set sql_log_bin=0 设置临时二进制文件不启用
mysql> source /root/2023-12-17-mysql-all.sql; 还原数据库在集群开始之前的数据
开始设置主服务:
mysql> change master to
master_host=‘master’,master_user=‘rep’,master_password=‘Liang@123’,master_log_file=‘localhost-bin.000003’,master_log_pos=157;
这条命令配置好后,从服务器就会主动向主服务器去拷贝新数据。
启动从设备:
mysql> start slave;
这个时候这个实验算是完成了,主服务的数据一旦发生改变,从服务器的数据库也会更着更新😁
查看启动状态:
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
都是yes就非常欧克。
这种不需要手动去指定从服务器学习新增主服务器的二进制数据位置,而是自动协商。
跟上面的实验差不多。
区别就是:
主从服务器都需要启动二进制日志,服务器ID,GTID
vim /etc/my.cnf
log_bin
server-id=1
gtid_mode=ON
enforce_gtid_consistency=1
从服务器也是一样,只是修改哈server-id就行
然后在从服务器中修改这个
mysql> change master to
master_host='master',master_user='rep',master_password='Liang@123',master_auto_position=1;
mysql> start slave;
这个实验就完成了,跟上个实验差不多。