Centos7安装GBase8a V9.5_gbase data node端口还是集群服务端口-程序员宅基地

技术标签: gbase8a  数据库  

Centos7安装GBase8a V9.5

提前了解:
1)官方说明内存如果低于2G无法启动服务,所以安装测试环境的话建议机器内存不低于4G;
2)节点数:MPP集群安装的节点数为奇数;
3)软件包:官网可下载(https://www.gbase.cn/download/gbase-8a?category=INSTALL_PACKAGE)。我选择下载 GBase8a_MPP_Cluster-License-9.5.3.14-redhat7.3-x86_64.tar.bz2 ;
4)手册:官网可下载,官方手册里面有详细的安装和使用说明;
5)client连接工具:官网可下载  gccli-9.5.3.14-redhat7.3-x86_64.tar.bz2 ;
6)部署方式:支持两种部署方式:
a)对称部署:把所有服务(GCWare、GCluster、GNode)全部安装部署在同一个节点上,此时,该节点既是Coordinator节点、同时也是Data节点;
b)非对称部署:将GCware、GCluster 和 GNode 安装在不同的节点上,一个节点只属于Coordinator Cluster 或 Data Cluster,也可以既属于 Coordinator Cluster 又属于 Data Cluster;
7)相关端口:
Gcluster          5258          TCP      Coordinator 集群节点对外提供服务的端口
Gnode             5050          TCP      Data 集群节点对外提供服务的端口
Gcware            5918          TCP/UDP  gcware 节点间通讯端口
gcware            5919          TCP      外部连接 gcware 节点端口
syncServer        5288          TCP      syncServer 服务端口
GcrecoverMonit    6268          TCP      Gcrecover 服务端口
数据远程导出端口  16066-16166   TCP      数据远程导出端口

注意:
1)Coordinator Cluster 中要求在同一个网段,网络互通且通信质量优良。不只是能互通、还必须是同一网段;
2)Data Cluster 中要求网络互通且通信质量优良。能互通即可,不要求必须在同一网段;  
3)所有 Coordinator 集群节点的端口要求一致;所有 Data 集群节点的端口要求一致;所有的 gcware 集群节点的端口要求一致;

   
   
一、准备工作

1.基础依赖安装
yum install -y  psmisc  libcgroup  bc  bzip2

python2:一般Centos7默认最小安装会自动包括python2,所以这里无需单独安装。
执行命令 python --version 可查python的看版本信息。

Redhat8/Centos8 需要单独安装 python2,安装完 python2 后使用的命令为 python2,需要将 python2 命令改为默认的 python 命令:alternatives --set python /usr/bin/python2 (或 ln -s 设置软连接 /usr/bin/python)


2.hostname配置
hostnamectl set-hostname gbase8anode01

vi /etc/hosts
192.168.1.162 www.gbase8anode01.com gbase8anode01

vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=gbase8anode01


3.防火墙配置
systemctl  stop firewalld
systemctl  disable firewalld

sed -i "s/SELINUX=enforcing/SELINUX=disabled/g"  /etc/selinux/config
setenforce  0


4.时间&时区配置
timedatectl  set-timezone Asia/Shanghai

timedatectl set-time "2023-10-13 14:00:01"
或者
date -s "2023-10-13 14:00:01"

hwclock -w


5.系统配置:

OS允许的最大进程数设置:
vi /etc/systemd/system.conf
DefaultTasksMax=infinity


虚拟内存设置:

echo "
soft nofile 65535
hard nofile 70000
" >> /etc/security/limits.conf


官方文档时建议设置成无限制:

# ulimit -H -v unlimited
# ulimit -S -v unlimited

或修文件:

#vi /etc/security/limits.conf
* soft as unlimited          
* hard as unlimited

自己根据实际修改,测试环境安装时,此步骤为非必须的步骤。

注意:如果是安装用于生产的环境,则更多的配置优化,可以参考官方的产品手册,我这里只是搭建测试环境,有些官方推荐的其他优化配置这里并未修改。


6.重启
reboot

注意:如果是集群安装,则所有节点都进行上面相关操作,hostname按规划设置。

二、安装数据库

说明:
> 安装成功后会自动生成一个 /home/gbase/.gbase_profile 文件用于设置环境变量。
> GBase 8a MPP Cluster 数据库安装后,会有两个默认数据库用户 root 和 gbase。 
  root 用户密码初始为 “Admin2O11O531”,是数据库的超户。
  gbase 是数据库管理操作(如备份 gcrcman、 gcadmin 等)常用来连接 server 的数据库用户。
  初次登录数据库请使用 root 数据库用户, 在 root 数据库用户下及时更改 root 自己的密码并且给 gbase 数据库用户设置密码,妥善保管 root 数据库用户密码和 gbase 数据库用户密码,以便后续数据库管理操作能够正常连接server。
> 目录说明:
gcware:该目录在安装目录下,用于存储 gcware 的相关文件,包括配置文件和日志等, coordinator 节点有该目录, gnode 节点没有该目录。
gcluster:该目录在安装目录下,用于存储 gcluster 的相关文件,包括配置文件、日志和元数据等。
gnode:该目录在安装目录下,用于存储 gnode 的相关文件,包括配置文件、日志和用户数据等。
/home/dbaUser/:.gbase_profile 文件是数据库安装用户下的环境变量文件。


1.拷贝&解压安装包(root用户操作)
创建安装目
mkdir -p /opt/gbase8a
cp GBase8a_MPP_Cluster-License-9.5.3.14-redhat7.3-x86_64.tar.bz2 /opt/gbase8a
cd /opt/gbase8a
tar -xvf GBase8a_MPP_Cluster-License-9.5.3.14-redhat7.3-x86_64.tar.bz2
解压后会释放一个安装包目录 gcinstall

2.创建DBA对应的OS用户gbase & 创建安装目标目录 & 设置对应目录权限:
1)使用操作系统 root 用户在所有集群节点服务器上创建 DBA 对应的OS用户gbase:
adduser gbase
passwd gbase

2)使用 root 用户将 gcinstall 目录属主更改为 DBA OS用户(gbase):
chown -R gbase:gbase /opt/gbase8a/gcinstall

3)使用操作系统 root 用户在所有集群节点服务器上将安装目标目录的属主更改为 DBA OS用户(gbase),如果安装的目标目录不存在先创建再授权:
mkdir -p /opt/gbase8a
chown -R gbase:gbase /opt/gbase8a

4)使用 root 用户在所有节点上给 DBA OS用户(gbase)赋予安装 GBase 相关的权限:
安装前,使用 root 用户将 gcinstall 目录下的 SetSysEnv.py 文件拷贝到集群所有节点服务器上并执行该文件:
cd gcinstall
scp SetSysEnv.py gbase@集群节点IP:/opt/gbase8a/
./SetSysEnv.py --installPrefix=/opt/gbase8a --dbaUser=gbase

说明:
语法:python SetSysEnv.py --dbaUser=* --installPrefix=* [--cgroup] 
参数:
--installPrefix:用户可配安装目录,必须为 demo.options 中 installPrefix 配置一致。集群日志按归档功能使用该参数。
--dbaUser:必须为 demo.options 中的 dbaUser。
--cgroup:使用资源管理功能时,主要用于修改资源管理配置文件。在使用资源管理前必须执行。

注意:

> 安装之前,需要在 gcluster 节点和 gnode 节点上使用 root 用户执行安装包中提供的一键部署脚本 SetSysEnv.py。 如果 GCware 节点独立部署在单独的服务器上, GCware 节点不需要执行 SetSysEnv.py 文件。
> 将该脚本拷贝到要安装集群的各个节点, 每个节点都需要使用 root 执行。
> 集群各个节点在安装之前, 必须存在集群的安装用户, 且拥有安装目录的读写权限。


3.切换到DBA OS用户(gbase),修改安装的配置文件:
su - gbase
vi /opt/gbase8a/gcinstall/demo.options

installPrefix= /opt/gbase8a
coordinateHost = 192.168.151.234,192.168.151.235,192.168.151.237
coordinateHostNodeID = 234,235,237
dataHost = 192.168.151.234,192.168.151.235,192.168.151.237
#existCoordinateHost =
#existDataHost =
dbaUser = gbase
dbaGroup = gbase
dbaPwd = 'gbase'
rootPwd = '111111'
#rootPwdFile = rootPwd.json

根据实际情况修改对应的参数。
注意:dbaPwd配置指定gbase OS用户密码,rootPwd指定root OS用户密码,这里指定的是安装时需要用到的OS用户的密码,而不是数据库用户密码,数据库用户密码时安装完成以后会自动生成默认密码,然后再自行修改。

我修改后的内容如下:
installPrefix= /opt/gbase8a
coordinateHost = 192.168.1.162
coordinateHostNodeID = 162
dataHost = 192.168.1.162
#existCoordinateHost =
#existDataHost =
#existGcwareHost=
gcwareHost = 192.168.1.162
gcwareHostNodeID = 162
dbaUser = gbase
dbaGroup = gbase
dbaPwd = 'gbase.123'
rootPwd = 'root.123'
#rootPwdFile = rootPwd.json
#characterSet = utf8
#dbPort = 5258
#sshPort = 22

参数说明:

coordinateHost 所有集群调度节点列表,可以是 IPV4、 IPV6、 主机名、 域名, 地址之间用“,”分隔;
coordinateHostNodeID 每个 Coordinator 节点的 nodeid, 在 IPV6 和域名安装时, 必须指定, IPV4 安装时可不指定,与 coordinateHost 中列出的节点列表一一对应, 之间用“,”分隔;
dataHost 所有集群 Data 节点列表, 可以是 IPV4、 IPV6、 主机名、 域名,节点地址之间用“ ,” 分隔; 注意当使用域名方式部署集群时, 必须先在各个节点的 /etc/hosts 中配置域名和 IP 的对应关系;
existCoordinateHost 所有已存在的 Coordinator 节点列表, IP 地址之间用“ ,” 分隔, 在集群扩容安装新节点时使用;
existDataHost 所有已存在的 Data 节点 IP 列表, IP 地址之间用“ ,” 分隔,在集群扩容安装新节点时使用;
existGcwareHost 所有已存在的 Gcware 节点 IP 列表, IP 地址之间用“,” 分隔,在集群扩容安装新节点时使用;
gcwareHost 所有集群 gcware 节点, 可以是 IPV4、 IPV6、 主机名、 域名,必须指定。 地址之间用“,”分隔;
gcwareHostNodeID 每个 gcware 节点的 nodeid, 在 IPV6 和域名安装时, 必须指定, IPV4 安装时可不指定, 与 gcwareHost 中列出的节点列表一一对应, 之间用“,”分隔;
dbaUser 集群的管理员用户, 安装和管理集群时使用的操作系统用户名。 在安装、 扩容、 替换节点前, 集群所有服务器均需先创建相同用户名的用户作为集群管理员用户;
dbaGroup 集群安装和运行时使用的操作系统用户所属的组名;
dbaPwd 集群安装和运行时使用的操作系统用户的密码;注意:这一点V9.5版本和V8.6版本手册介绍有区别;
rootPwd 安装集群节点机器中 linux 操作系统 root 用户的统一密码。注意:这一点V9.5版本和V8.6版本手册介绍有区别;集群在不支持非 root 用户安装的版本中依然需要 root 权限,这些版本升级时, 仍然需要提供用户 root 密码。 其它情况不需要使用;
rootPwdFile 该参数支持 root 用户在多节点不同密码方式, 与参数 rootPwd不能同时使用, 否则报错。 因不支持非 root 用户安装的集群版本依然需要 root 权限, 所以这些版本升级时, 仍然需要提供用户 root 密码。 其它情况不需要使用;
characterSet 系统支持指定字符集安装, 默认不在 demo.options 文件中显示。 953 的默认字符集是 utf8mb4( 4 字节) , 可选值为[utf8,gbk, gb18030, utf8mb4]。
sshPort用于指定集群各节点服务器的 sshd 服务端口号, 要求所有节点 sshd 服务端口号一致。 默认值为 22


4.执行脚本进行安装
以DBA OS用户(gbase)执行安装命令:
cd /opt/gbase8a/gcinstall/
$ ./gcinstall.py --silent=demo.options


语法:
./gcinstall.py --license_file=licenseFile --silent=demo.options [--passwordInputMode]

如果还未获得License,先安装后导入License,则执行安装命令:
./gcinstall.py --silent=demo.options [--passwordInputMode]

参数说明:
--silent:指定集群安装的配置文件;
--license_file:原厂许可文件, 写全路径和文件名。 文件需要在安装之前先获取, 并且有执行集群安装的用户的访问权限。
--passwordInputMode:
gcinstall.py 命令可选参数。用于指定密码获取的方式,通过不同的参数实现不同的获取方式。若指定该参数 ,则demo.options中的密码不必再修改。取值范围为file、pwdsame、pwddiff, 默认值为 file。
取值说明如下:
file : 表示从文件或命令行参数获取,和原有的方式一致,该方式下,文件中的密码是明文的;默认该方式;
pwdsame:表示从终端由用户输入密码,并且所有节点的密码一致情况下使用该参数,对于不同用户密码只输入一次;
pwddiff: 表示从终端由用户输入密码,并且节点间的密码不一致情况下使用该参数,对于不同用户密码每个节点分别输入一次。

安装过程中,shell界面进行交互提示输入和确认:

Do you accept the above licence agreement ([Y,y]/[N,n])? y
Cgconfig service is not exist on host ['192.168.1.162'], resource manangement can not be used, continue ([Y,y]/[N,n])? y    # 操作系统没cgroup(资源管理)组件,输入 Y 回车忽略、继续安装
Are you sure to install GCluster on these nodes ([Y,y]/[N,n])? y

安装完成:
192.168.1.162         install gcware and cluster on host 192.168.1.162 successfully.


5.查看集群状态
安装成功后,通过 gcadmin 可以查看集群状态。
要先退出后重新进入gbase用户shell先执行,否则安装后直接执行会报命令不存在(环境变量未生效的原因),也可以直接执行 source ~/.bash_profile 使环境变量生效:

$ source ~/.bash_profile
或者退出重新登录生效
$ exit
# su - gbase
$ gcadmin
CLUSTER STATE:         ACTIVE

=======================================
|  GBASE GCWARE CLUSTER INFORMATION   |
=======================================
| NodeName |    IpAddress    | gcware |
---------------------------------------
| gcware1  | 192.168.1.162 |  OPEN  |
---------------------------------------
=========================================================
|         GBASE COORDINATOR CLUSTER INFORMATION         |
=========================================================
|   NodeName   |    IpAddress    | gcluster | DataState |
---------------------------------------------------------
| coordinator1 | 192.168.1.162 |  CLOSE   |     0     |
---------------------------------------------------------
================================================================
|           GBASE CLUSTER FREE DATA NODE INFORMATION           |
================================================================
| NodeName  |    IpAddress    | gnode | syncserver | DataState |
----------------------------------------------------------------
| FreeNode1 | 192.168.1.162 | CLOSE |    OPEN    |     0     |
----------------------------------------------------------------

由于License文件还没有申请和导入,所以 gcluster 状态、gnode 状态目前都是 CLOSE 状态。

6.生成License指纹、用于申请License用途:
我用了GBase8a V8.6文档介绍的License的生成方式,也可以:
# su - gbase
$ cd /opt/gbase8a/gcinstall
$ ./gethostsid -n 192.168.1.162 -f fingerprint -u gbase -p gbase.123

语法:./gethostid -n IP1,IP2…… IPn -f fingerprint -u gbase -p pwd; 
-n 指定集群IP地址。注意:如果集群多节点的话,需要指定所有节点的IP地址,逗号分割。
-f 指定采集指纹保存(输出)的文件。
-u 指定OS用户 gbase
-p 指定OS用户 gbase 的密码

然后发邮件给官方申请 License,申请邮件描述 OS版本(Centos7.8-x86-64)和这里生成的指纹文件 fingerprint。

后来才发现V9.5的手册关于License的生成和导入描述上有区别:

V9.5的手册和V8.6有区别,V9.5手册描述如下:
Gcware 节点上运行 gcware 的用户提前生成 SSH 私钥, 并保存在默认位置。 ESN 的GBase 8a MPP Cluster 产品手册 3 集群安装升级与卸载文档版本 953( 2022-04-10) 南大通用数据技术股份有限公司 59
生成需要从 SSH 私钥取得公钥进行计算。 合法性校验时, 使用计算得到的 ESN 节点指纹。
1)生成SSH私钥
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa)

注意保护和备份好 SSH 私钥, 如果私钥变更会导致本批次申请的 license 文件失效。

2)获取ESN
$ cd gcinstall
$ ./getesn.py –silent=<demo.options>

发邮件申请获得许可后,指定License文件方式进行安装:
$ gcinstall.py –license_file=LICENSE_FILE –silent=demo.options

3)License检查
checkLicense
或者
show license

Licesne过期重新申请或导入:
importLicense FILENAME

我没有按照V9.5的方式操作。

7.安装客户端连接工具 gccli (非必须的步骤,为了导入License后能够进行数据库连接测试,所以我先安装 gccli 工具)

为了方便后续导入License后登录数据库、先安装客户端连接工具 gccli

解压gccli、然后拷贝解压后的文件夹gccli_install内的内容到安装路径,在安装路径下执行安装程序:

# su - gbase
$ mkdir -p /opt/gbase8a/gccli
$ cp gccli-9.5.3.14-redhat7.3-x86_64.tar.bz2 /opt/gbase8a/gccli
$ cd /opt/gbase8a/gccli
$ tar -xvf gccli-9.5.3.14-redhat7.3-x86_64.tar.bz2
$ chmod u+x ./gccli_install/gccli_install.sh
$ cp /opt/gbase8a/gccli/gccli_install/*  /opt/gbase8a/   # 把解压后的目录下的所有文件(gccli_install.sh 和 gccli_standalone.tar.bz2)拷贝到我的gbase数据库的安装路径 /opt/gbase8a 后再执行安装脚本
$ cd /opt/gbase8a
$ ./gccli_install.sh gccli_standalone.tar.bz2    # 安装 gccli 工具


安装 gccli 以后,会在 /opt/gbase8a/gcluster/server/bin 目录下生成 gccli 软连接:
$ whereis gccli
gccli: /opt/gbase8a/gcluster/server/bin/gccli


安装 gccli 以后,就可以使用 gccli 工具连接 gbase8a 数据库:

帮助:
$ gccli  --help
gccli ver 9.5.3.14.121230, for unknown-linux-gnu (x86_64) using readline 6.3
Copyright 2004-2023 General Data Technology Co.Ltd.
Usage: gccli [OPTIONS] [database]

语法:
gccli –u<username> -p<password> [-h<ipaddress>] [-P<port>] [-D<databasename>] [--nice_time_format] [-c] [-f] [-v[v][v]] [-e] [<]

–u<username> 连接数据库的用户名称;
-p<password> 连接数据库的用户密码;
-h<ipaddress> 登录集群节点的IP 地址,默认127.0.0.1,可选参数。如果指定多个IP地址,则启动 gccli 的高可用功能,IP 地址之间采用英文逗号分隔,例如:192.168.1.101,192.168.1.102,192.168.1.103;
-P<port> 可选参数,指定连接的数据库服务端口,默认端口5258;
-D<databasename>  可选参数,指定登录时默认的数据库(数据库必须存在);
--nice_time_forma 指定用户操作耗时的最小精度,使用此参数,精确到毫秒,不使用,精确到秒。可选参数;
-c 使用此参数,用于使用 hint 优化方式。可选参数;
--force,-f 批量执行SQL文件时,如果中间有SQL执行报错,强制执行后续SQL,可选参数;
--verbose,-v 冗长模式。产生更多的输出。可以多次使用该选项以产生更多的输出。(例如,-v -v -v甚至可以在批处理模式产生表输出格式)。
--version,-V 显示版本信息并退出。
--vertical,-E 垂直输出查询输出的行。没有该选项,可以用\G结尾来指定单个语句的垂直输出。
--execute=statement, -e statement 执行语句并退出,可以是多个语句,多个SQL以“;”隔开,可选参数;
--silent,-s 沉默模式。产生少的输出。可以多次使用该选项以产生更少的输出。
--skip-column-names,-N 在结果中不写列名;
--skip-line-numbers,-L 在错误信息中不写行号。当你想要比较包括错误消息的结果文件时有用;
--html,-H 产生HTML输出;
< EOF接收输入的方式,可用于批量执行SQL文件,可选参数。

 注意:

如果要指定端口,通过-P参数指定:

gccli -h192.168.1.101 -ugbase -P5258 -p

gccli -h192.168.1.101 -ugbase -P5050 -p

默认5258端口为GBase8a Coordinator 集群节点对外提供服务的端口,而5050为Data 集群节点对外提供服务的端口。集群上如果使用单节点对外端口5050连接可能会导致部分命令执行失败(例如:LOAD加载命令)。

GBase8a服务默认端口如下:

查看当前连接的是data node端口还是集群服务端口,可以执行下面命令通过 gcluster_hash_version 来查看

集群服务端口5258连接执行结果:
gbase>  SHOW VARIABLES LIKE '%VERSION';
+----------------------------+-----------------+
| Variable_name              | Value           |
+----------------------------+-----------------+
| gbase_kafka_broker_version |                 |
| gbase_show_version         | 1               |
| gcluster_hash_version      | 1               |
| protocol_version           | 10              |
| version                    | 9.5.3.14.121230 |
+----------------------------+-----------------+

data node端口5050连接执行结果:
gbase>  SHOW VARIABLES LIKE '%VERSION';
+----------------------------+-----------------+
| Variable_name              | Value           |
+----------------------------+-----------------+
| gbase_kafka_broker_version |                 |
| gbase_show_version         | 1               |
| protocol_version           | 10              |
| version                    | 9.5.3.14.121230 |
+----------------------------+-----------------+

8.导入License文件

导入License文件之前,先说一下关于账号密码:
默认情况下,在gbase8a集群安装完毕后,集群会创建两个默认的数据库超级帐号 root 账号和 gbase 账号。
初次登录请使用 root 数据库用户登录, 首次登录 GBase 8a MPP Cluster 后,管理员必须为 root 帐号和 gbase 账号设置一个安全的数据库账号密码。
操作系统OS用户 root,密码为手工设置的
操作系统OS用户 gbase,密码为手工设置的
数据库超级帐号 root,默认密码为空(V8.6的默认密码为 Admin2O11O531)
数据库超级用户 gbase,密码为root登录数据库以后手工设置的

申请拿到License文件以后,使用License工具导入License到集群的每个节点,语法如下:
License -n IP1, IP2, ……, IPn <-f /path/name.lic> <-u username> <-p password> License --hosts=demo.hosts <-f /path/name.lic> <-u username> <-p password>

参数说明:
-n 用于导入单个节点或少数几个节点 License。
--hosts 用于导入多个节点 License。
-f 待导入的 LICENSE 文件路径及文件名称。
-u 指定集群的 DBA 用户。
-p 指定集群 DBA 用户的密码。==> 官方手册虽然描述如此,但实测为:这里指定的密码必须是OS用户密码、不能是数据库用户连接密码,否则导入License时会提示登录login失败;

注意:
1)--hosts=demo.hosts 指定的 demo.hosts 文件中包含需要进行指纹采集的 IP 列表(逗号分割):
vi demo.hosts
Hosts = 192.168.1.162
如果集群多节点则需要逗号分割指定所有IP:
Hosts = 192.168.1.162,192.168.1.163,192.168.1.164
2)License导入工具在 gcinstall 安装目录,执行License导入时,需要进入对应工具目录执行导入操作;


拷贝License文件&执行License导入:

# su - gbase
$ cp 20231016-01.lic /opt/gbase8a/
$ cd /opt/gbase8a/gcinstall
$ ./License -n 192.168.1.162 -u gbase -p gbase.123 -f /opt/gbase8a/20231016-01.lic
======================================================================
Successful node nums:   1
======================================================================

或者指定配置文件的方式执行License导入:

$ ./License --hosts=demo.hosts -u gbase -p gbase.123 -f /opt/gbase8a/20231016-01.lic


注意:
1)如果是集群多节点,需要 -n 指定所有IP,逗号分割;
2)这里指定的密码必须是OS用户密码、不能是数据库用户连接密码,否则导入License时会提示登录login失败:
[('192.168.1.162', 'Fail to login 192.168.1.162. errno: -1, errmsg: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).')]
Node:   192.168.1.162
Information:    Fail to login 192.168.1.162. errno: -1, errmsg: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).


导入成功后,可使用 LICENSE 检测工具获取 license 状态信息,包括集群节点是否全部具备 LICENSE 文件, LICENSE 为试用版还是商用版,如果是试用版 LICENSE, 会显示 LICENSE 到期日期:
语法:
chkLicense <-n IP1,IP2,……IPn | --hosts=demo.hosts > -u username -p password chkLicense -f /path /filename -u username -p password


$ ./chkLicense -n 192.168.1.162 -u gbase -p gbase.123
======================================================================
192.168.1.162
is_exist:yes
version:trial
expire_time:20240116
is_valid:yes

9.重启集群服务 & 查看集群状态
gcluster_services

语法:
gcluster_services help
gcluster_services <gbase|gcluster|gcrecover|syncserver|all> <start|stop [--force]|restart [--force]|info>

重启集群服务:
$ gcluster_services all restart
Stopping GCMonit success!
Stopping gcrecover :                                       [  OK  ]
Stopping gcluster :                                        [  OK  ]
Stopping gbase :                                           [  OK  ]
Stopping syncserver :                                      [  OK  ]
Starting gcluster :                                        [  OK  ]
Starting gcrecover :                                       [  OK  ]
Starting gbase :                                           [  OK  ]
Starting syncserver :                                      [  OK  ]


查看集群服务状态:
$ gcluster_services all info
gcluster is running
gcrecover is running
gbase is running
syncserver is running


$ gcadmin
CLUSTER STATE:         ACTIVE

=======================================
|  GBASE GCWARE CLUSTER INFORMATION   |
=======================================
| NodeName |    IpAddress    | gcware |
---------------------------------------
| gcware1  | 192.168.1.162 |  OPEN  |
---------------------------------------
=========================================================
|         GBASE COORDINATOR CLUSTER INFORMATION         |
=========================================================
|   NodeName   |    IpAddress    | gcluster | DataState |
---------------------------------------------------------
| coordinator1 | 192.168.1.162 |   OPEN   |     0     |
---------------------------------------------------------
================================================================
|           GBASE CLUSTER FREE DATA NODE INFORMATION           |
================================================================
| NodeName  |    IpAddress    | gnode | syncserver | DataState |
----------------------------------------------------------------
| FreeNode1 | 192.168.1.162 | OPEN  |    OPEN    |     0     |
----------------------------------------------------------------

0 virtual cluster
1 coordinator node
1 free data node

这里显示的 0 virtual cluster,部署完后还没有初始化,后面会进行初始化操作。


使用 gccli 首次以root数据库账号登录,修改数据库连接的root密码和gbase用户密码:
注意:官方文档介绍数据库安装后的默认root密码为 Admin2O11O531 ,但我安装后实际 root 数据库连接密码为空,不指定 -p 参数登录并查看版本信息:
$ gccli -uroot
$ gbase> select version();
+-----------------+
| version()       |
+-----------------+
| 9.5.3.14.121230 |
+-----------------+
1 row in set (Elapsed: 00:00:00.00)

10.初始化配置

GBase8a集群安装完成以后,必须进行初始化配置,才能使用。

说明:
1)单 VC 时建议使用兼容模式,需要进行初始配置,官方产品手册--3.2.3.1 单 VC 模式(兼容模式)初始配置中有纤细介绍;
2)多 VC 时,参考官方产品手册--3.2.3.2 多 VC 模式初始配置;
3)单 VC 模式是跳过手动创建 VC 步骤,直接创建 distribution 的模式。单 VC 模式下如果手动创建增加 VC, 则集群自动转换为多 VC 模式;
   多 VC 模式不支持回退为单 VC 模式,如果删除新增的 VC 只保留最初的一个 VC,集群的模式仍然是多 VC 模式。

初始化时,两种模式二选一,进行对应的初始化操作。

模式1:单 VC 模式(兼容模式)初始配置(对应官方产品手册--3.2.3.1 单 VC 模式(兼容模式)初始配置)

"兼容模式" 是为了兼容 GBase 8a MPP Cluster V86 版本的使用习惯,由 GBase 8a MPP Cluster V9.5.2 之前的版本升级的集群,或者安装 GBase 8a MPP Cluster V9.5.2 后不创建 VC,直接创建 distribution 后的集群。
此时 GBase 8a MPP Cluster 集群会生成一个默认 VC, vcname 为 vcname000001。
在兼容模式下,集群使用习惯 GBase 8a MPP Cluster V86 版本相同, 使用 gcadmin showcluster 命令看不到 VC 的相关信息。


1)创建 distribution

使用 dbaUser 用户(即 demo.options 中的 dbaUser 用户)配置 gcChangeInfo.xml。在集群安装成功后,在安装包目录下会生成一个 gcChangeInfo.xml 文件。
$ cat /opt/gbase8a/gcinstall/gcChangeInfo.xml

<?xml version="1.0" encoding="utf-8"?>
<servers>
 <rack>
  <node ip="192.168.1.162"/>
 </rack>
</servers>


创建 distribution

语法:
gcadmin distribution <gcChangeInfo.xml> <p num> [d num] [pattern 1|2] [db_user user_name] [db_pwd password] [dba_os_password password]

参数说明:
gcChangeInfo.xml 指定生成 distribution 规则的配置文件。
p number 每个数据节点存放的分片数量,最小值为 1。
d number 每个分片的备份数量,取值为 0, 1 或 2。若不输入参数 d,默认值为 1。
pattern number 生成 distribution 所使用模式,取值为 1 或 2, pattern 1 为负载均衡模式, pattern 2 为高可用模式。若不输入参数 pattern,默认使用 pattern 1 生成 distribution。
db_user 数据库用户名,扩容生成新的 distribution 时需指定。
db_pwd 数据库密码,扩容生成新的 distribution 时需指定。
dba_os_password DBA 用户操作系统密码,扩容生成新的 distribution,或在新的 vc 中创建 distribution 时需指定。


执行创建 distribution 命令:
$ gcadmin distribution gcChangeInfo.xml p 1 d 0

注意:rack data server number >= segment + duplicate segment number,否则执行会报错。例如,我单节点,如果执行 p 1 d 1 就会报错。

查看 distribution
创建 distribution 以后,查看主备数据分片分布信息,可以执行下面命令查看:
gcadmin showdistribution [node | f] [vc vc_name]

$ gcadmin showdistribution
$ gcadmin showdistribution node


其他相关命令介绍:

删除 distribution

语法:
gcadmin rmdistribution [ID] [vc vc_name]
从集群中删除指定 id 的 distribution。若不输入 distribution id, 则默认删除创建时间较早的 distribution, 集群中只有一个 distribution 时则默认删除该 distribution。

参数说明:
ID distribution id。
vc vc_name 指定删除的 distribution 的 vc 的名称。如果集群只有一个 vc,不需要指定 vcname。

例如:
$ gcadmin rmdistribution 1 vc vc1


保存 distribution到指定的xml文件:
getdistribution(将指定 ID 的 distribution 信息保存到指定的文件中):

将指定 ID 的 distribution 信息保存到指定的文件中, 生成的文件为 xml 文件, 用户可修改该文件中的分片信息, 然后使用该文件重新生成 distribution。
gcadmin getdistribution <ID> <file_name.xml> [vc vc_name]


gcadmin addnodes gcChangeInfo.xml [vc_name | single_vc_add_to_rc]
gcadmin addnodes gcChangeInfo.xml vc1
gcadmin showcluster vc vc1  #查看集群状态

gcadmin rmnodes gcChangeInfo.xml [vc_name | single_vc_rm_to_rc]
cp gcChangeInfo.xml gcRm_vc1.xml
vi gcRm_vc1.xml  #修改 gcRm_vc1.xml 其中对应 nodeip 内容为待删除的节点 IP
gcadmin rmnodes gcRm_vc1.xml vc1
gcadmin  #查看删除效果


2)集群初始化
集群安装完毕、且创建了 distribution 之后,在首次执行 SQL 命令之前,需要对数据库系统做初始化操作(initnodedatamap),才能正确执行所有的 SQL 操作。

使用数据库用户 root/gbase 登录,执行 initnodedatamap 初始化命令:
$ gccli –uroot
gbase> initnodedatamap;

注意:
1)我初始安装后数据库root用户的密码为空,所以不需要指定-p,官方手册说是会生成一个默认密码,请根据实际情况来操作;
2)此命令只需执行一次,如果重复执行,会报告如下信息:
ERROR 1707 (HY000): gcluster command error: (GBA-02CO-0004) nodedatamap is already initialized.

如果不进行初始化,直接执行SQL的话,会报错,例如,直接执行下面建库 SQL 则会报错:
gbase> create database test;
ERROR 1707 (HY000): gcluster command error: (GBA-02CO-0003)
nodedatamap is not initialized.


3)安装后的检查
集群安装完成后,管理员可以通过 gcadmin 查看集群的运行状态。
a)查看集群各节点状态是否正常(是否OPEN状态)
  $ gcadmin
  
  
  CLUSTER STATE:         ACTIVE
VIRTUAL CLUSTER MODE:  NORMAL

=======================================
|  GBASE GCWARE CLUSTER INFORMATION   |
=======================================
| NodeName |    IpAddress    | gcware |
---------------------------------------
| gcware1  | 192.168.1.162   |  OPEN  |
---------------------------------------
=========================================================
|         GBASE COORDINATOR CLUSTER INFORMATION         |
=========================================================
|   NodeName   |    IpAddress    | gcluster | DataState |
---------------------------------------------------------
| coordinator1 | 192.168.1.162   |   OPEN   |     0     |
---------------------------------------------------------
=========================================================================================================
|                                    GBASE DATA CLUSTER INFORMATION                                     |
=========================================================================================================
| NodeName |                IpAddress                 | DistributionId | gnode | syncserver | DataState |
---------------------------------------------------------------------------------------------------------
|  node1   |             192.168.1.162                |       1        | OPEN  |    OPEN    |     0     |
---------------------------------------------------------------------------------------------------------

[gbase@gbase8av95 gcinstall]$ 

b)查看集群数据分片分布相关信息
  $ gcadmin showdistribution
  
  $ gcadmin showdistribution

                                 Distribution ID: 1 | State: new | Total segment num: 1

             Primary Segment Node IP                   Segment ID                 Duplicate Segment node IP
========================================================================================================================
|                192.168.1.162                   |         1          |                                                |
========================================================================================================================
[gbase@gbase8av95 gcinstall]$ 
  

模式2:多 VC 模式初始配置(对应官方产品手册--3.2.3.2 多 VC 模式初始配置)

“多 VC 模式”是指安装集群后,使用 gcadmin createvc 命令将数据节点划分为多个 VC 的集群模式。此时使用 gcadmin 命令可看到多个 VC 的相关信息。
多 VC 模式,需要首先创建 VC,之后在每个 VC 上再创建 distribution。

例如,假设部署了5节点的集群,free node 4 个节点,则可以创建2个vc,将4个 free node 节点中的2个节点给vc1、另外2个分给vc2。

1)创建多VC和每个VC的distribution(多个VC间不能共享)

a)创建vc1和vc1的distribution

i)创建vc1
生成创建 VC1 的配置示范文件
$ cd /opt/gbase8a/gcinstall
$ gcadmin createvc e create_vc1.xml

$ vi create_vc1.xml

<?xml version='1.0' encoding="utf-8"?>
<servers>
<rack>
<node ip="192.168.1.101"/>
<node ip="192.168.1.102"/>
</rack>
<vc_name name="vc1"/>
<comment message="vc1_comments"/>
</servers>


执行vc1创建命令:
$ gcadmin createvc create_vc1.xml


语法说明:
gcadmin createvc <create_vc.xml | e example_file_name>

用配置文件中指定的数据节点生成虚拟集群。
注意:
1)用户创建虚拟集群需使用安装集群时 demo.options 中填写的 dbaUser 用户;
2)gcadmin createvc 命令一次只能创建一个 vc,即配置文件中只能有一个要创建 vc 的信息。

参数说明:
create_vc.xml 生成 vc 所使用的配置文件, 包含所有生成指定 vc 的数据节点的 IP 和可选参数 vc name 及 comment 信息。
e 生成创建 vc 的配置示范文件,使用该参数时将不会生成 vc。
example_file_name 生成的创建 vc 的配置时反问句的名称。
注意:安装脚本会自动生成包含所有 data node 节点 ip 信息的配置文件gcChangeInfo.xml,用户可根据自己需求修改。


ii)在 VC1 上创建 distribution
多 VC 模式,需要在每个 VC 下创建 distribution。

$ cd /opt/gbase8a/gcinstall
$ vi gcChangeInfo_vc1.xml

<?xml version="1.0" encoding="utf-8"?>
<servers>
<rack>
<node ip="192.168.1.101"/>
<node ip="192.168.1.102"/>
</rack>
</servers>

创建vc1下的distribution
$ gcadmin distribution gcChangeInfo_vc1.xml p 1 d 1 vc vc1


b)创建vc2和vc2的distribution

i)创建vc2
生成创建 VC2 的配置示范文件
$ cd /opt/gbase8a/gcinstall
$ cp create_vc1.xml create_vc2.xml
也可以:
$ gcadmin createvc e create_vc2.xml


$ vi create_vc2.xml

<?xml version='1.0' encoding="utf-8"?>
<servers>
<rack>
<node ip="192.168.1.103"/>
<node ip="192.168.1.104"/>
</rack>
<vc_name name="vc2"/>
<comment message="vc2_comments"/>
</servers>


执行创建vc1命令:
$ gcadmin createvc create_vc2.xml

ii)在 VC2 上创建 distribution

$ cd /opt/gbase8a/gcinstall
$ cp gcChangeInfo_vc1.xml  gcChangeInfo_vc2.xml
$ vi gcChangeInfo_vc2.xml

<?xml version="1.0" encoding="utf-8"?>
<servers>
<rack>
<node ip="192.168.1.103"/>
<node ip="192.168.1.104"/>
</rack>
</servers>

创建vc2下的distribution
$ gcadmin distribution gcChangeInfo_vc2.xml p 1 d 1 db_user user_name db_pwd password dba_os_password password vc vc2


2)集群初始化
每个 VC 在创建完 distribution 后必须先执行 initnodedatamap。
使用数据库用户 root/gbase 登录,执行 initnodedatamap 命令。
$ gccli –uroot –p******
gbase> use vc vc1;
gbase> initnodedatamap;

gbase> use vc vc2;
gbase> initnodedatamap;

3)安装后的检查
集群安装完成后,管理员可以通过 gcadmin 查看集群的运行状态。
a)查看集群各节点状态是否正常(是否OPEN状态)
  $ gcadmin
b)查看集群数据分片分布相关信息
  $ gcadmin showdistribution vc vc1
  $ gcadmin showdistribution vc vc2


到此为止GBase8a安装配置 & License导入 & 初始化都已经完成。

接下来,修改数据库账号密码。

初始安装默认生成的数据库账号 root 账号无密码,修改root密码、并设置 gbase 数据库用户的密码:
$ gccli -uroot
gbase> SET PASSWORD = PASSWORD('admin.1q2w3e');
gbase> SET PASSWORD FOR gbase = PASSWORD('1q2w3e');

创建测试库:
gbase> CREATE DATABASE testdb01;

远程连接测试:
$ quit;
$ gccli -ugbase -p -h127.0.0.1 -Dtestdb01
$ gccli -ugbase -p -h127.0.0.1 -P5258 -Dtestdb01
$ gccli -ugbase -p -h192.168.1.162 -P5258 -Dtestdb01

按照官方手册安装完毕以后,发现使用 gbase 命令也可以登录:

$ gbase -h192.168.1.162 -ugbase -Dtestdb01 -p
gbase> quit;

查看 gccli 信息:

$ whereis gccli
gccli: /opt/gbase8a/gcluster/server/bin/gccli
$ ls -l /opt/gbase8a/gcluster/server/bin/gccli
lrwxrwxrwx 1 gbase gbase 38 Oct 13 15:54 /opt/gbase8a/gcluster/server/bin/gccli -> /opt/gbase8a/gcluster/server/bin/gbase

发现原来 gccli 其实就是 gbase 的一个软链接。

如果端口不是默认的5258,则-P指定端口,数据库连接端口配置文件为:$GBASE_BASE/gcluster/config/gbase_8a_gcluster.cnf


其他相关命令参考:

查看数据库:
SHOW DATABASES;

创建数据库:
CREATE DATABASE testdb01;

创建用户:
CREATE USER test_user IDENTIFIED BY '1q2w3e';

用户重命名:
RENAME USER old_user TO new_user;

删除用户:
DROP USER user_name;

修改密码:
SET PASSWORD [FOR user] = PASSWORD('newpassword')
SET PASSWORD FOR gbase = PASSWORD('1q2w3e')

修改当前登录用户的密码:
SET PASSWORD = PASSWORD('1q2w3e');

授权SELECT权限:
GRANT SELECT ON *.* TO test_user;

授予超级用户权限(全部权限):
GRANT ALL ON *.* TO user_test;


JDBC连接:
jdbc:gbase://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

user 用户名
password 密码
hostList 一组调度节点 coordinator 的IP列表,用逗号分割
failoverEnable 故障转移。连接集群时,如果当前IP(比如jdbc的最前面的IP)无法连接,则自动从 hostlist 里面挨个尝试连接,直到连接成功返回,或者均不可用报错退出。下一次连接,同样从第一个IP开始。默认为 false
gclusterId 负载均衡。和 falioverEnable、hostList 组合成负载均衡模式(循环轮询模式 round-robin)。要求 failoverEnable=true 且 hostList 参数不为空。每次获取连接时,将从所有IP列表(包括最前面的第一个IP和hostList里指定的IP)里,按顺序检查IP能否连接。下一次连接,将从下一个IP开始,如果到达末尾,则返回第一个IP。
gclusterId 以 a-z 任意字符开头的字符串,长度最大20。注意:在同一应用程序中(JVM), 如果有多个不同用途的URL,则gclusterId必须唯一,否则会导致访问了不属于本服务负责的集群。
useUnicode 处理字符串时指定驱动是否使用Unicode编码。是否只在驱动无法决定字符集映射的时候使用,或者在不考虑 GBase 是否有本地化支持的情况 下,尝试驱动使用该字符集(例如 UTF-8)。默认为false。
characterEncoding 如果 useUnicode 设置为 true,驱动在处理字符串时使用的编码。默认为 autodetect。
connectTimeout 在socket连接时的超时时间。
socketTimeout socket读写操作时的超时参数。一般和connectTimeout参数一起配置。
allowMultiQueries 允许多个SQL语句,通过默认的分号分割后,一次下发执行。默认为 false。
useSSL 启用SSL连接功能。默认 false。详情请参考 GBase 8a集群SSL配置-JDBC。
rewriteBatchedStatements 针对 insert values 方式的快速批量写入方式优化参数。
useOldAliasMetadataBehavior 返回的是别名还是列名。涉及功能 ResultSetMetaData.getColumnName( ),ResultSetMetaData.getTableName()。当 useOldAliasMetadataBehavior = true 时,返回值为别名,否则默认 false ,返回列名。
autoReconnect 自动重连。

===============================

vc的其他相关常用操作命令

删除虚拟集群

gcadmin rmvc <vc_name>

注意:
1)删除虚拟集群前需要先删除 vc 下的所有用户库表及其他数据库对象,删除镜像关系,删除拓扑信息。
2)删除 VC 前需要将 gbase 库中对应的表(
  gbase.consumer_group,
  gbase.consumer_group_user, 
  gbase.resource_plan, 
  gbase.resource_pool,
  gbase.resource_plan_directive, 
  gbase.resource_config,
  gbase.cluster_resource_pool_usage_history, 
  gbase.resource_pool_events 等)中该 VC 的资源管理信息删除掉,否则将无法删除 VC;
3)gcadmin rmvc 命令一次只能删除一个 VC;如果指定删除的 VC 不存在,执行会报错。


导入虚拟集群
将已有集群的所有数据节点导入到当前集群,成为当前集群的一个 VC。
gcadmin importvc <import_vc.xml | e example_file_name>

import_vc.xml 导入 vc 所使用的配置文件。
e 生成导入 vc 的配置示范文件,使用该参数时将不会导入 vc。
example_file_name 生成导入 vc 的配置示范文件名称。


生成创建 VC 的配置示范文件:
$ gcadmin importvc e import_vc.xml
$ vi import_vc.xml


启动虚拟集群
gcadmin startvc <vc_name1 vc_name2 ...> <os_dba_user_name> <os_dba_password>

停止虚拟集群
gcadmin stopvc <vc_name1 vc_name2 ...> <os_dba_user_name> <os_dba_password>

重命名虚拟集群
gcadmin renamevc <old_vc_name> <new_vc_name>


如果要卸载GBase8a数据库:
gcluster_services all stop

su - gbase
cd /opt/gbase8a/gcinstall
./unInstall.py --silent=demo.options

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunny05296/article/details/133865019

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue