一.环境描述:
四台机器:
test1 192.168.1.1
test2 192.168.1.2
test3 192.168.1.3
test4 192.168.1.4
其中:
192.168.1.1/2/3为GMS
192.168.1.2/3/4为CN
192.168.1.1/2/3为DN
192.168.1.1/2/4为CDC
二.centos关闭防火墙和SELINUX安全策略:
停止防火墙:
# systemctl stop firewalld.service
禁止开机启动
# systemctl disable firewalld
关闭selinux安全策略:
修改/etc/selinux/config文件,
将SELINUX=enforcing修改为SELINUX=disabled
# setenforce 0
# vi /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
# getenforce
Permissive
二.安装docker20.10版本
备注:
集群模式下,docker engine 版本需要大于等于18.04
--删除以前的低版本docker(如果存在):
# yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# yum-config-manager --enable docker-ce-nightly
# yum-config-manager --enable docker-ce-test
添加阿里云yum源:
# sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# yum makecache fast
安装DOCKER引擎:
# yum install -y docker-ce docker-ce-cli containerd.io
启动Docker:
# systemctl start docker
设置开机自动启动docker:
# systemctl enable docker
设置docker镜像加速器:
# mkdir -p /etc/docker
# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://7z4jy2c8.mirror.aliyuncs.com"]
}
EOF
# systemctl daemon-reload
# systemctl restart docker
查看docker版本:
# docker version
Client: Docker Engine - Community
Version: 20.10.12
API version: 1.41
Go version: go1.16.12
Git commit: e91ed57
Built: Mon Dec 13 11:45:41 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.12
API version: 1.41 (minimum version 1.12)
Go version: go1.16.12
Git commit: 459d0df
Built: Mon Dec 13 11:44:05 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.12
GitCommit: 7b11cfaabd73bb80907dd23182b9347b4245eb5d
runc:
Version: 1.0.2
GitCommit: v1.0.2-0-g52b36a2
docker-init:
Version: 0.19.0
GitCommit: de40ad0
# docker --version
Docker version 20.10.12, build e91ed57
三.集群机器建配置免密登录
# 生成密钥对 (需要在每台机器上执行)
ssh-keygen -t rsa
# 复制免登公钥到目标机器,修改user和ip((需要在每台机器上执行)
ssh-copy-id root@{ip}
例如:
ssh-copy-id root@test1
ssh-copy-id root@test2
ssh-copy-id root@test3
ssh-copy-id root@test4
ssh免密登录测试:
# ssh test1
# ssh test2
# ssh test3
# ssh test4
确认彼此互联都不需要密码
四.安装MySQL客户端:
# yum install -y mysql mysql-devel
三. 在部署机上安装 PXD
.配置阿里的yum源:
1、备份原来的yum源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
2、安装wget工具
# yum install wget
3、设置aliyun的yum源
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
4、添加EPEL源
EPEL(http://fedoraproject.org/wiki/EPEL)是由 Fedora 社区打造,为 RHEL 及衍生发行版如 CentOS、Scientific Linux 等提供高质量软件包的项目。装上 EPEL后,可以像在 Fedora 上一样,可以通过 yum install package-name,安装更多软件。
# wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
5、清理缓存并生成新的缓存
# yum clean all
# yum makecache
# yum update -y
准备工作
1.安装 Python3
# yum install -y python3
创建一个 Python3 的 virtual environment 环境并激活
# python3 -m venv venv
# source venv/bin/activate
安装 PXD
安装前建议先执行如下命令升级pip
# pip install --upgrade pip
# pip --version
pip 21.3.1 from /root/venv/lib64/python3.6/site-packages/pip (python 3.6)
执行如下命令安装 pxd:
# pip install pxd
执行命令显示如下:
# pip install pxd
Collecting pxd
Downloading pxd-0.2.2-py3-none-any.whl (55 kB)
|████████████████████████████████| 55 kB 4.2 kB/s
Collecting six==1.16.0
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting urllib3==1.26.6
Downloading urllib3-1.26.6-py2.py3-none-any.whl (138 kB)
|████████████████████████████████| 138 kB 17 kB/s
Collecting websocket-client==1.2.1
Downloading websocket_client-1.2.1-py2.py3-none-any.whl (52 kB)
|████████████████████████████████| 52 kB 48 kB/s
Collecting humanfriendly==10.0
Downloading humanfriendly-10.0-py2.py3-none-any.whl (86 kB)
|████████████████████████████████| 86 kB 23 kB/s
Collecting idna==3.2
Downloading idna-3.2-py3-none-any.whl (59 kB)
|████████████████████████████████| 59 kB 11 kB/s
Collecting docker==5.0.0
Downloading docker-5.0.0-py2.py3-none-any.whl (146 kB)
|████████████████████████████████| 146 kB 12 kB/s
.................................................................
.................................................................
.................................................................
.................................................................
.................................................................
Collecting pycparser
Downloading pycparser-2.21-py2.py3-none-any.whl (118 kB)
|████████████████████████████████| 118 kB 17 kB/s
Using legacy 'setup.py install' for retrying, since package 'wheel' is not installed.
Using legacy 'setup.py install' for spurplus, since package 'wheel' is not installed.
Using legacy 'setup.py install' for icontract, since package 'wheel' is not installed.
Using legacy 'setup.py install' for temppathlib, since package 'wheel' is not installed.
Installing collected packages: pycparser, six, cffi, pynacl, cryptography, bcrypt, zipp, urllib3, typing-extensions, paramiko, idna, charset-normalizer, certifi, asttokens, websocket-client, temppathlib, spur, requests, importlib-metadata, icontract, spurplus, retrying, PyYAML, PyMySQL, pycryptodomex, humanfriendly, docker, colorama, click, pxd
Running setup.py install for temppathlib ... done
Running setup.py install for icontract ... done
Running setup.py install for spurplus ... done
Running setup.py install for retrying ... done
Successfully installed PyMySQL-1.0.2 PyYAML-5.4.1 asttokens-2.0.5 bcrypt-3.2.0 certifi-2021.5.30 cffi-1.15.0 charset-normalizer-2.0.4 click-8.0.1 colorama-0.4.4 cryptography-36.0.1 docker-5.0.0 humanfriendly-10.0 icontract-2.6.0 idna-3.2 importlib-metadata-4.8.3 paramiko-2.9.1 pxd-0.2.2 pycparser-2.21 pycryptodomex-3.10.1 pynacl-1.4.0 requests-2.26.0 retrying-1.3.3 six-1.16.0 spur-0.3.20 spurplus-2.3.4 temppathlib-1.1.0 typing-extensions-4.0.1 urllib3-1.26.6 websocket-client-1.2.1 zipp-3.6.0
准备 PolarDB-X 拓扑文件
编写如下的 YAML 文件polardbx.yaml,指定 PolarDB-X 集群的名称以及 GMS, CN,DN 的部署节点。
共有4台机器192.168.1.4、192.168.1.1、10.168.3.166、192.168.1.3
192.168.1.4,部署gms、cdc节点
192.168.1.1、10.168.3.166,部署cn/dn各两个节点。其中dn下的 host_group 表示一个dn节点多副本的部署机器,比如Paxos三副本的话需要填入三个ip。目前仅支持单副本模式,host_group 中填1个ip即可
# vi polardbx.yaml
version: v1
type: polardbx
cluster:
name: pxd
gms:
image: polardbx/galaxyengine:latest
host_group: [10.168.3.22]
host_group: [10.168.3.165]
host_group: [10.168.3.166]
cn:
image: polardbx/galaxysql:latest
replica: 3
nodes:
- host: 192.168.1.4
- host: 192.168.1.2
- host: 192.168.1.3
resources:
mem_limit: 2G
dn:
image: polardbx/galaxyengine:latest
replica: 3
nodes:
- host_group: [10.168.3.165]
- host_group: [10.168.3.166]
- host_group: [10.168.3.167]
resources:
mem_limit: 2G
cdc:
image: polardbx/galaxycdc:latest
replica: 3
nodes:
- host: 192.168.1.4
- host: 192.168.1.1
- host: 192.168.1.2
resources:
mem_limit: 2G
通过以上拓扑文件创建的 PolarDB-X 集群,拓扑文件包括如下属性:
version: 拓扑文件版本,无需修改
type: polardbx, 无需修改
cluster.name:PolarDB-X 集群名称
cluster.gms.image: gms docker 镜像名称,可不填。默认为最新镜像
cluster.gms.host_group: gms 机器 ip 列表,目前仅支持1台机器单副本模式,列表中填写1个ip即可
cluster.cn
image: 计算节点镜像名称,可不填,默认为最新镜像
replica: 计算节点数目,需要与nodes中的host数量对应
nodes: 计算节点的ip列表
resources: 计算节点使用的资源
mem_limit: 内存上限,默认 2G
cluster.dn
image: 数据节点镜像名称,可不填,默认为最新镜像
replica: 数据节点数目,需要与nodes中的 host_group 数量对应
nodes: 存储节点的host_group列表,一个 host_group 表示一个dn节点多副本的部署机器,比如Paxos三副本的话需要填入三个ip。目前仅支持单副本模式,host_group 中填1个ip即可
resources: 存储节点使用的资源
mem_limit: 内存上限,默认 2G
cluster.cdc
image: CDC 节点镜像名称,可不填,默认为最新镜像
replica: CDC 节点数目,需要与nodes中的host数量对应
nodes: CDC 节点的ip列表
resources: CDC 节点使用的资源
mem_limit: 内存上限,默认 2G
创建 PolarDB-X 集群
执行如下命令,即可在集群内一键部署 PolarDB-X:
# pxd create -file polardbx.yaml
部署完成后,pxd 会输出 PolarDB-X 集群的连接方式,通过 MySQL 命令行即可登录 PolarDB-X 数据库进行测试。
备注:执行该create命令之前,需要确认其他机器的docker服务已正常启动,用如下命令确认:
# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2021-12-27 23:10:18 PST; 7s ago
状态为active,说明已启动.
create pxd输出例子:
# pxd create -file polardbx.yaml
/root/venv/lib/python3.6/site-packages/deployer
yaml file: polardbx.yaml
/root/venv/lib64/python3.6/site-packages/deployer/pxc/polardbx_manager.py:73: YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
data = yaml.load(stream)
Processing [------------------------------------] 0% pre check
Processing [###---------------------------------] 8% generate topology
Processing [######------------------------------] 16% pull images
Pull image: polardbx/galaxysql:latest at 192.168.1.3
latest:Pulling from polardbx/galaxysql
Digest: sha256:38d187996c22c3da33512b55e0eecabd5a2f4b509e4e7106a0e5ed8081fb354b
Status: Image is up to date for polardbx/galaxysql:latest
Pull image: polardbx/galaxyengine:latest at 192.168.1.3
................................................................................
latest:Pulling from polardbx/galaxyengine
Digest: sha256:492b901453af500ac205705dc7fe042ad0dc3e7856049540eb398572093bd1f1
Status: Image is up to date for polardbx/galaxyengine:latest
Pull image: polardbx/galaxycdc:latest at 192.168.1.3
latest:Pulling from polardbx/galaxycdc
Digest: sha256:20458720a9ca7112fdbc37c789446dce512c77cbe2b6e11c0b72e51a43fdc831
Status: Image is up to date for polardbx/galaxycdc:latest
Pull image: polardbx/polardbx-init:latest at 192.168.1.3
latest:Pulling from polardbx/polardbx-init
Digest: sha256:41d4f23930d5bce8d176944a784b6b40c79d97b7faf5423d2077a1ba526b7b8c
Status: Image is up to date for polardbx/polardbx-init:latest
Pull image: polardbx/xstore-tools:latest at 192.168.1.3
.........................................................................................
.........................................................................................
.........................................................................................
.........................................................................................
12a7f5a1cc39:Download complete
5a07c0e531bd:Pull complete
12a7f5a1cc39:Extracting [==================================================>] 747B/747B
12a7f5a1cc39:Extracting [==================================================>] 747B/747B
12a7f5a1cc39:Pull complete
a051415d8576:Downloading [==================================================>] 212B/212B
a051415d8576:Verifying Checksum
a051415d8576:Download complete
a051415d8576:Extracting [==================================================>] 212B/212B
a051415d8576:Extracting [==================================================>] 212B/212B
a051415d8576:Pull complete
Digest: sha256:5c0b19954c18fd2347eee46dffd82c4babf7e57b2e405d8b4ccb4d5a647c19a7
Status: Downloaded newer image for polardbx/xstore-tools:latest
Processing [#########---------------------------] 25% create gms node
Processing [############------------------------] 33% create gms db and tables
Processing [###############---------------------] 41% create PolarDB-X root account
Processing [##################------------------] 50% create dn
Processing [#####################---------------] 58% register dn to gms
Processing [########################------------] 66% create cn
Processing [###########################---------] 75% wait cn ready
Processing [##############################------] 83% create cdc containers
Processing [#################################---] 91% wait PolarDB-X ready
Processing [####################################] 100%
PolarDB-X cluster create successfully, you can try it out now.
Connect PolarDB-X using the following command:
mysql -h192.168.1.4 -P4627 -upolardbx_root -pdAhmWJfL
mysql -h192.168.1.2 -P6730 -upolardbx_root -pdAhmWJfL
mysql -h192.168.1.3 -P11377 -upolardbx_root -pdAhmWJfL
连接PXD并创建用户:
mysql -h192.168.1.4 -P4627 -upolardbx_root -pdAhmWJfL
MySQL [(none)]> CREATE USER root@'%' identified by '123456';
Query OK, 0 rows affected (0.07 sec)
MySQL [(none)]> grant all on *.* to root@'%';
Query OK, 0 rows affected (0.03 sec)
MySQL [(none)]> select version();
+----------------------------+
| VERSION() |
+----------------------------+
| 5.6.29-PXC-5.4.12-20211018 |
+----------------------------+
1 row in set (0.00 sec)
用root用户登录:
# mysql -h192.168.1.2 -P6730 -uroot -p123456
MySQL [(none)]> select version();
+----------------------------+
| VERSION() |
+----------------------------+
| 5.6.29-PXC-5.4.12-20211018 |
+----------------------------+
1 row in set (0.00 sec)
# 检查GMS
MySQL>select * from information_schema.schemata;
# 创建分区表
MySQL>create database polarx_example partition_mode='partitioning';
MySQL>use polarx_example;
MySQL>create table example (
`id` bigint(11) auto_increment NOT NULL,
`name` varchar(255) DEFAULT NULL,
`score` bigint(11) DEFAULT NULL,
primary key (`id`)
) engine=InnoDB default charset=utf8
partition by hash(id)
partitions 8;
MySQL>insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500);
MySQL>select * from example;
MySQL>show topology from example;
# 检查CDC
MySQL>show master status ;
MySQL>show binlog events in 'binlog.000001' from 4;
# 检查DN和CN
MySQL>show storage ;
MySQL>show mpp ;
查看 PolarDB-X 集群状态
执行如下命令查看 PolarDB-X 集群状态:
# pxd list
PXD list 结果
执行如下命令可以查看 pxd 的更多指令及用法:
# pxd --help
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/15498/viewspace-2849755/ ,如需转载,请注明出处,否则将追究法律责任。