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:
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
--- Audit Log ---
問題:
Audit Log在哪裡?
# 日誌初始儲存位置
/home/mysql/data{port}/tmp
可透過Rds_audit_log_dir變量控制
# 數據庫內查看相關變量
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對流量進行限制,放行8080port後訪問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}
留言
張貼留言