Linux双机部署数据库,主从同步方案,高可用配置指南,Linux环境下数据库双机部署与主从同步高可用配置攻略

嘿,手头有两台Linux服务器,琢磨着拿一台专门跑数据库?这思路没毛病!但咱得掰扯清楚——​​单机跑库风险大,双机配合才真香​​!今天手把手教你用两台服务器玩转数据库部署,保准看完不迷糊!


一、为啥非得两台?单机不够香吗?

​灵魂拷问:数据库放单台服务器会咋样?​
答:就像把鸡蛋全放一个篮子!一旦遇到:

  • 硬盘突然暴毙 → 数据全丢哭都没眼泪💧
  • 服务器宕机 → 整个服务直接瘫痪
  • 流量暴增 → 数据库卡成PPT,用户骂娘

​双机方案核心优势​​:
✅ ​​数据有备份​​:主库崩了从库顶上
✅ ​​负载分摊​​:读操作扔给从库,主库专心写数据
✅ ​​维护不中断​​:升级备份时从库照常服务

Linux双机部署数据库,主从同步方案,高可用配置指南,Linux环境下数据库双机部署与主从同步高可用配置攻略  第1张

真实案例:某电商大促时主库CPU飙到100%,全靠从库扛住80%的查询请求


二、两种经典姿势!对号入座选方案

▷ ​​姿势1:主从复制(一主一从)​

​适合场景​​:读多写少,比如论坛、新闻站
​运作原理​​:

  1. 主库(Master)写数据 → 生成二进制日志(binlog)
  2. 从库(Slave)实时拉日志 → 重放操作同步数据
    ​就像老师讲课,学生同步记笔记!​

​配置关键四步走​​:

  1. ​主库开权限​​(在MySQL命令行操作):
    sql复制
    CREATE USER 'repl'@'从库IP' IDENTIFIED BY '密码';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP';FLUSH PRIVILEGES;  -- 立即生效!
  2. ​主库锁表记位置​​:
    sql复制
    FLUSH TABLES WITH READ LOCK;  -- 禁止写入SHOW MASTER STATUS;  -- 记下File和Position值(比如mysql-bin.000001 / 154)
  3. ​从库配置指向主库​​:
    sql复制
    CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='repl',MASTER_PASSWORD='密码',MASTER_LOG_FILE='mysql-bin.000001',  -- 刚才记的FileMASTER_LOG_POS=154;  -- 刚才记的Position
  4. ​从库启动复制​​:
    sql复制
    START SLAVE;SHOW SLAVE STATUSG;  -- 看到Slave_IO_Running和Slave_SQL_Running都是Yes才算成功!

▷ ​​姿势2:双主双活(互为主从)​

​适合场景​​:高并发读写,比如游戏服、支付系统
​运作原理​​:

  • 服务器A和B​​都能读写​
  • 数据变更​​双向同步​
    ​就像两人协作编辑同一份文档!​

​避坑重点​​:
⚠️ ​​自增ID冲突​​:A库设奇数ID(1,3,5...),B库设偶数ID(2,4,6...)

ini复制
# 服务器A的my.cnf[mysqld]auto_increment_increment = 2  -- 每次+2auto_increment_offset = 1     -- 起始值1# 服务器B的my.cnf[mysqld]auto_increment_increment = 2auto_increment_offset = 2     -- 起始值2

⚠️ ​​循环复制​​:过滤掉自身产生的日志

sql复制
# 在每台服务器执行SET GLOBAL log_slave_updates = OFF;  -- 禁止从库写binlog

三、高可用进阶!给数据库上保险

​致命问题:主库挂了咋自动切换?​
→ ​​Keepalived​​ 来救场!
​原理​​:虚拟IP(VIP)漂移技术

  • 正常时VIP指向主库
  • 主库宕机 → VIP秒切到从库

​配置精华步骤​​:

  1. 两台服务器安装Keepalived:
    bash复制
    # Ubuntu系sudo apt install keepalived# CentOS系sudo yum install keepalived
  2. 主库配置(/etc/keepalived/keepalived.conf):
    conf复制
    vrrp_instance VI_1 {state MASTER           # 主节点interface eth0         # 网卡名virtual_router_id 51   # 集群ID,主从必须一致priority 100           # 优先级(主>从)virtual_ipaddress {192.168.1.100      # 虚拟IP(用户实际连接的IP)}}
  3. 从库配置:
    conf复制
    state BACKUP             # 从节点priority 90              # 优先级低于主# 其他参数和主库相同
  4. 启动服务:
    bash复制
    systemctl start keepalivedsystemctl enable keepalived

方案对比表:闭眼选不纠结

特性主从复制双主双活+Keepalived
​配置难度​★★☆★★★★
​数据一致性​延迟几秒近乎实时
​故障切换​手动切换​自动秒切​
​硬件成本​从库可低配两台都要高配
​适用规模​日均PV<50万百万级并发

四、血泪经验!新手必看避坑指南

  1. ​同步延迟卡成狗?​

    • 主库用SSD硬盘,机械盘拖后腿!
    • 从库配置​​多线程复制​​(MySQL5.6+支持)
    sql复制
    STOP SLAVE;SET GLOBAL slave_parallel_workers=4;  -- 根据CPU核数调整START SLAVE;
  2. ​主从数据不一致?​
    定期用​​pt-table-checksum​​工具检测:

    bash复制
    # 在主库执行pt-table-checksum --user=root --password=密码
  3. ​Keepalived脑裂问题​​(两台都抢VIP):

    • 主从之间​​多线心跳检测​​(网线+串口线)
    • 脚本监控数据库服务,停服时自动降权

个人观点拍黑板

​双机部署是趋势,但别盲目追高配!​​ 见过太多人跟风搞双主双活,结果运维累成狗。

  • 小型项目 → ​​主从复制+定时备份​​够用
  • 中型系统 → ​​主从+Keepalived自动切换​​稳如老狗
  • 大型平台 → 直接上​​数据库集群​​(比如Galera Cluster)
    说实在的,​​新手先从主从同步练手​​,搞明白binlog和GTID再玩高阶!毕竟——​​技术可以迭代,数据丢了真完蛋!​