基于 MySQL 的高可用集群配置
-
MySQL 主从复制集群:
- 环境准备 :准备至少两台服务器,要求系统配置相同或相似,网络连通,并且已安装相同版本的 MySQL 数据库。
- 配置主节点 :在主节点的配置文件中,开启二进制日志功能,设置服务器 ID,并指定二进制日志文件的存储位置等。例如,在
my.cnf文件中添加server-id=1、log-bin=mysql-bin等配置项。然后重启 MySQL 服务,并创建用于复制的用户,如CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';,并授予权限GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';。 - 配置从节点 :在从节点的配置文件中,同样需要设置唯一的服务器 ID 。然后重启 MySQL 服务,接下来需要获取主节点的二进制日志文件名和位置,使用
SHOW MASTER STATUS;命令查看。在从节点上执行CHANGE MASTER TO命令,指定主节点的 IP 地址、二进制日志文件名和位置、复制用户及密码等信息,如CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='master_log_file', MASTER_LOG_POS=master_log_pos;,最后启动从节点的复制线程,使用START SLAVE;命令。 - 验证复制功能 :在主节点上创建一个数据库和表,并插入一些数据,然后在从节点上查看是否成功同步了这些数据,以验证主从复制功能是否正常工作。为了提高集群的可用性,可以结合使用心跳机制和故障转移工具,如 Keepalived 或 MHA 等,实现主节点故障时的自动切换。
-
MySQL InnoDB Cluster:
- 部署 MySQL 实例 :在每台服务器上安装 MySQL 数据库,并进行基本的配置,如设置服务器 ID 、开启二进制日志等。可以使用 Docker 进行部署,方便管理和扩展,每台节点需创建目录结构,如
mkdir -p /usr/local/mysql/data,并配置my.cnf文件,包括插件配置、组复制核心配置、复制基础配置、实例基础配置等。 - 安装 MySQL Shell :在任意一台节点上安装 MySQL Shell,用于管理和操作 InnoDB Cluster。
- 初始化实例并创建集群 :使用 MySQL Shell 的
dba.configureInstance()函数初始化当前实例,然后使用dba.create_cluster('cluster_name')创建集群,之后通过dba.configureInstance()对其他节点进行配置,并使用cluster.addInstance()将它们加入到集群中。 - 部署 MySQL Router :在另一台服务器上部署 MySQL Router,用于实现读写分离和负载均衡。通过配置
docker-compose.yml文件,指定 MySQL Router 的相关参数,如MYSQL_HOST、MYSQL_PORT、MYSQL_USER、MYSQL_PASSWORD等,然后启动 MySQL Router 服务。
- 部署 MySQL 实例 :在每台服务器上安装 MySQL 数据库,并进行基本的配置,如设置服务器 ID 、开启二进制日志等。可以使用 Docker 进行部署,方便管理和扩展,每台节点需创建目录结构,如
-
MySQL 集群(NDB Cluster) :
- 环境准备 :规划好集群中的各类节点,包括管理节点、数据节点和 SQL 节点,并为它们准备相应的服务器或虚拟机,要求系统环境一致,网络连通。
- 配置管理节点 :创建配置文件
config.ini,定义管理节点、数据节点和 SQL 节点的相关信息,如主机名、数据目录等。 - 配置数据节点 :在每台数据节点上,启动
ndbd进程,并指定连接字符串,指向管理节点的 IP 地址。 - 配置 SQL 节点 :修改 SQL 节点的配置文件
my.cnf,添加ndbcluster和ndb-connectstring配置项,以启用 NDB Cluster 插件并连接到管理节点。 - 验证集群状态 :在管理节点上使用
ndb_mgm -e "SHOW"命令查看集群中各个节点的状态,确保它们都处于Started状态。
基于 PostgreSQL 的高可用集群配置
-
PostgreSQL 流复制集群:
- 配置主节点 :在主节点的
postgresql.conf文件中,设置wal_level=replica、max_wal_senders等参数,开启归档日志功能。然后创建复制用户,如CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'password';。 - 配置从节点 :在从节点的
postgresql.conf文件中,设置hot_standby=on等参数,然后在recovery.conf文件中,指定主节点的 IP 地址、端口号、复制用户及密码等信息,如primary_conninfo='host=master_ip port=5432 user=replicator password=password'。 - 启动复制 :启动主节点和从节点的 PostgreSQL 服务,从节点会自动连接到主节点并开始进行数据同步。可以通过查询系统目录视图
pg_stat_replication来查看复制状态。
- 配置主节点 :在主节点的
-
PostgreSQL + Patroni + etcd 集群:
- 部署 etcd 集群 :在多台服务器上安装和配置 etcd,形成一个 etcd 集群,用于存储集群的配置信息和提供协调服务。
- 安装 Patroni :在每台 PostgreSQL 服务器上安装 Patroni,并配置 Patroni 的配置文件,指定 etcd 的连接信息、PostgreSQL 的配置参数等。
- 启动 Patroni :启动 Patroni 服务,它会根据配置文件中的设置,自动管理 PostgreSQL 的启动、停止、主从切换等操作,实现高可用的 PostgreSQL 集群。
基于 Kubernetes 的高可用数据库集群配置
-
使用 StatefulSet 和主从复制实现 MySQL 高可用:
- 部署架构设计 :核心组件包括 StatefulSet、Headless Service、PersistentVolumeClaim、ConfigMap & Secret 等。StatefulSet 用于确保 Pod 有序部署和稳定的网络标识,Headless Service 为 Pod 提供 DNS 解析,PersistentVolumeClaim 保障数据持久化,ConfigMap & Secret 用于安全管理配置和密码。
- 配置 StatefulSet :在 StatefulSet 的配置文件中,设置副本数量为多个,如 3 个,并通过环境变量等方式指定主从节点的配置,如主节点的
server-id、从节点的read-only等参数,以及复制用户和密码等信息。可以通过覆盖容器启动命令来实现主从节点的不同配置。 - 部署和管理 :将 StatefulSet 配置文件应用到 Kubernetes 集群中,Kubernetes 会自动创建多个 MySQL Pod,并根据配置进行主从复制的初始化和数据同步。
-
使用 Helm 部署高可用 MySQL 集群 :
- 添加 Helm 仓库 :添加包含 MySQL 集群 Chart 的 Helm 仓库,如 Bitnami 仓库。
- 安装 MySQL 集群 :使用
helm install命令安装 MySQL 集群,并指定架构为 replication,以及相关的配置参数,如管理员密码、副本数量等,Helm 会根据 Chart 的定义和配置参数,自动完成 MySQL 集群的部署和配置。
基于 Pacemaker 和 Corosync 的高可用数据库集群配置
- 准备工作 :准备至少两台物理或虚拟机,安装 MySQL 数据库和 Pacemaker 相关软件。
- 配置 Corosync :配置集群通信和配置管理,包括设置集群节点的 IP 地址、通信端口等信息。
- 配置 Pacemaker :定义资源约束、资源顺序、资源依赖等策略,将 MySQL 服务作为资源进行管理,并配置其启动、停止等操作的命令和参数。
- 配置 MySQL 数据库 :在每台节点上配置 MySQL 数据库,包括主从复制等高可用配置。
- 启动和测试 Pacemaker :启动 Pacemaker 服务,并测试其高可用性,如在一台节点上停止 MySQL 服务或 Pacemaker 服务,观察另一台节点是否自动接管服务。