集群技术,一主一从的部署和原理方式
创始人
2024-09-26 00:53:24
0

集群概述

所谓集群,就是将多台服务器集中在一起,同时处理用户对服务器的请求

比如,我们现在开启的这一台mysql服务器,可以同时处理1000个用户的请求,那么我们开启两个这样的服务器,就可以同时处理2000

数据库集群之间最重要的是数据一致性

Replication

集群图示:

请添加图片描述
类型:

  • M

  • M-S

  • M-S-S…

  • M-M

  • M-M-S-S

    M表示主服务器

    S表示从服务器

    需要从主服务器备份到从服务器,即主从复制

    我们需要通过配置,完成自动的主从复制

原理图示:

图示1
请添加图片描述
概念:

  1. 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中。
  2. 从库和主库连接,此时从库会开启io现成和sql线程
  3. 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中。
  4. 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上。

集群案例

环境
  • 环境三部曲

    • 1.全新服务器-互相通信
    • 2.全新安装mysql8.0-分别安装
    • 3.配置域名解析

配置静态ip

  • 2台服务器ip分别是

  • 192.168.145.141

  • 192.168.145.142

  • 配置mysql8.0yum源头

    • 下载安装包
    • yum源 几台服务器都有,其中19,29,39,49安装yum源
    • mysql8.0安装包,19,29,39,49安装
  • 141服务器操作如下:

在19服务器下操作:   wget https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm  yum install  mysql80-community-release-el9-1.noarch.rpm   yum install   mysql-community-server  --downloadonly -y find / -iname "*mysql*.rpm"  //查找包的位置  cd /var/cache/dnf/mysql80-community-22d3d3ecd3d92106/packages/  scp ./*.rpm 192.168.145.142:~/  141安装mysql yum install -y *.rpm 启动数据库 systemctl start mysqld   grep 'password' /var/log/mysqld.log mysqladmin -uroot -p'复制的密码' password "Lixinyi@123"  mysql -uroot -p'Lixinyi@123'; show databases;  其他同理 

142:

  [root@localhost ~]# ls   anaconda-ks.cfg                                         mysql-community-common-8.0.38-1.el9.x86_64.rpm   install_mysql.sh                                        mysql-community-icu-data-files-8.0.38-1.el9.x86_64.rpm   mysql-community-client-8.0.38-1.el9.x86_64.rpm          mysql-community-libs-8.0.38-1.el9.x86_64.rpm   mysql-community-client-plugins-8.0.38-1.el9.x86_64.rpm  mysql-community-server-8.0.38-1.el9.x86_64.rpm      [root@localhost ~]# chmod +x install_mysql.sh   //开始安装   [root@localhost ~]# ./install_mysql.sh       
一主一从(M-S)(1)
  • 主(master1)

    • 部署一台新mysql服务器。准备好域名解析。

    • 准备数据1(验证主从同步使用)

      • master1

         create database master1db;  create table master1db.master1tab(name char(50));  insert into master1db.master1tab values (1111);  insert into master1db.master1tab values (2222); 
    • 开启二进制日志

      • master1

         [root@localhost ~]# vim /etc/my.cnf  log_bin  server-id=1  [root@localhost ~]# systemctl restart mysqld  重启生效    ---------------------------------------------  log_bin   开启二进制日志  server-id 集群中二进制的编号 不要重复 
    • 创建复制用户

      • master1
创建用户: mysql> create user  'rep'@'192.168.145.%' identified by 'Lixinyi@123';    授权:  mysql>grant replication slave, replication client on *.* to 'rep'@'192.168.145.%' ; 
下面是这条命令的详细解释:  grant: 这是SQL的关键字,用于授权用户特定的权限。 replication slave: 这个权限允许用户请求在主服务器复制二进制日志事件到从服务器,这通常用于MySQL的主从复制功能。  replication client: 这个权限允许用户查询主服务器或从服务器的状态,以及执行SHOW SLAVE  STATUS和SHOW MASTER STATUS等命令。  on *.*: 这表示对所有数据库和所有表进行授权。 to ‘rep’@‘192.168.229.%’: 这表示将权限授予用户名为rep的用户,并且这个用户可以从192.168.229.*这个IP地址范围内的任何主机连接到MySQL服务器。这里的%是一个通配符,表示匹配该IP段内的任何具体IP地址。  简而言之,这条命令的意思是:“为从192.168.229.*这个IP地址范围内的任何主机连接到MySQL服务器的rep用户授予复制从服务器和复制客户端的权限”。这通常用于设置MySQL的主从复制功能,其中rep用户将用于从主服务器复制数据到从服务器。 

备份master数据库的数据

  • master1

    刚才是先添加的数据,然后才开启的二进制日志。二进制日志中没有记录一开始添加数据的记录。

    所以需要我们对之前的数据先进行一个手动备份

    退出mysql登陆页  mysqldump -uroot -p'Lixinyi@123' --all-databases --single-transaction --master-data=2 --flush-logs > `date +"%F-%H"`-mysql-all.sql   # ls 2024-07-15-14-mysql-all.sql  
    注释: --single-transaction  保持服务的可以用性,服务保持开机状态 master-data=2         帮我开启记录 记录二进制节点的位置 --flush-logs          刷新二进制日志  对二进制日志进行分割 

    发送给另一台主机:

     scp -r ./2024-07-15-14-mysql-all.sql    192.168.145.142:/tmp  

    观察二进制日志分割点:

     vim ./2024-07-15-14-mysql-all.sql  查看第24行: CHANGE MASTER TO MASTER_LOG_FILE='localhost-bin.000002', MASTER_LOG_POS=157; 
      • 准备数据2(验证主从同步使用)

      ​ 刚刚备份的是之前开始的数据,我们现在模拟真实的生产环境,在备份后,又产生了新的数据

      • master1

        mysql -uroot -p'Lixinyi@123'  insert into master1db.master1tab values (33333333); insert into master1db.master1tab values (44444); 
  • 从(master2)

    • 测试rep用户是否可用

      • master2

        部署数据库应用

        mysql -h master1 -urep -p'Lixinyi@123'  用授权的账号登陆 
        • 预防账户问题,防火墙、selinux都要关闭。
    • 启动服务器序号

      [root@localhost ~]#vim /etc/my.cnf 不用在从设备上开启二进制日志,没有人向master2请求日志。 
      server-id=2  服务器ID是必须设置的。 
      [root@localhost ~]# systemctl restart mysqld 
      mysql -uroot -p'Lixinyi@123'  测试服务器是否修改正确。能否正常登陆。 
    • 手动同步数据

       mysql>  set sql_log_bin=0;  mysql>  source /tmp/2024-07-15-03-mysql-all.sql 
      注释:  set sql_log_bin=0;  设置当前数据库服务器的二进制日志临时关闭    source /tmp/2024-07-15-14-mysql-all.sql  根据日志文件还原数据库 

      验证是否正确完成备份:

        mysql> show databases; +--------------------+ | Database           | +--------------------+ | information_schema | | master1db          | | mysql              | | performance_schema | | sys                | +--------------------+ 5 rows in set (0.00 sec)    mysql> select * from master1db.master1tab; +------+ | name | +------+ | 1111 | | 2222 | +------+  
    • 设置主服务器

      配置主从关系

mysql> change master to master_host='192.168.145.142', master_user='rep', master_password='Lixinyi@123', master_log_file='localhost-bin.000002', master_port=3306, master_log_pos=157;   ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'master to master_host='master1',master_user='rep',master_password='Lixinyi@123' at line 1  
  • 原因:

    在MySQL 8.0中,CHANGE MASTER TO 语句用于配置复制。但是,从MySQL 8.0.14开始,该语句已经被弃用,并建议使用新的语句 CHANGE REPLICATION SOURCE TO

      CHANGE REPLICATION SOURCE TO     SOURCE_HOST = '192.168.145.142',     SOURCE_USER = 'rep',     SOURCE_PASSWORD = 'Lixinyi@123',     SOURCE_PORT = 3306,     SOURCE_LOG_FILE = 'localhost-bin.000002',     SOURCE_LOG_POS = 158; 
      change replication source to     source_host = '192.168.145.142',     source_user = 'rep',     source_password = 'Lixinyi@123',     source_port = 3306,     source_log_file = 'localhost-bin.000002',     source_log_pos = 158; 
      mysql> change replication source to source_host = '192.168.145.142',source_user = 'rep',source_password = 'Lixinyi@123',source_port = 3306,source_log_file = 'localhost-bin.000002',source_log_pos = 158;    注意,二进制日志的位置,应该参照主服务器备份时生成的新位置。   
  • 启动从服务器的复制线程

    mysql> start slave;  
  • 查看启动状态(IO-YES/SQL-YES)

    show slave status\G; 
    mysql> show slave status\G; *************************** 1. row ***************************                Slave_IO_State: Waiting for master to send event                   Master_Host: master1                   Master_User: rep                   Master_Port: 3306                 Connect_Retry: 60               Master_Log_File: localhost-bin.000003           Read_Master_Log_Pos: 154                Relay_Log_File: localhost-relay-bin.000003                 Relay_Log_Pos: 375         Relay_Master_Log_File: localhost-bin.000003              Slave_IO_Running: Yes             Slave_SQL_Running: Yes  

    请添加图片描述

  • 从服务器查看数据库,看数据是否一致

    mysql> select * from master1db.master1tab; +----------+ | name     | +----------+ | 1111     | | 2222     | | 33333333 | | 44444    | +----------+  3333,4444就是主从集群同步过来的数据  
  • 返回主服务器(master1)更新数据,在从服务器(master2)观察是否同步。

    master1主服务器添加数据  mysql> insert into master1db.master1tab values (55555);  
    从master2查看数据:  mysql> select * from master1db.master1tab; +----------+ | name     | +----------+ | 1111     | | 2222     | | 33333333 | | 44444    | | 55555    | +----------+ 已经同步了 

    注意:

    如果从服务器添加了数据,主服务器是不会同步的

    不要这样操作,不要操作

    因为主从复制的原理,就是从服务器来同步主服务器,如果从服务器擅自添加数据,添加的数据就属于脏数据

    了解,不要去实验操作!!!!!

相关内容

热门资讯

车载安卓下载苹果系统,揭秘如何... 你有没有想过,你的车载系统竟然也能装上苹果系统?没错,就是那个我们平时手机上用的iOS系统!听起来是...
安卓电脑系统崩溃,原因分析及解... 最近我的安卓电脑系统突然崩溃了,这可真是让我头疼不已。你知道,我那台安卓电脑可是我日常工作和娱乐的好...
乐动力支持安卓系统吗,乐动力安... 最近有没有发现,你的手机里又多了一个健身APP?是不是在犹豫要不要下载乐动力呢?别急,别急,让我来给...
原生谷歌安卓系统下载,探索纯净... 亲爱的手机控们,你是否曾梦想拥有一部运行原生谷歌安卓系统的手机?那种纯净、高效、充满科技感的体验,是...
小米现在安卓系统优化,打造极致... 你有没有发现,最近小米的手机在安卓系统优化上可是下足了功夫呢?这不,我就来给你好好扒一扒,看看小米是...
云南游攻略系统和安卓,探寻彩云... 你打算去云南旅行了吗?那可得好好规划不然可就浪费了大好时光呢!今天,我就要给你安利一个超棒的云南游攻...
安卓系统怎么取消横屏,安卓系统... 你是不是也和我一样,有时候在使用安卓手机时,不小心把屏幕横过来,然后发现好多应用都是横着看的,简直让...
安卓系统慢动作摄影,捕捉精彩瞬... 你有没有发现,手机拍照已经不能满足我们追求个性的需求了?现在,安卓系统里的慢动作摄影功能,简直就像给...
安卓xp系统安装版,体验复古智... 你有没有想过,如果你的安卓手机也能装上XP系统,那会是怎样的体验呢?想象你手中的设备瞬间穿越回那个经...
怎么让安卓手机换回系统,轻松换... 亲爱的手机控们,你是不是也和我一样,对安卓手机的系统更新充满了期待?但是,有时候更新后的系统可能并不...
安卓系统界面停止运用,迈向未来 你知道吗?最近安卓系统界面上有个大变动,那就是它将停止运用啦!是不是有点惊讶?别急,让我带你一探究竟...
安卓系统中的drm服务,功能、... 你有没有发现,每次打开手机,安卓系统里总有一些神秘的玩意儿在默默运行?没错,说的就是那个让人又爱又恨...
华为OS是安卓系统吗,华为OS... 你有没有想过,华为的操作系统是不是安卓系统呢?这个问题,估计不少手机控都好奇过吧!今天,就让我带你一...
windows11安装安卓子系... 亲爱的电脑迷们,你是否对Windows 11的新功能感到好奇?今天,我要带你一起探索一个超级酷的功能...
安卓系统如何清密码,轻松解锁您... 手机解锁密码忘记了?别急,今天就来教你怎么轻松搞定安卓系统的密码清除问题。想象你正坐在沙发上,手里拿...
安卓11.0系统怎么关闭hd,... 你有没有发现,自从升级到了安卓11.0系统,手机界面看起来是不是更炫酷了?不过,有时候这高清的视觉体...
二手安卓原装系统,揭秘其性能与... 你有没有想过,手机更新换代的速度简直就像光速一样快?每次新款手机一出,旧款手机就变成了“古董”。但是...
安卓13系统还会卡,安卓13系... 你有没有发现,尽管安卓系统一直在更新迭代,但安卓13系统还是有点小卡呢?别急,今天咱们就来聊聊这个话...
2015年安卓系统版本,从Lo... 你有没有发现,手机里的安卓系统版本更新得可真是飞快啊!记得2015年那会儿,安卓系统版本可是发生了不...
安卓微信老是退出系统,探究原因... 你是不是也遇到了这样的烦恼?每次打开微信,还没聊两句,它就突然退出系统了!这可真是让人头疼啊。今天,...