PolarFlex MySQL
單節點部署範例
前置條件
1. 初始化
# 解壓安裝包
tar -xf polarflex-{version}-{build-date}.tar.gz
cd polarflex-{version}-{build-date}/polarflex
# Python 環境初始化(需 root 權限)
./install.sh
# 確認安裝成功
pdbcli version
2. 本機 SSH 免密
# 生成 RSA key
ssh-keygen -t rsa
# 在 host00 寫入公鑰
ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.22.22.199
在 /polarflex/assets/ansible.cfg 中新增:
[defaults]
remote_port = 22
private_key_file = ~/.ssh/id_rsa
3. 配置 config.yaml
## file: config.yaml
all:
# 提供所有主机列表,确保 `root` 用户 SSH 免密码打通,部署后不要改动
hosts:
# 主机按照 hostNN 来命名,提供 ansible_host 指定主机 IP
host00:
ansible_host: 172.22.22.199 # 填上主機的內網IP
vars:
## cluster setup
# WARNING: don't change after DB cluster created.
cluster_id: mycluster
# 部署实例版本,默认支持部署版本为8.0
db_version: '8.0'
# 参数模板 可选值为default async performance
param_template: default
# db 实例结构,basic 模式下仅支持 1 DB 主节点, cluster 支持一主多备
category: basic
# metadb 主节点所在主机,如果未提供会用 all.children.metadb[0] 主机
primary_metadb_host: host00
# DB 主节点所在的主机,如果未提供会用 all.children.db[0] 主机
primary_db_host: host00
# proxy params
# PolarDB Proxy 工作并发 (default: 2)
polardb_proxy_concurrency: 2
# RW_TYPE为1时有效。主节点是否参与读请求的负载均衡。如果设置为false,则读请求不发往主库 (default: true)
polardb_proxy_master_accept_ready: true
# 是否开启事务拆分。设置为false时,事务所有请求路由到主库。如果设置为true,则事务中写之前的读请求可以路由到只读库。写之后的读还是路由到主库 (default: true)
polardb_proxy_trx_split: true
# 是否开启会话一致性。设置为false时,不保证会话内读写一致性。设置为true时,保证会话一致性。效果为同一个连接内,读请求一定能读到这个连接之前写入的数据 (default: true)
polardb_proxy_casual_reads: true
# 是否开启读写分离。设置为false时,所有请求路由到主库
polardb_proxy_rw_split: true
# [INTERNAL] - DON'T CHANGE FOLLOWING
## ansible vars
# ansible_user:
# ansible_password:
ansible_group_priority: 99
ansible_python_interpreter: /usr/bin/python3
# --
# 应用角色划分、配置
children:
# 以下为应用分组映射主机:
# - metadb - 元数据库 host
# - ha - HA 服务 hosts
# - dashboard - UI [可选]
metadb:
hosts:
host00:
metadb_port: 3400
var:
ha:
hosts:
host00:
var:
dashboard:
hosts:
host00:
port: 8080
# - db - DB 服务 hosts
db:
hosts:
host00:
# [REQUIRED] polardb_polar_hostid, host unique index
polardb_polar_hostid: 1
polardb_port: 3006
polardb_classMemory: 8192 # 示例值,单位为MB
polardb_classCPU: 4 # 示例值
vars:
補充:1.0.8 版 config.yaml 差異重點
# 1) metadb 需要在 vars 中指定規格(新增)
metadb:
hosts:
host00:
metadb_port: 3400
host01:
metadb_port: 3401
vars:
polardb_metadb_cpus:
polardb_metadb_memory:
# 2) db 規格欄位改名(舊欄位 polardb_classCPU / polardb_classMemory)
db:
vars:
polardb_db_cpus:
polardb_db_memory:
備註:若沿用舊版欄位(例如 polardb_classCPU / polardb_classMemory),在 1.0.8 可能不會生效,建議改成上述新欄位。
4-8. 安裝與初始化
# 4. rpm 包安裝部署
pdbcli install cluster
# 5. metadb 安裝
pdbcli init metadb
# 6. ha 組件安裝
pdbcli init ha
# 7. 創建 DB 集群
pdbcli create cluster
# 8. 創建 dashboard(可選)
pdbcli init dashboard
License 匯入錯誤與 metadb 啟動失敗
Issue:正常匯入 License 流程可完成。但在 pdbcli restart <metadb-xxx>
階段如果License檔案沒有放到正確位置就執行,就出現 License 檔案路徑錯誤,導致 metadb 啟動失敗。
正常匯入流程
1. 取得實例資訊並提交給阿里團隊,申請 license.tar.gz:
pdbcli license info
ok: [localhost] =>
msg: |-
ins_name: metadb-xxxxxxxx-20260430153147
DatabaseIdentifier:763445162xxxxxxxxxx,MacAddress:<>
ins_name: pm-xxxxxxxx
DatabaseIdentifier:763445343xxxxxxxxxx,MacAddress:<>
2. 解壓 license.tar.gz,並將檔案放到 license/ 目錄。
3. 重啟 metadb:
pdbcli restart <metadb-xxx>
TASK [Print license verification status] *******************************************************
ok: [10.0.0.1] =>
msg: 'License verification status: ... [Server] verify license success'
4. 重啟 HA 服務:
systemctl stop polardb_ha.service
systemctl start polardb_ha.service
systemctl status polardb_ha.service
5. 重啟 DB:
pdbcli restart <pm-xxxx>
TASK [Print license verification status] ********************************************************
ok: [10.0.0.1] =>
msg: 'License verification status: ... [Server] verify license success'
異常現象(metadb 認證 License 失敗)
pdbcli restart <metadb-xxx>
TASK [fail source path] ************************************************************************
fatal: [172.16.1.22]: FAILED! => changed=false
msg: 'Source path is: ../license/metadb-xxxxxxxx-20260430153920/763445353xxxxxxxxxx/license.lic'
影響:metadb 服務啟動失敗。
修復步驟
1. 先手動啟動 metadb:
/u01/mysql80_20251209/bin/mysqld_safe --defaults-file=/etc/my3400.cnf &
2. 確認並補齊正確的 License 目錄結構,再重新執行上述正常流程(從 metadb 重啟開始):
license/
├── metadb-xxxxxxxx-20260430153147
│ └── 763445162xxxxxxxxxx
│ └── license.lic
├── pm-xxxxxxxx
│ └── 763445343xxxxxxxxxx
│ └── license.lic
└── README.md
重點:ins_name 與 DatabaseIdentifier 對應的目錄層級必須正確,否則會在重啟 metadb 時出現 source path 錯誤。
Audit Log
問題:Audit Log 在哪裡?
日誌初始儲存位置如下,可透過 rds_audit_log_dir 變量控制:
/home/mysql/data{port}/tmp
在資料庫內查看相關變量:
show global variables like '%audit%';
日誌相關配置(需使用 root 登入資料庫):
set global rds_audit_log_row_limit = 2000000;
set global rds_audit_log_buffer_size = 167772160;
set global rds_audit_log_enabled = ON;
Web Dashboard
問題:使用 iptables 對流量進行限制,放行 8080 Port 後訪問 Web Dashboard 時無法顯示監控資訊。
原因:
放通8080Port時Web服務是沒有問題的。沒有出現監控資訊的原因是因為iptables沒有放通Polar其他核心服務。例如metadb和DNS服務
# 對單機部署,放通所有 loopback 流量
sudo iptables -I INPUT 1 -i lo -j ACCEPT
# 對多機部署,放通對應的 metadb 流量與 DNS 流量
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT -s {source_ip}
sudo iptables -A INPUT -p tcp --dport {metadb-port} -j ACCEPT -s {source_ip}附錄
查看 License 資料
cat /home/mysql/data<port>/dbs/license.lic
留言
張貼留言