mysql主从复制,mycat,keepalived实现高可用数据仓储

本文详细介绍了如何在三台服务器上实现MySQL数据库的主从复制,配置mycat进行读写分离和分库分表,使用keepalived提供高可用的负载均衡方案,最后通过Java多线程技术进行性能测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 数据库主从复制

本次实验使用了三台机器,分别是10.26.7.20,10.26.7.21,10.26.7.22。 实现分为四个部分,首先是数据库主从复制,然后是mycat配置,再是keepalived配置,最后写测试代码。其中,数据库主从复制和mycat配置都是在普通用户身份下进行的,keepalived配置需要root权限才能进行操作。

1.1,安装mysql

参考博客:https://blog.youkuaiyun.com/weixin_30773135/article/details/94862745

  1. 先下载mysql编译好的二进制包mysql-5.7.28-el7-x86_64.tar.gz,这里需要注意的是若没有带操作系统位数则是源码包是需要编译的

  2. 解压安装包,在用户目录下新建一个目录用来存放mysql解压包
    在这里插入图片描述

  3. 进入mysql,执行vim my.cnf命令,添加如下信息
    在这里插入图片描述

  4. 初始化数据库,这是一行命令

    ./bin/mysqld--defaults-file=/home/wangfeng/local/mysql/my.cnf--initialize--user=wangfeng--basedir=/home/wangfeng/local/mysql--datadir=/home/wangfeng/local/data
    
  5. 获取root密码

    cat /home/wangfeng/local/log/error.log |grep root@localhost
    
  6. 启动mysql

    cd /home/wangfeng/local/mysql/bin/
    ./mysqld_safe --defaults-file=/home/wangfeng/local/mysql/my.cnf --user=wangfeng &
    
  7. 登录mysql

    cd /home/wangfeng/local/mysql/bin/
    ./mysql -uroot -P3337 -p -S /home/wangfeng/local/mysql/mysql.sock
    
  8. 登录后修改root密码及远程登录设置

    alter user 'root'@'localhost' identified by 'mysql@123';
    grant all privileges on *.* to 'root'@'%' identified by 'mysql@123' with grant option; 
    FLUSH PRIVILEGES;
    
  9. 在另外两台服务器上执行同样的操作

1.2,配置主从复制

参考博客:https://blog.youkuaiyun.com/yifanSJ/article/details/79281016
参考博客:https://www.jianshu.com/p/29b0fc835f27

  1. 先进入10.26.7.20服务器,修改my.cnf配置文件
    在这里插入图片描述

  2. 重启数据库后,设置同步账号,并查看master status

    CREATE USER 'wangfeng1'@'10.26.7.21' IDENTIFIED BY 'wangfeng123456';
    GRANT REPLICATION SLAVE ON *.* TO 'wangfeng1'@'10.26.7.21';
    CREATE USER 'wangfeng2'@'10.26.7.22' IDENTIFIED BY 'wangfeng123456';
    GRANT REPLICATION SLAVE ON *.* TO 'wangfeng2'@'10.26.7.22';
    flush privileges;
    

    在这里插入图片描述

  3. 进入从服务器10.26.7.21,修改my.cnf配置文件
    在这里插入图片描述
    重启数据库,执行下面语句:

    change master to 
    master_host='10.26.7.20',
    Master_port=3337,
    master_user='wangfeng1',
    master_password='wangfeng123456',
    master_log_file='master-bin.000005',
    master_log_pos=463;
    start slave;
    

    查看slave状态,出现下图中两个yes就算成功
    在这里插入图片描述

  4. 进入从服务器10.26.7.22,修改my.cnf配置文件
    在这里插入图片描述
    重启数据库,执行下面语句:

    change master to 
    master_host='10.26.7.20',
    Master_port=3337,
    master_user='wangfeng2',
    master_password='wangfeng123456',
    master_log_file='master-bin.000005',
    master_log_pos=463;
    start slave;
    

    查看slave状态,出现下图中两个yes就算成功
    在这里插入图片描述

  5. 至此,配置完成,可以测试,在主数据库20上创建数据库和表,在从数据库21和22上可以同样看到。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二 mycat配置

mycat的配置主要是在10.26.7.21和10.26.7.22上,10.26.7.20作为物理数据库测试。

1,jdk安装

参考博客:http://www.voidcn.com/article/p-rmhzdtfm-vz.html

  • 非root安装jdk,下载安装包解压,配置环境变量即可。
    在这里插入图片描述
    在这里插入图片描述

2,mycat安装

参考博客:https://www.cnblogs.com/youzhibing/p/9553766.html

  1. 下载并解压Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz,得到mycat目录

  2. 进入mycat/conf目录中,执行命令vim server.xml,把下图注释部分去掉
    在这里插入图片描述
    这里改成0
    在这里插入图片描述
    这里用户和密码根据需要修改,我这里没有修改
    在这里插入图片描述

  3. 执行命令vim schema.xml
    在这里插入图片描述

    这里面主要的几个位置是:
    1)schema name=””对应server.xml文件user name=””中schemas的值。
    2)dataNode database=””应是下面writeHost中实际地址所拥有的数据库名,并且要提前创建好。
    3)writeHost 是实际数据库所在位置。

  4. 两台机器都配置好后,执行mycat start命令启动,mycat status查看mycat状态
    在这里插入图片描述

  5. 之后就可以进行测试了,先在两台mycat上建好表,要和实际数据库表结构一样,然后在其中一台上插入数据,实际数据库和另一台mycat上都会查到相同的结果。

  6. 若是遇到错误java.rmi.server.exportexception: port already in use: 1984,通过修改mycat中wrapper.conf的端口号即可解决。
    在这里插入图片描述

三 keepalived配置

参考博客:https://wsgzao.github.io/post/keepalived/

  1. keepalived也是在21和22号机器上安装的。一开始使用源码包编译安装但没成功,后来使用yum,报错openssl找不到也是用yum安装即可解决;安装好后主要就是去/etc/keepalived/keepalived.conf文件中进行配置。
    在这里插入图片描述
    在这里插入图片描述
  2. 启动keepalived,查看vip,并先在服务端关闭MASTER服务看vip是否会浮动。
    在这里插入图片描述
    在这里插入图片描述
  3. 在用户层面直接连接虚拟ip进行数据库操作
    在这里插入图片描述
  4. 然后断开MASTER服务,看外部数据库操作是否正常。
    在这里插入图片描述
    在这里插入图片描述

四 测试代码编写

测试代码部分主要使用java语言,mybatis框架,还有多线程技术实现。
该测试代码主要功能是通过多线程进行数据库的大量插入操作,同时有一个统计线程去统计每秒有多少次操作执行,另一个线程记录每次操作消耗多长时间,两个线程结果都写入各自的文件中,分别记录着每秒操作次数以及每次操作耗时。然后使用python进行可视化展示。上面介绍的mysql,mycat,以及keepalived的测试都是通过在该处的数据库配置文件中修改相关信息完成的。

  1. 工程结构如下所示
    在这里插入图片描述
  2. mybatis配置文件和实体类
    该工程中只有一个实体类Student,DMLCount和DMLTime为临界资源类,分别对应统计线程和日志线程。
    Mybatis配置文件为mybatis-config.xml和StudentMapper.xml,分别是数据库映射配置和实体类操作映射配置:
    在这里插入图片描述
    在这里插入图片描述
  3. 工作线程,统计线程,日志线程
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  4. 临界资源类,通过使用Synchronized进行同步
    在这里插入图片描述
    在这里插入图片描述
  5. 主函数,使用线程池开启多线程
    在这里插入图片描述
  6. 运行程序,结果会写入logThread.txt和countThread.txt文件中
    在这里插入图片描述
    在这里插入图片描述
  7. 将logThread.txt文件拷贝到python程序目录下,执行python程序进行可视化,横轴是所有操作总次数,纵轴代表每次操作所耗费时间,从图中可以看出来0-100毫秒的操作占大多数,有少数操作会高于100毫秒。
    在这里插入图片描述
    在这里插入图片描述

总结

在大数据时代,用户量的扩大必然带来数据存储的问题,存储在一台机器上会存在很大的安全隐患,比如硬件问题,软件问题,以及自然因素,那么就有了数据库的备份,也就是主从复制,通过设置一些配置文件,可以让多个数据库间数据保持同步;有了多个数据库进行数据备份的同时,外界对数据库的调用又出现了困扰,为了避免用户对不同数据库进行冗余的操作,于是又出现了mycat中间件,mycat可以让用户在一台服务上同时对多个数据库进行操作,它可以做到分库分表,读写分离等功能;同样,只有一台mycat还是会有单点故障的问题,那么就需要有多台服务安装mycat,但同样也会引发一个问题,那就是用户的调用,为了保证用户调用的方便,便引入了keepalived;keepalived是一个能检测服务器状态的软件,其底层主要依赖VRRP即虚拟路由冗余协议,生成一个vip,并通过竞选机制实现vip在主备之间的浮动,这样外界用户只需要访问该虚拟ip即可,不需要访问多个不同的服务器,避免了用户对不同服务器数据库的访问操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值