部署PXC集群

1. 部署架构设计

使用三台服务器64G、cpu16核、SSD Raid5 512G组成一个 PXC 集群,每台服务器部署一个 PXC 节点。这种设计具有天然的高可用性,满足 Galera Cluster 的 奇数节点规则,以避免脑裂问题。

服务器角色

服务器角色功能
Server APXC Node 1集群节点
Server BPXC Node 2集群节点
Server CPXC Node 3集群节点

网络规划

  • 内网 IP:用于节点间同步通信,确保低延迟和高带宽。
  • 开放端口:
    • 3306:MySQL 客户端连接。
    • 4567:节点间复制(主要流量)。
    • 4568:SST 数据传输。
    • 4444:集群控制消息。

硬件配置分配

  • CPU:为 MySQL 和 Galera 线程分配足够的核心(8 核以上)。
  • 内存
    • 分配给 MySQL 缓存:40GB
    • 保留系统和 Galera 运行:24GB
  • 存储
    • 使用 SSD,确保 IOPS 和低延迟。
    • 文件系统推荐 ext4xfs

2. 安装和配置 PXC

Ubuntu 20.04 安装与配置步骤。

2.1 环境准备

在三台服务器上执行以下操作:

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要工具
sudo apt install wget gnupg lsb-release -y

# 添加 Percona 仓库
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb
sudo dpkg -i percona-release_latest.generic_all.deb
sudo percona-release enable-only pxc-80 release

# 安装 PXC
sudo apt update
sudo apt install percona-xtradb-cluster -y

2.2 配置 PXC

编辑 /etc/mysql/my.cnf

[mysqld]
# 基础设置
server-id=1                        # 每台服务器设置唯一的 ID
datadir=/var/lib/mysql             # 数据存储路径
log_bin=/var/log/mysql/mysql-bin.log
binlog_format=ROW                  # 必须使用行级别复制
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2         # 避免自增 ID 冲突
wsrep_on=ON                        # 开启 Galera 支持
wsrep_provider=/usr/lib/galera3/libgalera_smm.so

# 集群配置
wsrep_cluster_name=pxc-cluster     # 集群名称(所有节点需一致)
wsrep_cluster_address=gcomm://192.168.1.101,192.168.1.102,192.168.1.103  # 集群节点 IP
wsrep_node_name=node1              # 当前节点名称(每台服务器唯一)
wsrep_node_address=192.168.1.101   # 当前节点的 IP 地址
wsrep_sst_method=xtrabackup-v2     # 使用 xtrabackup 做状态快照传输
wsrep_sst_auth="sstuser:password"  # SST 用户认证

# 性能优化
innodb_buffer_pool_size=40G        # 为 InnoDB 分配 40GB 缓存
innodb_log_file_size=1G            # 日志文件大小
innodb_flush_log_at_trx_commit=2   # 提高写性能(同时保障数据安全性)
sync_binlog=1                      # 开启二进制日志同步
max_connections=500                # 最大连接数

2.3 初始化集群

  1. 启动第一个节点(引导集群)
    在第一台服务器上执行:sudo systemctl stop mysql sudo mysqld --wsrep-new-cluster
  2. 启动其他节点
    在第二台和第三台服务器上执行:sudo systemctl start mysql
  3. 验证集群状态
    登录任意节点执行:mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';" 返回值为 3 表示集群正常运行。

3. 优化策略

为了充分利用服务器资源并提高集群性能,以下优化策略尤为重要:

3.1 性能优化

  1. 内存分配
    • 确保 innodb_buffer_pool_size 使用总内存的 60%-70%。
    • 避免 SWAP 影响性能。
  2. SST 优化
    • 使用 xtrabackup-v2,确保 SST 传输时对业务无影响。
    • 调整 wsrep_sst_auth 用户权限,确保安全性。
  3. 网络优化
    • 使用千兆或万兆网络。
    • 开启组播支持(如果网络环境允许)。
  4. 事务提交优化
    • 调整 innodb_flush_log_at_trx_commitsync_binlog,在性能和数据安全之间找到平衡。
  5. 并发优化
    • 设置 wsrep_slave_threads=8 或更高,提升事务重放效率。

3.2 高可用性优化

1、负载均衡haproxy配置:

安装:apt-get install haproxy -y

配置:/etc/haproxy/haproxy.cfg

global
    log 127.0.0.1 local0
    log 127.0.0.1 local1 warning
    maxconn 40000
    user haproxy
    group haproxy
    daemon
    stats socket /var/run/haproxy.sock mode 0600 level admin
    tune.bufsize 32768
defaults
    log global
    option dontlognull
    retries 2
    option redispatch
    maxconn 900000
    timeout connect         20s
    timeout client          550s
    timeout server          550s
    timeout http-request    550s
    timeout http-keep-alive 550s
listen  stats
    mode http
    bind 0.0.0.0:8090             #指定IP地址与Port
    stats enable                  #开启Haproxy统计状态
    stats refresh 3s              #统计页面自动刷新时间间隔
    stats hide-version            #状态页面不显示版本号
    stats uri   /admin            #统计页面的uri为"/allen"
    stats realm Haproxy\ admin    #统计页面认证时提示内容信息
    stats auth  admin:admin       #统计页面的用户名与密码
    stats admin if TRUE           #启用或禁用状态页面

frontend mysql_front
    bind *:3306
    mode tcp
    default_backend mysql_backend

backend mysql_backend
    mode tcp
    balance roundrobin
    server node1 192.168.1.101:3306 check
    server node2 192.168.1.102:3306 check
    server node3 192.168.1.103:3306 check

2、监控与告警

  • 部署 PMM (Percona Monitoring and Management) 监控集群性能。
  • 设置集群健康检查和节点状态告警。

3、节点故障恢复

3.3 数据备份

使用innobackupex  备份需要添加--galera-info
/usr/bin/innobackupex --socket=/tmp/mysql_3306.sock --user=root --password='admin' --galera-info --defaults-file=/etc/fookii.cnf \
   --stream=xbstream \
/data/backup| /usr/bin/lbzip2 -kv -n 10 > /data/backup/part_db_$(date +%Y-%m-%d).tar.gz

Leave a Reply

Your email address will not be published. Required fields are marked *.

*
*

en_USEnglish
Powered by TranslatePress