插件窝 干货文章 如何在Linux上配置高可用的分布式数据库

如何在Linux上配置高可用的分布式数据库

节点 etcd Cluster 配置 288    来源:    2025-04-15

Linux上配置高可用分布式数据库方案

主流高可用分布式数据库选择

  1. PostgreSQL高可用方案

    • Patroni + etcd/Consul/ZooKeeper
    • PostgreSQL流复制 + repmgr
    • PostgreSQL + pgpool-II
  2. MySQL高可用方案

    • MySQL Group Replication
    • Galera Cluster (Percona XtraDB Cluster/MariaDB Galera Cluster)
    • MySQL InnoDB Cluster (MySQL Shell + MySQL Router + Group Replication)
  3. NoSQL高可用方案

    • MongoDB副本集
    • Redis Sentinel/Redis Cluster
    • Cassandra集群

PostgreSQL高可用配置示例(Patroni+etcd)

1. 环境准备

  • 至少3个Linux节点(CentOS/Ubuntu等)
  • 每个节点安装PostgreSQL、Patroni和etcd

2. 安装步骤

# 在所有节点上安装必要软件
# CentOS示例
sudo yum install -y postgresql12 postgresql12-server postgresql12-contrib
sudo yum install -y etcd patroni

3. 配置etcd集群(3节点示例)

# 节点1配置(/etc/etcd/etcd.conf)
ETCD_NAME=etcd1
ETCD_DATA_DIR="/var/lib/etcd/etcd1"
ETCD_LISTEN_PEER_URLS="http://10.0.0.1:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.0.1:2379,http://localhost:2379"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.0.1:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.0.1:2379"
ETCD_INITIAL_CLUSTER="etcd1=http://10.0.0.1:2380,etcd2=http://10.0.0.2:2380,etcd3=http://10.0.0.3:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

4. 配置Patroni

# /etc/patroni.yml 示例
scope: postgres_cluster
namespace: /service/
name: postgresql1

restapi:
  listen: 0.0.0.0:8008
  connect_address: 10.0.0.1:8008

etcd:
  hosts: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    postgresql:
      use_pg_rewind: true
      use_slots: true
      parameters:
        max_connections: 100
        shared_buffers: 1GB
        dynamic_shared_memory_type: posix

  initdb:
  - encoding: UTF8
  - data-checksums

  pg_hba:
  - host replication replicator 127.0.0.1/32 md5
  - host replication replicator 10.0.0.0/24 md5
  - host all all 0.0.0.0/0 md5

postgresql:
  listen: 0.0.0.0:5432
  connect_address: 10.0.0.1:5432
  data_dir: /var/lib/pgsql/12/data
  bin_dir: /usr/pgsql-12/bin
  pgpass: /tmp/pgpass
  authentication:
    replication:
      username: replicator
      password: securepassword
    superuser:
      username: postgres
      password: securepassword
  parameters:
    unix_socket_directories: '.'

tags:
  nofailover: false
  noloadbalance: false
  clonefrom: false
  nosync: false

5. 启动服务

# 启动etcd
sudo systemctl start etcd
sudo systemctl enable etcd

# 启动Patroni
sudo systemctl start patroni
sudo systemctl enable patroni

MySQL Galera Cluster配置示例(3节点)

1. 安装Percona XtraDB Cluster

# 在所有节点上执行
sudo yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
sudo percona-release setup pxc57
sudo yum install -y Percona-XtraDB-Cluster-57

2. 配置第一个节点

# /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# Galera配置
wsrep_provider=/usr/lib64/galera3/libgalera_smm.so
wsrep_cluster_name=pxc_cluster
wsrep_cluster_address=gcomm://
wsrep_node_name=pxc1
wsrep_node_address=10.0.0.1
wsrep_sst_method=xtrabackup-v2
wsrep_sst_auth="sstuser:s3cretPass"
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

3. 启动第一个节点

sudo systemctl start mysql@bootstrap.service

4. 配置其他节点

# 节点2配置(/etc/my.cnf)
wsrep_cluster_address=gcomm://10.0.0.1,10.0.0.2,10.0.0.3
wsrep_node_name=pxc2
wsrep_node_address=10.0.0.2

5. 启动其他节点

sudo systemctl start mysql

高可用最佳实践

  1. 网络配置

    • 使用专用网络进行节点间通信
    • 配置防火墙允许集群端口通信
  2. 监控与告警

    • 部署Prometheus + Grafana监控集群状态
    • 设置关键指标告警(复制延迟、节点状态等)
  3. 备份策略

    • 定期全量备份 + WAL/二进制日志增量备份
    • 测试备份恢复流程
  4. 负载均衡

    • 使用HAProxy或Keepalived实现读写分离
    • 配置连接池管理
  5. 安全考虑

    • 启用SSL/TLS加密通信
    • 定期轮换凭据
    • 限制管理接口访问

故障处理建议

  1. 脑裂情况处理预案
  2. 自动故障转移测试
  3. 维护窗口操作流程
  4. 版本升级策略

根据您的具体需求(读写比例、数据量大小、一致性要求等),可以选择最适合的高可用分布式数据库方案。如需更详细的特定方案配置,请提供更多关于您应用场景的信息。