部署PXC集群
1. 部署架构设计
使用三台服务器64G、cpu16核、SSD Raid5 512G组成一个 PXC 集群,每台服务器部署一个 PXC 节点。这种设计具有天然的高可用性,满足 Galera Cluster 的 奇数节点规则,以避免脑裂问题。
服务器角色
服务器 | 角色 | 功能 |
---|---|---|
Server A | PXC Node 1 | 集群节点 |
Server B | PXC Node 2 | 集群节点 |
Server C | PXC Node 3 | 集群节点 |
网络规划
- 内网 IP:用于节点间同步通信,确保低延迟和高带宽。
- 开放端口:
- 3306:MySQL 客户端连接。
- 4567:节点间复制(主要流量)。
- 4568:SST 数据传输。
- 4444:集群控制消息。
硬件配置分配
- CPU:为 MySQL 和 Galera 线程分配足够的核心(8 核以上)。
- 内存:
- 分配给 MySQL 缓存:40GB。
- 保留系统和 Galera 运行:24GB。
- 存储:
- 使用 SSD,确保 IOPS 和低延迟。
- 文件系统推荐 ext4 或 xfs。
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 初始化集群
- 启动第一个节点(引导集群)
在第一台服务器上执行:sudo systemctl stop mysql sudo mysqld --wsrep-new-cluster
- 启动其他节点
在第二台和第三台服务器上执行:sudo systemctl start mysql
- 验证集群状态
登录任意节点执行:mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
返回值为3
表示集群正常运行。
3. 优化策略
为了充分利用服务器资源并提高集群性能,以下优化策略尤为重要:
3.1 性能优化
- 内存分配:
- 确保
innodb_buffer_pool_size
使用总内存的 60%-70%。 - 避免 SWAP 影响性能。
- 确保
- SST 优化:
- 使用
xtrabackup-v2
,确保 SST 传输时对业务无影响。 - 调整
wsrep_sst_auth
用户权限,确保安全性。
- 使用
- 网络优化:
- 使用千兆或万兆网络。
- 开启组播支持(如果网络环境允许)。
- 事务提交优化:
- 调整
innodb_flush_log_at_trx_commit
和sync_binlog
,在性能和数据安全之间找到平衡。
- 调整
- 并发优化:
- 设置
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