database-replication-setup
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDatabase Replication Expert
数据库复制专家
Эксперт по системам репликации баз данных с глубокими знаниями архитектур репликации master-slave, master-master и кластерных решений.
具备主从复制、主主复制及集群方案等复制架构深厚知识的数据库复制系统专家。
Основные принципы репликации
复制的基本原则
Типы репликации
复制类型
- Асинхронная: Высокая производительность, возможная потеря данных при сбоях
- Синхронная: Гарантия консистентности данных, повышенная задержка
- Полусинхронная: Баланс между производительностью и консистентностью
- Master-Slave: Масштабирование чтения, резервное копирование
- Master-Master: Географическое распределение, высокая доступность
- 异步复制:高性能,故障时可能丢失数据
- 同步复制:保证数据一致性,延迟增加
- 半同步复制:在性能与一致性间取得平衡
- Master-Slave(主从):扩展读能力,数据备份
- Master-Master(主主):地理分布式部署,高可用性
Настройка репликации MySQL
MySQL复制配置
Конфигурация Master
主库配置
sql
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
sync_binlog = 1
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'secure_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';sql
[mysqld]
server-id = 1
log-bin = mysql-bin
binlog-format = ROW
sync_binlog = 1
CREATE USER 'repl_user'@'%' IDENTIFIED BY 'secure_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';Конфигурация Slave
从库配置
sql
[mysqld]
server-id = 2
relay-log = relay-bin
read_only = 1
CHANGE MASTER TO
MASTER_HOST='master-server',
MASTER_USER='repl_user',
MASTER_PASSWORD='secure_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;sql
[mysqld]
server-id = 2
relay-log = relay-bin
read_only = 1
CHANGE MASTER TO
MASTER_HOST='master-server',
MASTER_USER='repl_user',
MASTER_PASSWORD='secure_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;Потоковая репликация PostgreSQL
PostgreSQL流式复制
Основной сервер
主服务器
bash
undefinedbash
undefinedpostgresql.conf
postgresql.conf
wal_level = replica
max_wal_senders = 3
max_replication_slots = 3
```sql
CREATE USER repl_user REPLICATION LOGIN PASSWORD 'secure_password';wal_level = replica
max_wal_senders = 3
max_replication_slots = 3
```sql
CREATE USER repl_user REPLICATION LOGIN PASSWORD 'secure_password';Резервный сервер
备用服务器
bash
pg_basebackup -h primary-server -D /var/lib/postgresql/main -U repl_user -v -Pbash
pg_basebackup -h primary-server -D /var/lib/postgresql/main -U repl_user -v -Ppostgresql.conf
postgresql.conf
primary_conninfo = 'host=primary-server port=5432 user=repl_user password=secure_password'
undefinedprimary_conninfo = 'host=primary-server port=5432 user=repl_user password=secure_password'
undefinedMongoDB Replica Set
MongoDB副本集
javascript
rs.initiate({
_id: "myReplicaSet",
members: [
{ _id: 0, host: "mongo1:27017", priority: 2 },
{ _id: 1, host: "mongo2:27017", priority: 1 },
{ _id: 2, host: "mongo3:27017", arbiterOnly: true }
]
});javascript
rs.initiate({
_id: "myReplicaSet",
members: [
{ _id: 0, host: "mongo1:27017", priority: 2 },
{ _id: 1, host: "mongo2:27017", priority: 1 },
{ _id: 2, host: "mongo3:27017", arbiterOnly: true }
]
});Мониторинг репликации
复制监控
MySQL
MySQL
bash
SHOW SLAVE STATUS\G;bash
SHOW SLAVE STATUS\G;Проверка: Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master
检查项:Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master
undefinedundefinedPostgreSQL
PostgreSQL
sql
SELECT client_addr, state, sent_lsn, replay_lsn,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lag_bytes
FROM pg_stat_replication;sql
SELECT client_addr, state, sent_lsn, replay_lsn,
pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lag_bytes
FROM pg_stat_replication;Стратегии Failover
故障转移策略
Автоматическое переключение с HAProxy
使用HAProxy实现自动切换
bash
listen mysql-cluster
bind *:3306
option mysql-check user haproxy_check
server mysql-1 mysql1:3306 check weight 1
server mysql-2 mysql2:3306 check weight 1 backupbash
listen mysql-cluster
bind *:3306
option mysql-check user haproxy_check
server mysql-1 mysql1:3306 check weight 1
server mysql-2 mysql2:3306 check weight 1 backupЛучшие практики
最佳实践
- Используйте SSL/TLS для трафика репликации
- Мониторьте задержку репликации
- Тестируйте процедуры failover регулярно
- Документируйте процедуры восстановления
- 使用SSL/TLS加密复制流量
- 监控复制延迟
- 定期测试故障转移流程
- 记录恢复流程文档