Linux双机部署数据库,主从同步方案,高可用配置指南,Linux环境下数据库双机部署与主从同步高可用配置攻略
嘿,手头有两台Linux服务器,琢磨着拿一台专门跑数据库?这思路没毛病!但咱得掰扯清楚——单机跑库风险大,双机配合才真香!今天手把手教你用两台服务器玩转数据库部署,保准看完不迷糊!
一、为啥非得两台?单机不够香吗?
灵魂拷问:数据库放单台服务器会咋样?
答:就像把鸡蛋全放一个篮子!一旦遇到:
- 硬盘突然暴毙 → 数据全丢哭都没眼泪💧
- 服务器宕机 → 整个服务直接瘫痪
- 流量暴增 → 数据库卡成PPT,用户骂娘
双机方案核心优势:
✅ 数据有备份:主库崩了从库顶上
✅ 负载分摊:读操作扔给从库,主库专心写数据
✅ 维护不中断:升级备份时从库照常服务
真实案例:某电商大促时主库CPU飙到100%,全靠从库扛住80%的查询请求
二、两种经典姿势!对号入座选方案
▷ 姿势1:主从复制(一主一从)
适合场景:读多写少,比如论坛、新闻站
运作原理:
- 主库(Master)写数据 → 生成二进制日志(binlog)
- 从库(Slave)实时拉日志 → 重放操作同步数据
就像老师讲课,学生同步记笔记!
配置关键四步走:
- 主库开权限(在MySQL命令行操作):
sql复制
CREATE USER 'repl'@'从库IP' IDENTIFIED BY '密码';GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP';FLUSH PRIVILEGES; -- 立即生效!
- 主库锁表记位置:
sql复制
FLUSH TABLES WITH READ LOCK; -- 禁止写入SHOW MASTER STATUS; -- 记下File和Position值(比如mysql-bin.000001 / 154)
- 从库配置指向主库:
sql复制
CHANGE MASTER TOMASTER_HOST='主库IP',MASTER_USER='repl',MASTER_PASSWORD='密码',MASTER_LOG_FILE='mysql-bin.000001', -- 刚才记的FileMASTER_LOG_POS=154; -- 刚才记的Position
- 从库启动复制:
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秒切到从库
配置精华步骤:
- 两台服务器安装Keepalived:
bash复制
# Ubuntu系sudo apt install keepalived# CentOS系sudo yum install keepalived
- 主库配置(/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)}}
- 从库配置:
conf复制
state BACKUP # 从节点priority 90 # 优先级低于主# 其他参数和主库相同
- 启动服务:
bash复制
systemctl start keepalivedsystemctl enable keepalived
方案对比表:闭眼选不纠结
特性 | 主从复制 | 双主双活+Keepalived |
---|---|---|
配置难度 | ★★☆ | ★★★★ |
数据一致性 | 延迟几秒 | 近乎实时 |
故障切换 | 手动切换 | 自动秒切 |
硬件成本 | 从库可低配 | 两台都要高配 |
适用规模 | 日均PV<50万 | 百万级并发 |
四、血泪经验!新手必看避坑指南
同步延迟卡成狗?
- 主库用SSD硬盘,机械盘拖后腿!
- 从库配置多线程复制(MySQL5.6+支持)
sql复制
STOP SLAVE;SET GLOBAL slave_parallel_workers=4; -- 根据CPU核数调整START SLAVE;
主从数据不一致?
定期用pt-table-checksum工具检测:bash复制
# 在主库执行pt-table-checksum --user=root --password=密码
Keepalived脑裂问题(两台都抢VIP):
- 主从之间多线心跳检测(网线+串口线)
- 脚本监控数据库服务,停服时自动降权
个人观点拍黑板
双机部署是趋势,但别盲目追高配! 见过太多人跟风搞双主双活,结果运维累成狗。
- 小型项目 → 主从复制+定时备份够用
- 中型系统 → 主从+Keepalived自动切换稳如老狗
- 大型平台 → 直接上数据库集群(比如Galera Cluster)
说实在的,新手先从主从同步练手,搞明白binlog和GTID再玩高阶!毕竟——技术可以迭代,数据丢了真完蛋!