1. 架构
PolarDB-X 采用 Shared-nothing 与存储计算分离架构进行设计,系统由4个核心组件组成。
- 计算节点(CN, Compute Node)
计算节点是系统的入口,采用无状态设计,包括 SQL 解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务 2PC 协调、全局二级索引维护等,同时提供 SQL 限流、三权分立等企业级特性。
- 存储节点(DN, Data Node)
存储节点负责数据的持久化,基于多数派 Paxos 协议提供数据高可靠、强一致保障,同时通过 MVCC 维护分布式事务可见性。
- 元数据服务(GMS, Global Meta Service)
元数据服务负责维护全局强一致的 Table/Schema, Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。
- 日志节点(CDC, Change Data Capture)
日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容 MySQL Replication 协议的主从复制能力。
2. 安装
2.1. 环境规划
操作系统 | ip | 主机名 | |
华为欧拉Euler | 192.168.50.56 | db01 | Leader |
华为欧拉Euler | 192.168.50.57 | db02 | Follower |
华为欧拉Euler | 192.168.50.58 | db03 | Follower |
2.2. RPM 包下载
官方下载地址:Releases · polardb/polardbx-engine · GitHub
百度网盘:
通过网盘分享的文件:t-polardbx-engine-8.4.19-20241112.el7.x86_64.rpm
链接: 百度网盘 请输入提取码 提取码: vbdi
[root@db01 opt]# ls -lst t*
651356 -rw-r--r-- 1 root root 666980944 2月 5 14:55 t-polardbx-engine-8.4.19-20241112.el7.x86_64.rpm
[root@db01 opt]#
2.3. RPM 包安装(root 用户,三个节点执行)
2.3.1. yum 配置(root 用户,三个节点执行)
mount /dev/cdrom /mnt
cd /etc/yum.repos.d
mkdir bk
mv *.repo bk/
echo "[EL]" >> /etc/yum.repos.d/hefei.repo
echo "name =Linux 7.x DVD" >> /etc/yum.repos.d/hefei.repo
echo "baseurl=file:///mnt" >> /etc/yum.repos.d/hefei.repo
echo "gpgcheck=0" >> /etc/yum.repos.d/hefei.repo
echo "enabled=1" >> /etc/yum.repos.d/hefei.repo
cat /etc/yum.repos.d/hefei.repo
2.3.2. 执行安装(root 用户,三个节点执行)
[root@db01 opt]# yum install -y t-polardbx-engine-8.4.19-20241112.el7.x86_64.rpm
无法连接BC-Linux的YUM源服务器。
上次元数据过期检查:0:01:30 前,执行于 2025年02月05日 星期三 14时59分33秒。
依赖关系解决。
=========================================================================================================================================================Package Architecture Version Repository Size
=========================================================================================================================================================
安装:t-polardbx-engine x86_64 8.4.19-20241112.el7 @commandline 636 M事务概要
=========================================================================================================================================================
安装 1 软件包总计:636 M
安装大小:2.8 G
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务准备中 : 1/1运行脚本: t-polardbx-engine-8.4.19-20241112.el7.x86_64 1/1安装 : t-polardbx-engine-8.4.19-20241112.el7.x86_64 1/1运行脚本: t-polardbx-engine-8.4.19-20241112.el7.x86_64 1/1
Copying /u01/xcluster80_20241112_current to /u01/xcluster80
Copying /u01/xcluster80_20241112_current to /u01/xcluster80_20241112验证 : t-polardbx-engine-8.4.19-20241112.el7.x86_64 1/1已安装:t-polardbx-engine-8.4.19-20241112.el7.x86_64完毕!
[root@db01 opt]#
2.3.3. 启动 DN(root 用户,三个节点执行,注意server_id 不能一样)
# 创建并切换到 polarx 用户
useradd -ms /bin/bash polarx
echo "polarx:polardb@2025" | chpasswd
echo "polarx ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
su - polarx# 创建必要目录
mkdir polardbx-engine
cd polardbx-engine && mkdir log mysql run data tmp# 准备一份 my.cnf 文件,可以参考末尾的模板,放置于当前目录
vi my.cnf###### my.cnf 模板
[mysqld]
basedir = /opt/polardbx_engine
log_error_verbosity = 2
default_authentication_plugin = mysql_native_password
gtid_mode = ON
enforce_gtid_consistency = ON
log_bin = mysql-binlog
binlog_format = row
binlog_row_image = FULL
master_info_repository = TABLE
relay_log_info_repository = TABLE
# 忽略大小写
lower_case_table_names=1# change me if needed
datadir = /home/polarx/polardbx-engine/data
tmpdir = /home/polarx/polardbx-engine/tmp
socket = /home/polarx/polardbx-engine/tmp.mysql.sock
log_error = /home/polarx/polardbx-engine/log/alert.log
port = 4886
cluster_id = 1234
cluster_info = 127.0.0.1:14886@1
server_id = 2712347955[mysqld_safe]
pid_file = /home/polarx/polardbx-engine/run/mysql.pid
###### my.cnf 模板注意:如果以三副本模式运行,my.cnf 中的 server_id 参数在三个副本节点需要配置为不同的值---单节点执行(这里是集群,不执行下面,只是记录)
----# 初始化,如果 my.cnf 不在当前目录,请将下述命令的 my.cnf 改成绝对路径
----/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf --initialize-insecure----# 启动
---/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf &
2.4. 高可用部署
在 3 台机器上,按前述步骤,安装 RPM 后,准备好 my.cnf 和目录 (如果有任何步骤失败,请完全清理 log mysql run data tmp
等目录,重新创建。)。 然后在 3 个机器上,分别按如下方式启动:
su - polarx
cd polardbx-engine# 192.168.50.56 上执行
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-info='192.168.50.56:14886;192.168.50.57:14886;192.168.50.58:14886@1' \
--initialize-insecure/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='192.168.50.56:14886;192.168.50.57:14886;192.168.50.58:14886@1' \
&# 192.168.50.57 上执行
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-info='192.168.50.56:14886;192.168.50.57:14886;192.168.50.58:14886@2' \
--initialize-insecure/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='192.168.50.56:14886;192.168.50.57:14886;192.168.50.58:14886@2' \
&# 192.168.50.58 上执行
/opt/polardbx_engine/bin/mysqld --defaults-file=my.cnf \
--cluster-info='192.168.50.56:14886;192.168.50.57:14886;192.168.50.58:14886@3' \
--initialize-insecure/opt/polardbx_engine/bin/mysqld_safe --defaults-file=my.cnf \
--cluster-info='192.168.50.56:14886;192.168.50.57:14886;192.168.50.58:14886@3' \
&
稍等片刻,即可登录数据库。如果直接使用本文的 my.cnf 模板,可以用mysql -h127.0.0.1 -P4886 -uroot
登录数据库。 (需要预先在机器上安装 mysql 客户端,centos 系统可以使用 yum install -y mariadb安装。)
[root@db01 ~]# mysql -h127.0.0.1 -P4886 -uroot
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.32-X-Cluster-8.4.19-20241112 Source distributionCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]>
数据库启动完成后,我们登录数据库,验证一下集群的状态。(需要在 Leader 节点执行)
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL;
+-----------+---------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| SERVER_ID | IP_PORT | MATCH_INDEX | NEXT_INDEX | ROLE | HAS_VOTED | FORCE_SYNC | ELECTION_WEIGHT | LEARNER_SOURCE | APPLIED_INDEX | PIPELINING | SEND_APPLIED |
+-----------+---------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| 1 | 192.168.50.56:14886 | 2 | 0 | Leader | Yes | No | 5 | 0 | 1 | No | No |
| 2 | 192.168.50.57:14886 | 2 | 3 | Follower | Yes | No | 5 | 0 | 2 | Yes | No |
| 3 | 192.168.50.58:14886 | 2 | 3 | Follower | Yes | No | 5 | 0 | 2 | Yes | No |
+-----------+---------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
3 rows in set (0.001 sec)MySQL [(none)]>
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_LOCAL \G
*************************** 1. row ***************************SERVER_ID: 1CURRENT_TERM: 127CURRENT_LEADER: 192.168.50.56:14886COMMIT_INDEX: 2LAST_LOG_TERM: 127LAST_LOG_INDEX: 2ROLE: LeaderVOTED_FOR: 1LAST_APPLY_INDEX: 1
SERVER_READY_FOR_RW: YesINSTANCE_TYPE: Normal
1 row in set (0.001 sec)
2.4.1. 指定IP切换Leader
call dbms_consensus.change_leader("192.168.50.57:14886");MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL;
ERROR 2013 (HY000): Lost connection to MySQL server during query --- 需要在 Leader 节点执行
MySQL [(none)]>--Leader 节点执行 192.168.50.57上执行
MySQL [(none)]> SELECT * FROM INFORMATION_SCHEMA.ALISQL_CLUSTER_GLOBAL;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 21
Current database: *** NONE ***+-----------+---------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| SERVER_ID | IP_PORT | MATCH_INDEX | NEXT_INDEX | ROLE | HAS_VOTED | FORCE_SYNC | ELECTION_WEIGHT | LEARNER_SOURCE | APPLIED_INDEX | PIPELINING | SEND_APPLIED |
+-----------+---------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
| 1 | 192.168.50.56:14886 | 3 | 4 | Follower | Yes | No | 5 | 0 | 3 | Yes | No |
| 2 | 192.168.50.57:14886 | 3 | 0 | Leader | Yes | No | 5 | 0 | 2 | No | No |
| 3 | 192.168.50.58:14886 | 3 | 4 | Follower | Yes | No | 5 | 0 | 3 | Yes | No |
+-----------+---------------------+-------------+------------+----------+-----------+------------+-----------------+----------------+---------------+------------+--------------+
3 rows in set (0.003 sec)MySQL [(none)]>
2.5. 数据库操作
2.5.1. 数据插入测试
CREATE DATABASE db1;
USE db1;
CREATE TABLE tb1 (id int);
INSERT INTO tb1 VALUES (0), (1), (2);MySQL [db1]> select * from tb1;
+------+
| id |
+------+
| 0 |
| 1 |
| 2 |
+------+
3 rows in set (0.001 sec)
2.5.2. 修改数据库的密码
alter user root@localhost identified by "123456";[root@db01 ~]# mysql -h127.0.0.1 -P4886 -uroot
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)[root@db01 ~]# mysql -h127.0.0.1 -P4886 -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 8.0.32-X-Cluster-8.4.19-20241112 Source distributionCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MySQL [(none)]>
安装的虚拟机:
百度网盘 请输入提取码 提取码: grgi