1.
总体规划与前置准备
小分段:
- 目标:双活或主从+自动故障切换的 MySQL 高可用;Redis 使用 Sentinel 或 Cluster 做缓存高可用与分片。
- 资源:至少 3 台云主机用于数据库(主/从/仲裁或三节点组复制),3 台用于 Redis(含 sentinel),1-2 台用于负载/代理(HAProxy/ProxySQL)。
- 网络:在台湾可用区内创建私有子网,分配固定内网 IP,安全组开放 3306、6379、26379、11211、VIP 使用的端口及 SSH(仅限管理网段)。
2.
云主机与存储配置
小分段:
- 新建实例:选择 SSD 云盘、至少 2 核 4G 内存起步,生产建议 4 核 8G 起步。
- 磁盘:数据库使用独立数据盘,启用自动快照策略。开启内核参数优化(vm.swappiness=1,net.core.somaxconn=1024)。
3.
基础操作系统与网络设置
小分段:
- 更新系统:sudo apt update && sudo apt -y upgrade(或 yum)。
- 固定 hosts:在 /etc/hosts 写入内网 IP 与主机名,避免 DNS 波动。
- 防火墙:只开放必要端口;使用 ufw/iptables 限制来源。
4.
部署 MySQL(以 MySQL 8 为例)
小分段:
- 安装:sudo apt install mysql-server -y。
- 基本配置:编辑 /etc/mysql/mysql.conf.d/mysqld.cnf,设置 bind-address=0.0.0.0、server-id=1(每台不同)、log_bin=mysql-bin、gtid_mode=ON、enforce_gtid_consistency=ON、binlog_format=ROW。重启 mysqld。
5.
建立复制用户与数据初始化
小分段:
- 在主库执行:CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_pass'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
- 生成一致性快照:LOCK TABLES WITH READ LOCK; SHOW MASTER STATUS; 使用 mysqldump --single-transaction --set-gtid-purged=ON 导出数据;UNLOCK TABLES。将 dump 导入从库。
6.
配置从库并启动复制
小分段:
- 编辑从库 my.cnf,设置 server-id(不同于主)、gtid_mode=ON 等。
- 在从库执行:CHANGE MASTER TO MASTER_HOST='主ip', MASTER_USER='repl', MASTER_PASSWORD='repl_pass', MASTER_AUTO_POSITION=1; START SLAVE; SHOW SLAVE STATUS\G 确认 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes。
7.
实现自动故障切换(Keepalived + HAProxy/ProxySQL)
小分段:
- Keepalived:在两台或三台节点上安装 keepalived,配置 virtual_ipaddress 与 health_check 脚本(使用 mysqladmin ping 或 自定义 check_mysql.sh),master 节点持有 VIP。
- 读写分离:部署 HAProxy/ProxySQL 在 VIP 之上。ProxySQL 可配置读写规则并连接后端 MySQL 节点,故障时自动剔除不可用节点。
8.
可选:使用 MySQL InnoDB Cluster(Group Replication)
小分段:
- 安装 mysql-shell,使用 dba.createCluster() 创建集群,使用 Router 或 ProxySQL 连接。优点是自动成员管理与故障转移,但网络、时间同步要求严格。
9.
部署 Redis 高可用——Sentinel 模式
小分段:
- 安装 Redis:apt install redis-server。
- 主从配置:在从机 redis.conf 设置 replicaof 主IP 主端口;在主从节点启用 requirepass/ masterauth(生产环境须设置密码)。
- Sentinel:为三台独立节点配置 sentinel.conf,内容示例:sentinel monitor mymaster 10.0.0.1 6379 2,sentinel auth-pass mymaster yourpass,down-after-milliseconds 和 failover-timeout 根据延时调整。启动三个 sentinel 进程。
10.
部署 Redis Cluster(分片)
小分段:
- 准备至少 6 个实例(3 主 3 备份),在每台启动 redis-server 并打开 cluster-enabled yes。
- 使用 redis-cli --cluster create ip1:6379 ip2:6379 ... --cluster-replicas 1 创建集群并确认。监控节点状态并测试重启单节点与故障转移。
11.
数据备份、监控与演练
小分段:
- 备份:MySQL 使用 mysqldump / xtrabackup,Redis 使用 RDB/AOF 结合定期备份到对象存储并保留多份。
- 监控:部署 Prometheus + Grafana 采集 MySQL exporter、Redis exporter 指标;设置告警(连接数、延迟、复制延迟、内存使用)。
- 容灾演练:定期做故障切换演练,验证 VIP、ProxySQL、Sentinel/Cluster 的自动切换行为。
12.
安全与性能优化要点
小分段:
- 安全:限制管理端口来源、使用内网通信、开启数据库审计与访问控制。
- 性能:调整 innodb_buffer_pool_size、max_connections,Redis 设置 maxmemory-policy,并调优持久化参数以平衡性能与持久性。
13.
问:在台湾云服务器上,私有网络与安全组如何设置以保证 HA 正常工作?
小分段:
答:将数据库与缓存节点放在同一私有子网,分配固定内网 IP;安全组仅开放内网所需端口(3306、6379、26379 等)及管理端 SSH(限定管理网段)。对于 VIP(Keepalived)和代理服务器,允许公网/应用层访问端口。确保云平台内网路由和 ACL 不会阻断心跳与复制端口。
14.
问:发生主库故障后,如何保证数据一致性与最小恢复时间?
小分段:
答:建议启用 GTID 并用自动故障切换工具(Keepalived+ProxySQL 或 InnoDB Cluster)。故障发生时,ProxySQL 切换写节点到新主,应用透明重连。为降低数据丢失,使用半同步或组复制,或在 Redis 使用 AOF 和适当的 fsync 策略。
15.
问:Redis Sentinel 与 Redis Cluster 在台湾云上如何选择?
小分段:
答:若需要简单主从高可用且单实例内数据量可控,选 Sentinel(管理简单);若需要水平扩容和自动分片,选 Redis Cluster。Cluster 对网络可靠性与多端口配置要求高,建议部署在同可用区内并做好网络与监控。
来源:如何在台湾省云服务器云主机上搭建高可用数据库与缓存集群