database-replication-setup

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Database 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
undefined
bash
undefined

postgresql.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 -P
bash
pg_basebackup -h primary-server -D /var/lib/postgresql/main -U repl_user -v -P

postgresql.conf

postgresql.conf

primary_conninfo = 'host=primary-server port=5432 user=repl_user password=secure_password'
undefined
primary_conninfo = 'host=primary-server port=5432 user=repl_user password=secure_password'
undefined

MongoDB 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

undefined
undefined

PostgreSQL

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 backup
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 backup

Лучшие практики

最佳实践

  • Используйте SSL/TLS для трафика репликации
  • Мониторьте задержку репликации
  • Тестируйте процедуры failover регулярно
  • Документируйте процедуры восстановления
  • 使用SSL/TLS加密复制流量
  • 监控复制延迟
  • 定期测试故障转移流程
  • 记录恢复流程文档