vb_guc
功能描述
应用程序可以通过调用 vb_guc 工具来设置数据库的配置参数。
工具运行产生的日志位于 $GAUSSLOG/bin/gs_guc
目录下,每个日志最大 16 MB,最多保留 50 个。如果没有配置环境变量 $GAUSSLOG,则不会产生日志文件。
目前 VexDB配置文件(postgresql.conf、pg_hba.conf)中的参数默认值都是单机的配置模式。
- “server.key.cipher”,“server.key.rand”
使用vb_guc encrypt命令加密用户密码时,如果指定的-M的值为server,则会生成这两个文件。其中“server.key.cipher”存储用户密码的密文,“server.key.rand”存储的是加密因子。 - “client.key.cipher”,“client.key.rand”
使用vb_guc encrypt命令加密用户密码时,如果指定的-M的值为client,则会生成这两个文件。其中“client.key.cipher”存储用户密码的密文,“client.key.rand”存储的是加密因子。“client.key.cipher”和“client.key.rand”是不指定-U选项时生成的密文文件和加密因子文件。如果通过-U指定了用户名,则会生成以用户名开头的文件。以指定-U test为例,生成的文件名为:“test.key.cipher、test.key.rand”。说明
- “datasource.key.cipher”,“datasource.key.rand”
使用vb_guc encrypt命令加密用户密码时,如果指定的-M的值为source,则会生成这两个文件。其中“datasource.key.cipher”存储用户密码的密文,“datasource.key.rand”存储的是加密因子。说明
- “datasource.key.cipher”和“datasource.key.rand”是创建Data Source对象时调用的密钥文件。vb_guc生成时即有读权限。使用前需将这两个文件放入各节点目录$GAUSSHOME/bin,且确保具有读权限。
- 使用vb_guc generate命令也可以生成这两个文件,可以选择以下两种方式中的任一种,并根据提示输入密码。
- 方式1:vb_guc encrypt -M source -D ./
- 方式2:vb_guc generate -o datasource -D ./
注意事项
- vb_guc工具不支持参数值中包含#的设置。可以使用vi工具通过手工修改配置文件来设置。
- 如果已经在环境变量中设置PGDATA,则可以省略-D参数。否则提示设置参数失败。
- 如果设置GUC参数时使用-c "parameter",则会将已设置的GUC参数值设置成该参数的内核默认值(注意log_directory和audit_directory不会被设置为内核参数默认值,而是设为$PGDATA/pg_audit/instance_name)。由于GUC参数间存在依赖关系,因此请慎用该功能。
- 设置-c参数时,参数都可以省略双引号。
- 如果value中含有特殊字符(如$),请转义后使用。
- 如果同一个配置参数在配置文件里面出现多行,且有两行或多于两行同时生效(即没有用“#”注释掉),那么只有最后一个配置参数会被设置,而前面的都会被忽略。
- 通过reload模式设置或修改VexDB节点配置文件(postgresql.conf)的参数,生效存在短暂延迟,有可能导致配置后VexDB各实例参数极短时间不一致。
- vb_guc设置浮点类型的参数时,由于浮点数在计算机中不能精确表示,所以参数值在误差范围1e-9内都可以设置成功。
- vb_guc设置整型类型的参数时,可以接受十进制、十六进制、八进制的数据,以0x开始表示十六进制,以0开始表示八进制,其他情况表示十进制。
- vb_guc设置string参数,参数中的单引号会计算字符。
语法格式
- 检查配置文件中参数。
vb_guc check [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} {-c "parameter", -c "parameter", ...}vb_guc check [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} {-c parameter, -c parameter, ...}
- 修改配置文件中的参数。
vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--lcname=LCNAME] [--ignore-node=NODES] {-c "parameter = value" -c "parameter = value" ...} vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--lcname=LCNAME] [--ignore-node=NODES] {-c "parameter = 'value'" -c "parameter = 'value'" ...}
说明
- set:表示只修改配置文件中的参数。
- reload:表示修改配置文件中的参数,同时发送信号量给数据库进程,使其重新加载配置文件。
- 将已设置的参数值修改为默认值。
vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--lcname=LCNAME] [--ignore-node=NODES] {-c "parameter" -c "parameter" ...}
- 配置客户端接入认证。若选择reload会同时发送信号量到pg_hba.conf,即无需重启即可生效。
vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--ignore-node=NODES] -h "HOSTTYPE DATABASE USERNAME IPADDR IPMASK AUTHMEHOD authentication-options" vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--ignore-node=NODES] -h "HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK AUTHMEHOD authentication-options" vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--ignore-node=NODES] -h "HOSTTYPE DATABASE USERNAME HOSTNAME AUTHMEHOD authentication-options"
如果身份验证策略需要设置/重新加载DEFAULT或COMMENT,然后在没有身份验证的情况下提供,请使用以下格式:vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--ignore-node=NODES] -h "HOSTTYPE DATABASE USERNAME IPADDR IPMASK" vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--ignore-node=NODES] -h "HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK " vb_guc {set | reload} [-Z NODE-TYPE] [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} [--ignore-node=NODES] -h "HOSTTYPE DATABASE USERNAME HOSTNAME"
说明
认证策略中包含一串认证参数:
HOSTTYPE DATABASE USERNAME IPADDR IPMASK HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK HOSTTYPE DATABASE USERNAME HOSTNAME
AUTHMEHOD后的authentication-options为可选参数,AUTHMEHOD支持以下选项:
- trust:不验密,禁止远程主机使用trust方式访问数据库。
- reject:拒绝访问。
- md5:md5认证,默认不支持(MD5加密算法安全性低,存在安全风险,不建议使用)。
- sha256:sha256认证(推荐使用)。
- cert:客户端证书认证。
- gss:kerberos认证,仅用于内部节点间认证。
- sm3:sm3认证(国密SM3)
pg_hba.conf中的认证策略越靠前优先级越高,使用vb_guc工具配置时会按一定规则排序将新策略插入到原有认证策略中。配置字段比较顺序为:IPADDR/HOSTNAME > HOSTTYPE >DATABASE>USERNAME,即优先比较IPADDR或HOSTNAME,如果无法区分优先级则继续比较HOSTTYPE,以此类推。对于每个配置字段,通常越严格的配置参数优先级越高、排序越靠前,越宽松的配置参数优先级越低、排序越靠后,具体如下:- IPADDR:当配置为全0时表示不限制IP,会放在指定具体某个IP地址的策略后面。
- DATABASE:当配置为all时表示不限制数据库,会放在指定具体某个数据库的策略后面;当数据库配置为replication时会放在其他策略后面。
- USERNAME:当配置为all时表示不限制用户,会放在指定具体某个用户的策略后面。
- HOSTTYPE:local > hostssl > hostnossl > host
- 显示帮助信息。
vb_guc -? | --help
- 显示版本号信息。
vb_guc -V | --version
- vb_guc encrypt生成加密密码和加密因子文件。
vb_guc encrypt [-M keymode] -K password [-U username] {-D DATADIR | -R RANDFILEDIR -C CIPHERFILEDIR}
- K是用户指定的密码,vb_guc会对该密码进行长度(8<=len<16)和密码复杂度要求,如果不满足,将会报错。此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。
- M是加密类型,当前仅支持server、client和source。默认值为server。
- vb_guc generate生成其他前缀的加密密码和加密因子文件。
vb_guc generate [-o prefix] -S cipherkey -D DATADIR
- o是输出cipher和rand文件前缀名称,默认输出文件名前缀为obsserver。其内容仅支持数字、字母和下划线。
- S是用户指定的密码,密码需要满足长度要求(8<=len<16)和复杂度要求,如不满足将会报错。当其值为default时,会随机生成一段字符串作为密码,该密码长度为13。如果不带-S参数则会提示交互式输入密码。为了系统安全,推荐使用交互式输入密码方式。
- 使用vb_guc encrypt或vb_guc generate命令生成加密密码和加密因子文件时只是参数不同,本质上是一样的。生成过程中会使用随机数作为加密密钥材料和盐值,因此是每次生成的文件都是不同的。每次生成的加密密码和加密因子文件需要成对使用,不能更换或交替使用,加密和解密时需要使用相同的加密密码和加密因子文件。
参数说明
- -N
需要设置的主机名称。
取值范围:已有主机名称。
当参数取值为ALL时,表示设置VexDB中所有的主机。
暂不支持一次设置中指定多个-N参数,指定多个-N会报错。 - -I
需要设置的实例名称。
取值范围:已有实例名称。
当参数取值为ALL时,表示设置主机中所有的实例。
暂不支持一次设置中指定多个-I参数,指定多个-I会报错。 - -D, --pgdata=DATADIR
需要执行命令的VexDB实例路径。使用encrypt命令时,此参数表示指定的密码文件生成的路径。
该参数不能与-I 一块使用。 - -c parameter=value
要设定的VexDB配置参数的名称和参数值。
取值范围:postgresql.conf中的所有参数。说明
- 如果参数是一个字符串变量,则使用-c parameter="'value'"或者使用-c "parameter = 'value'"。
- 如果需要配置的value内容中包含双引号, 则需要在双引号前加上转义符。例如value为a"b"c, 则命令为-c " parameter = 'a"b"c' "。
- 当使用vb_guc set/reload为"log_directory" 恢复默认值时,其默认值会被置为具体的data目录。
- 当使用vb_guc reload进行参数设定,并指定-N参数时,当指定的节点为主节点时,主备节点的参数值都会被修改;当指定节点为备节点时,只会修改备节点的参数值,不会修改主节点的参数值。
- 当使用vb_guc reload进行参数设定,未指定-N参数时,当在主节点上执行时,主备节点的参数值都会被修改;当在备节点上执行时,只会修改备节点的参数值,不会修改主节点的参数值。
- -c parameter
当进行check操作时,表示需要检查的参数名称。当进行set/reload操作时,参数值不允许为空,为空时不会恢复为数据库参数的默认值。 - --lcname=LCNAME
要设定的逻辑数据库名称。
取值范围:已经创建的逻辑数据库名称。
该参数必需同-Z datanode一起使用。即vb_guc只允许作用于逻辑数据库的DN实例。
逻辑数据库允许操作的参数同完整数据库不同。具体差异可参见$GAUSSHOME/bin/cluster_guc.conf。 - --ignore-node=NODES
需要忽略的主机名称。说明
- 该参数必须与set/reload一起使用,且-Z只支持datanode。
- 该参数不支持与-D一起使用。
- 在与reload一起使用时,如果--ignore-node没有指定主节点,则集群中所有节点的参数依然会全部同步修改。
- --ignore-node必须在-N all时才可生效。
- -h host-auth-policy
指定需要在pg_hba.conf增加的客户端认证策略。
取值范围:- HOSTTYPE DATABASE USERNAME IPADDR IPMASK authmehod-options
- HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK authmehod-options
- HOSTTYPE DATABASE USERNAME HOSTNAME authmehod-options
HOSTTYPE是必选参数,取值范围如下:- local:Unix域套接字。
- host:普通或SSL加密的TCP/IP套接字。
- hostssl:SSL加密的TCP/IP套接字。
- hostnossl:纯TCP/IP套接字
authmehod-options是可选输入,取值为:trust、reject、md5、sha256、sm3、cert、gss。详细的参数说明请参见“pg_hba.conf”配置文件中的描述。指定-h的情况下,默认会尝试修改所有节点的pg_hba.conf文件,但是如果是编译安装,由于没有静态文件,可以成功修改本节点的pg_hba.conf文件,但是会提示静态文件不存在。说明
- -?, --help
显示帮助信息。 - -V, --version
显示版本信息。 - -M, --keymode=MODE
设定该密码在数据库运行过程中,用于服务端(server)、客户端(client)还是创建Data Source对象时调用。
取值范围:- server
- client
- source
默认值:server - -K PASSWORD
指定需要加密的密码。
取值范围:字符串,符合密码复杂度的要求。 - -U, --keyuser=USER
指定要加密的用户,隶属于OS用户。VexDB可以为每个用户配置不同的ssl证书和私钥文件,指定该选项,可以生成按用户名区分的密码文件。说明
- -S CIPHERKEY
指定需要加密的字符串,长度应在8~16之间,并且至少有3种不同类型的字符。
取值范围:字符串。 - -R RANDFILEDIR
指定放置rand文件的目录。 - -C CIPHERFILEDIR
指定放置cipher文件的目录。 - -o PREFIX
指定需要输出的OBS类型的cipher和rand文件前缀名称字符串,默认输出文件名前缀为obsserver。
取值范围:仅支持数字、字母和下划线。 - -Z NODE-TYPE
指定数据库实例节点类型,参数默认值为datanode。NODE-TYPE用于识别配置文件。
取值范围:datanode。说明
数据库实例节点类型有coordinator、datanode、cmserver、cmagent和gtm。VexDB只能取值为datanode,当NODE-TYPE为datanode时,对应数据库的数据目录中的配置文件postgresql.conf。
使用示例
示例1: 修改数据库允许的最大连接数为800。修改后需要重启数据库才能生效。
vb_guc set -D $PGDATA -c "max_connections = 800"
返回结果如下:
Total instances: 1. Failed instances: 0.
Success to perform vb_guc!
示例2: 将已设置的数据库允许的最大连接数值修改为默认值。修改后需要重启数据库才能生效。
vb_guc set -D $PGDATA -c "max_connections"
返回结果为:
Total instances: 1. Failed instances: 0.
Success to perform vb_guc!
示例3: 检查VexDB中各个实例的参数配置情况。
vb_guc check -D $PGDATA -c "max_connections"
返回结果为:
Total GUC values: 1. Failed GUC values: 0.
The value of parameter max_connections is same on all instances.
max_connections=200
示例4: 设置客户端认证策略。
1、执行如下命令设置客户端认证策略。
vb_guc set -D $PGDATA -h "host replication testuser 10.252.95.191/32 sha256"
返回结果为:
Total instances: 1. Failed instances: 0.
Success to perform vb_guc!
2、查询pg_hba.conf配置文件。
cat $PGDATA/pg_hba.conf | grep "10.252.95.191/32"
结果如下所示,客户端认证策略已经成功设置。
host replication testuser 10.252.95.191/32 sha256
示例5: 注释清理已经设置的客户端认证策略。
1、执行如下命令注释已经设置的客户端认证策略。
vb_guc set -D $PGDATA -h "host replication testuser 10.252.95.191/32"
返回结果为:
Total instances: 1. Failed instances: 0.
Success to perform vb_guc!
2、查询pg_hba.conf配置文件。
cat $PGDATA/pg_hba.conf | grep "10.252.95.191/32"
结果如下所示,示例4中设置的客户端认证策略被注释。
#host replication testuser 10.252.95.191/32 sha256