常见的数据库集群部署模式
在实际业务中,单台数据库服务器扛不住大流量访问。比如你开了一家电商小店,订单一多,系统就卡,用户点一下“下单”要等好几秒,差评自然就来了。这时候就得上数据库集群,把压力分摊到多台机器上。
主从复制(Master-Slave)
这是最基础的集群方式。一台主库负责写操作,多台从库同步主库的数据,只处理读请求。比如你的网站每天有10万次访问,其中9万次是浏览商品(读),只有1万次是下单(写),那完全可以把读请求分流到从库,减轻主库负担。
MySQL 配置主从复制的关键步骤:
# 主库配置 my.cnf
server-id = 1
log-bin = mysql-bin
# 从库配置 my.cnf
server-id = 2
relay-log = mysql-relay-bin
read-only = 1
# 从库执行同步命令
CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_USER='repl',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS= 4;
START SLAVE;
主主复制(Master-Master)
两台数据库都可读可写,互相备份。适合需要高可用的场景,比如公司有两个办公区,各自都能独立操作数据。但要注意自增ID冲突问题,可以设置一个库用奇数ID,另一个用偶数ID。
常见做法是在两个节点上分别设置:
auto_increment_increment = 2
auto_increment_offset = 1 # 节点1
# 或
auto_increment_offset = 2 # 节点2
MySQL Group Replication(MGR)
MySQL 官方推出的高可用方案,基于组通信机制,支持多主或单主模式。只要半数以上节点存活,整个集群就能继续工作。适合对数据一致性要求高的系统,比如财务系统。
启用 MGR 前需确保:
- 使用 InnoDB 引擎
- 开启二进制日志和全局事务标识(GTID)
- 各节点时间同步
Redis 哨兵模式(Sentinel)
Redis 单机挂了会丢数据,加个哨兵集群能自动发现故障并切换主节点。比如你用 Redis 缓存用户登录信息,一旦主节点宕机,哨兵会在30秒内选出新的主节点,用户几乎无感。
启动哨兵的命令:
redis-sentinel /path/to/sentinel.conf
配置文件中指定监控的主库:
sentinel monitor mymaster 192.168.1.10 6379 2
Redis Cluster 分片集群
当缓存数据量超过内存上限,就得靠分片。Redis Cluster 把数据按哈希槽分成16384份,分布到多个节点上。比如你有6台机器,每台负责一部分槽位,数据自动分散,读写压力也就摊开了。
创建集群命令:
redis-cli --cluster create 192.168.1.11:7000 192.168.1.12:7000 \
--cluster-replicas 1
MongoDB 复制集(Replica Set)
MongoDB 推荐使用复制集来保证高可用。一个主节点处理写入,多个从节点同步数据,并设有仲裁节点降低部署成本。比如你在做内容平台,文章数据存在 MongoDB,主节点挂了,复制集会在十几秒内自动选主,服务不中断。
初始化复制集的配置:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "192.168.1.21:27017" },
{ _id: 1, host: "192.168.1.22:27017" },
{ _id: 2, host: "192.168.1.23:27017", arbiterOnly: true }
]
})
选择哪种方式?看你的实际需求
小项目从主从开始就行,成本低、配置简单;中大型系统建议用 MGR 或 Redis Cluster,抗得住突发流量;如果是关键业务,别省那点钱,直接上多节点复制集或分片架构,别等出事才后悔。
部署前记得做好网络规划,比如数据库之间走内网通信,避免公网延迟影响同步效率。还有,定期检查同步状态,别以为配完就万事大吉——我见过太多人三个月后才发现从库早就停止同步了。