使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
1. 创建资源
开始实验之前,您需要先创建实验相关资源。
- 在实验室页面,单击创建资源。
- (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。
说明:资源创建过程需要3~5分钟(视资源不同开通时间有所差异,ACK等资源开通时间较长)。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。
实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。
资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息
2. 机器环境准备
注意:
- 在后面的操作步骤中,第一句话写明了在哪些机器上做这个步骤的操作,千万不要搞错了机器。
本次使用的机器列表如下:
- polardb01: 部署clup管理端,部署iSCSI服务端
- polardb02: clup-agent 部署clup-agent,部署iSCSI客户端,运行PolarDB
- polardb03: clup-agent 部署clup-agent,部署iSCSI客户端,运行PolarDB
- polardb04: clup-agent 部署clup-agent,部署iSCSI客户端,运行PolarDB
云桌面中打开chorminum浏览器,登陆阿里云的控制台:
点击展开显示RAM用户登录所需要的用户名和密码信息:
输入或者粘贴密码登录:
登陆后,点击云服务器进入云服务器ECS控制台:
点远程连接:
这时出现的界面为workbench(workbench是阿里云提供的在WEB界面访问主机的命令行工具)。
用左侧的”云产品资源“中的密码登陆主机。
重复上面的操作,分别登陆另外三台云主机,这样四台云主机都登陆了,界面显示如下:
为了操作方便,我们把4台主机的workbench窗口依次排列,同时为了为了便于分辨,我们把四台云主机的名称分别改成polardb01、polardb02、polardb03、polardb04,注意需要把实验界面中的”云产品资源“中的”云服务器 ECS-1“的主机的名称改成polardb01,”云服务器 ECS-2“的主机的名称改成polardb02,”ECS-3“的主机的名称改成polardb03,”云服务器 ECS-4“的主机的名称改成polardb04,次序千万不要搞错了,因为只有第一台机器上才有数据盘,如果搞错了,后续的步骤会出错。如下图所示:
在终端中输入下面的命令给主机改名:
hostnamectl set-hostname XXXXXX
上面的命令中”XXXXXX“对于四台不同的主机分别为polardb01、polardb02、polardb03、polardb04。
然后输入exit退出后重新登陆:
这时可以看到主机名都改成了容易记忆的主机名polardb01、polardb02、polardb03、polardb04了:
3. 安装和启动iSCSI服务端程序
在第一台机器polardb01中安装iscsi服务端程序,在终端中运行下面的命令:
yum install -y scsi-target-utils.x86_64
如下图所示:
创建配置文件
vi /etc/tgt/conf.d/polardisk.conf
复制如下内容到配置文件中:
<target iqn.2008-09.polardb.com:target1> backing-store /dev/vdb </target>
上面配置中的“/dev/vdb”就是我们为PolarDB准备的数据盘。
上面的iqn.2008-09.polardb.com:target1是iSCSI的target名称,后面在iSCSI的客户端机器上挂盘时会用到这个target名称。
启动iSCSI服务端的服务:
systemctl enable tgtd systemctl start tgtd
运行命令systemctl status tgtd看服务是否启动成功:
如果上面的状态是"active (running)",表示启动成功。
4. 安装和启动iSCSI客户端程序
在第2台、第3台、第4台机器上做下面的操作。
安装iscsi客户端程序:
yum install -y iscsi-initiator-utils
启动iSCSI客户端服务:
systemctl start iscsi
挂载iSCSI共享盘:
用下面命令查看iSCSI服务端提供了哪些target名称(target名称你可以认为是一个服务名):
iscsiadm -m discovery -t st -p XXX.XXX.XXX.XXX:3260 iscsiadm -m node -T iqn.2008-09.polardb.com:target1 -l
上面的"XXX.XXX.XXX.XXX"是第一台机器的私有地址IP,请换成你实际的IP地址。
实际运行的效果如下:
这样我们就把第一台机器上的iSCSI盘共享的挂载到了第二台、第三台、第四台机器上了。
使用命令查看磁盘信息,命令如下
lsblk
发现挂过来的iSCSI盘是sda:
5. 配置共享盘的盘符
在第2台、第3台、第4台机器上做下面的操作。
本步骤是为了让共享盘变成一个/dev/nvme1n1的链接文件。因为PolarDB要求共享盘的路径是/dev/nvmeXnY的,而iSCSI挂过来的盘是/dev/sdX,所以我们加一个udev规则来建一个链接/dev/nvme1n1,其指向iSCSI共享盘。如果是把PolarDB运行在SAN共享存储上,也是可以这样的。
首先,查询我们将要使用到的ID_PATH信息,获得ID_PATH的方法是查看/dev/disk/by-path下的链接文件,命令如下:
ls -l /dev/disk/by-path
从上面可以看出我们挂载过来的sda盘的链接为”ip-172.16.1.2:3260-iscsi-iqn.2008-09.polardb.com:target1-lun-1",这就是我们需要的ID_PATH值,可以将其复制下来。
接下来使用vi命令打开我们的配置文件/etc/udev/rules.d/pfs_disk.rules:
vi /etc/udev/rules.d/pfs_disk.rules
在打开的文件中是空白的,键入 i 进行文档编辑,我们可以将如下配置复制进去,其中的ID_PATH一栏中的值,应当换成我们刚才查询到的实际值。
ACTION=="add|change", SUBSYSTEMS=="block", ENV{ID_PATH}=="ip-172.16.1.2:3260-iscsi-iqn.2008-09.polardb.com:target1-lun-1" SYMLINK+="nvme1n1"
然后键入Esc,输入:wq命令进行保存退出文档。
然后再运行命令:
udevadm test /block/sda
让规则生效,这时规则会生成一个链接文件:/dev/nvme1n1
使用如下命令就可以看到设置结果:
ls -l /dev/nvme1n1
6. 安装clup-server模块
在第一台机器上操作。
安装clupmdb模块,下载clupmdb安装包:
wget https://gitee.com/csudata/clup-community/releases/download/4.4.8/clupmdb4.0.0.el7.x86_64.bin
运行:bash clupmdb4.0.0.el7.x86_64.bin:
bash clupmdb4.0.0.el7.x86_64.bin
查看到==== Installation is complete.提示信息后,则表示安装完成。
安装clup-server模块,下载clup-server安装包:
wget https://gitee.com/csudata/clup-community/releases/download/4.4.8/clup4.4.8.el7.x86_64.bin
运行:bash clup4.4.8.el7.x86_64.bin:
bash clup4.4.8.el7.x86_64.bin
在出现==== Installation is complete.的提示信息则表示安装完成
安装完后,就可以用浏览器查看clup的界面的。在浏览器中输入:http://XXX.XXX.XXX.XXX:8090 ,其中XXX.XXX.XXX.XXX是第一台机器的公网IP地址,请换成实际的公网地址,在登陆页面中,用户名为admin,密码默认为:cstech ,登陆系统后出现CLup管理界面:
7. 安装clup-agent
在第2台、第3台、第4台机器上做下面的操作。
下载clup-agent安装程序:
wget https://gitee.com/csudata/clup-community/releases/download/4.4.8/clup-agent4.4.8.el7.x86_64.bin
运行:bash clup-agent4.4.8.el7.x86_64.bin:
[root@polardb-01 ~]# bash clup-agent4.4.8.el7.x86_64.bin ==== Installation is starting ... ==== Your ip is 172.16.2.252/24 Enter Clup Server IP Addr:
这时上面的命令要求输入clup-server的地址,即第一台主机的地址,输入第一台主机的私有地址172.16.2.1(应改成实际地址),注意千万不要输入错了,然后继续:
出现上述提示则表示安装成功
如果上面的过程中把clup-server的地址输入错误了,则手工编辑/opt/clup-agent/conf/clup-agent.conf中的地址为正确的值,然后重启clup-agent服务:
systemctl restart clup-agent
clup-agent正确启动后,到CLup的WEB管理界面中可以看到这三个clup-agent:
8. 安装PolarDB程序
在polardb02和polardb03和polardb04机器上做下面的操作。
安装PolarDB程序需要的依赖包:
yum install -y libaio.x86_64 libaio-devel.x86_64
下载编译好的PolarDB:
wget https://gitee.com/csudata/zqpolardb/releases/download/11.9.2/polardb-11.9.2.20230314.el7.x86_64.tar.xz
解压安装:
tar xf polardb-11.9.2.20230314.el7.x86_64.tar.xz cd polardb_20230314 ./install.sh
实际的安装过程:
9. 初始化PolarDB共享盘上的文件系统
只需要在polardb02、polardb03、polardb04中其中一台机器上做下面的操作即可,如选择在polardb02机器上执行即可。
执行:
pfs -C disk mkfs nvme1n1
实际执行的效果如下:
格式化成功后,可以看到"pfs mkfs succeeds"的信息:
这时我们成功的在共享磁盘上格式化好了文件系统,可以用命令:
pfs ls /nvme1n1/
查看共享磁盘中的文件系统的情况:
10. 使用CLup创建PolarDB高可用集群
进入到CLup的WEB管理界面中,进入到”系统管理“的"clup参数设置"中:
在上面的界面的搜索框中输入"pg_bin_path_string",然后把滚动条拉到最右边:
点上面界面中的"修改" 按钮:
在上面的界面中,把PolarDB软件的路径/usr/polardb_pfs/bin加入,注意由于是添加一个路径,前面要有一个英文逗号。即多个路径是由逗号分隔的。
进入到“HA集群“的"集群定义"中:
点上面的”创建Polardb共享存储集群",出现下面的界面:
在上面的界面中:选择第二台机器即名称为polardb02,操作系统用户输入polardb,UID输入751,数据库软件选择PolarDB的软件路径/usr/polardb_pfs/bin,
数据目录输入/data/polardb,优先级保持为0,防脑裂reset命令输入/bin/true,然后点 添加按钮,这台机器就做为主库添加进来了。
依次把第三台机器、第四台机器加入:
点下一步:
上面界面中,集群名称可以输入一个容易记忆的名称,数据库端口输入5432,DB中的用户输入poalrdb,DB中的密码输入一个你自己记住的密码,流复制用户输入polardb,集群vip这里输入0.0.0.0表示不使用vip,pfs_disk_name这里要输入我们前面为共享做的链接文件/dev/nvme1n1中的nvme1n1,polar_datadir和pfsdaemon_params保持默认即可。
然后点“检测“按钮,需要等一会,如果共享盘检测通过,则会跳到下一页:
保持默认,点下一步即可:
保持默认,点提交即可,会出来一个创建PolarDB过程的进度框:
成功后,即完成了PolarDB数据库的创建。
进入到”数据库管理“中的”数据库列表“中,如果一主两备的数据库状态都是”运行中“,则表示创建成功:
11. PoalrDB的初步使用
在CLup的“数据库管理”中的“数据库列表中”,然后把滚动条拉到最右边:
点主库这一行的“更多”按钮,在弹出菜单中点psql,就进入了一个WEB的psql界面:
在上面的界面中,输入“\c postgres”切换到数据库postgres中,然后建一张表:
create table test01(id int primary key, t text);
我们再打开一个备库的WEB psql界面,可以看到这样表在备库也有了:
12. PoalrDB的跨节点并行的功能体验
在主库的WEB端的psql界面,往之前的测试表中插入一些测试数据:
create table pxtest(id int, n int, t text); insert into pxtest select seq, seq / 100000, md5(seq::text) from generate_series(1, 2000000) as seq;
如下图所示:
我们用如下命令查看一下执行计划:
explain select n, count(*) from pxtest group by n;
这时看到的是普通的执行计划。
我们执行下面的操作:
ALTER TABLE pxtest SET(px_workers=100); SET polar_enable_px = ON; SET polar_px_dop_per_node = 4;
然后再看执行计划,如下所示:
可以看到执行计划中有“PX Coordinator”,这就表示走跨节点的并行执行了。
13. 主备库切换测试
我们下面演示把第二台机器上的备库切换成主库,第一台机器上的主库变成备库的操作。
在CLup的WEB管理界面中:
在”HA集群“中的”HA管理中“:
点上面界面中的”详情“按钮,出现下面的界面:
在上面的界面中,在第二行的后面点”切换为主库"按钮:
点“确定”按钮,就会出现一个显示切换进度的窗口:
如果最后显示“Success”则表示切换成功了。
回到主界面后:
发现第二台变成了”master“,表示这时主库,第一台变成了“reader"表示是一个自读备库。
实验链接:https://developer.aliyun.com/adc/scenario/1945219614364904855ac7295dba6338