”管理指南“这个章节是比较重要的,以下是我的心得和笔记。
延着 Skylab-》OushuDB 云原生数据库 这个路径,我们可以找到 Worksheet 这个 SQL 编辑器,用它去编写与提交相关的脚本,操作体验还是比较爽利的,也让我对偶数的管理有了更多的认识。
非常感谢培训组织者,在开课第 3 周之后,就开放了上机操作环境,让我们有比较足够的时间去练习相关的操作。
1.1.角色和权限
CREATE ROLE name;
DROP ROLE name;
SELECT rolname FRoM pg_roles;
超级用户 gpadmin
登陆权限
CREATE ROLE name LoGIN;
CREATE USER name;
超级用户状态:CREATE ROLE name SUPERUSER;
创建数据库:CREATE ROLE name CREATEDB:
创建角色:CREATE ROLE name CREATEROLE;
口令:CREATE ROLE name PASSWORD 'string';
让一个角色能够创建其他角色和新的数据库:ALTER ROLE name CREATEROLE CREATEDB;
更改一个角色的口令:ALTER ROLE name WITH PASSWORD'newpassword’;
移除一个角色的口令:ALTER ROLE name WITH PASSWORD NULL;
权限:SELECT, INSERT, DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT, TEMPORARY, EXECUTE 和 USAGE
更新表的权限
GRANT UPDATE ON department To fred;
GRANT ALL ON department To fred; 赋予所有权限给 fred
GRANT UPDATE ON department To public; 赋予更新权限给所有用户
撤销权限:REVOKE ALL ON accounts FROM PUBLIC:
1.2.客户端认证
Pg_hba.conf 是客户端认证的配置文件
Hba, 即 Host-based authentication.
认证方式:
信任认证 Trust:允许任何可以与 0ushuDB 数据库服务器连接的用户进行连接,而不需要口令或任何其他认证,建议不要在生产环境中使用。(适合用于本地 127.0.0.1 以内的客户端认证)
ident 认证:通过从一个 ident 服务器获取客户端的操作系统用户名,然后列出允许的相对应名称的映射文件确定允许的数据库用户名。(映射文件为 pg_iden.conf)
口令认证:以口令为基础的认证方法包括 MD5、crypt 加密、明文 password。如果你担心口令的安全问题,那么 md5 比较合适。(口令不建议在不信任的网络中使用,因为它是明文传递的。口令存放在 pg_authid 系统表中)
LDAP 认证: 使用 LDAP 作为密码验证机制。ldap[s]://servername[:port]/base dn[;prefix[;suffix]] (用户名必须事先存在)
PAM 认证:除了使用 PAM(可插入认证模块)作为认证机制之外,此认证方法与密码类似。(用户名必须事先存在)
Kerberos 认证:Kerberos 是一种适用于在公共网络上进行分布计算的工业标准的安全认证系统 (只提供安全认证,但不加密任何在网络上传输的查询和数据。OushuDB 支持 kerberos5。Kerberos 支持必须在编译时打开。)
1.3.虚拟子集群
一、虚拟集群(Virtual Cluster)原理与定义
虚拟集群是若干个 Segment 的集合
每个虚拟集群都是彼此互斥的集合(一个 Segment 只能属于一个虚拟集群)
每个虚拟集群只管理其内部的 Segment 资源
每个虚拟集群会维护其内部的资源队列
每个虚拟集群拥有个性化属性(VCProperty)
所有虚拟集群的信息全部持久化存储在元数据表 pg_vcluster 中
二、虚拟集群的原理和使用-虚拟集群的属性:
虚拟集群属性(VCProperty)实际上是从以前 GUC 中迁移过来的配置,目前支持以下属性
三、虚拟集群的 DDL 使用虚拟集群的原理和使用:
用户可以通过 DDL 来创建、删除、扩容、缩容、查询,其中黑体的属性是创建资源队列必须指定的属性。
SELECT * FROM pg_vcuster;查看所有 VC 信息
如果创建 VC 不带任何选项将创建一个空的 VC,若虚拟集群未指定 VCProperty,则取默认值。
新创建的 VC 会自动创建 pg_root 和 pg_default 两个资源队列。
域名支持扩展匹配,每一个域名可以通过,分割,每个域名内可以使用"[X..Y..S]来表示一组域名,其中 X 为起始,Y 为结束,S 为步长的闭区间,且‘[]’也可以通过‘,’分割,例如:segments='192.168.1.[1,2,3..4,5..10..2],hawq[1..2]'会被解析成 192.168.1.1, 192.168.1.2, 192.168.1.3, 192.168.1.4, 192.168.1.5, 192.168.1.7, 192.168.1.9, hawq1, hawq2
需要注意的是,DDL 不会检测域名的连接性,意味着即使不存在的域名也会被无条件的使用,需要用户自己确认是否存在纰漏。
文件地址是一个包含若干行域名的文件路径,每一行的域名按照上面的方式解析且支持空行。
无法删除繁忙 VC
同一个 Segment 同一时刻只能属于一个 VC,且 Segment 繁忙时无法被缩容
四、虚拟集群的原理和使用--虚拟集群的 DDL 使用
用户还可以通过 DDL 来修改、查询 VC 属性,其中黑体的属性是创建资源队列必须指定的属性。
ALTER VCLUSTER vcname WITH(vcproperty=value[,vcproperty=value])[IN SESSION];
ALTER VCLUSTER vcname WITHOUT(vcproperty[,vcproperty])[IN SESSION];
SHOW VCPROPERTY vcname.vcproperty;
若修改 VCProperty 时添加了 IN SESSION 则只在当前 SESSION 生效。
SHOW VCPROPERTY 会显示 OushuDB 内部实际使用时的值,其优先级如下 SESSION >CATALOG >DEFAULT
同样可以通过 SELECT * FROM pg_vcluster 来查询 CATAL0G 级别的 VCProperty。
五、虚拟集群的原理和使用--虚拟集群的初始化
OushuDB 会在默认的情况下构建一个默认虚拟集群 vc_default,且此虚拟集群拥有两个默认的资源队列 vc_default.pg_root 和 vc_default.pg_default 供用户使用。同时管理员用户 gpadmin 会直接绑定到 vc_default.pg_default。
此外用户可以通过 oushudb init cluster --vcluster config=PathToConfig 来自定义更多的配置
vcluster config 配置文件格式如下:
每行一个条目,每个条目两列
第一列域名,第二列所属 VC(若第二列为空,则默认为 vc default)
需要注意的是,hash table bucket number 会按照节点个数平均分配给每个 VC
1.4.资源队列
一、资源队列:基于 Role 定义
每个 Role 只能选择一个资源队列
每个资源队列可以为多个 Role 的多个并发的客户端提供资源分配服务
二、OushuDB 资源分配
1.能够根据计算或 I0 成本弹性选择 SQL 运行的并行度
2.能够选择距离访问数据最近的 Segment 分配 VirtualSegment 提高 I0 效率
3.能够考虑并行的资源使用申请,公平分配资源给并行运行的 SQL 语句
4.能够针对并行计算特点均衡 Segment 间资源消费,优化并行计算吞吐
5.能够自动实现资源队列间资源调动
三、资源队列的树形结构
1.每个虚拟集群的默认队列 pg_root 永远是树形结构的根,代表动态识别的虚拟集群全部资源
2.每个虚拟集群的默认队列 pg_defaut 永远是 pg_root 的一个叶子队列,是一个 Role 的默认资源队列
3.所有资源队列可用资源量都是通过相对于父队列百分比定义的,因此集群节点加减带来的可用资源量的动态变化直接反应到每个实际的资源队列中
4.资源队列支持 overcommit 的方式去抢占空闲队列的资源
5.分支队列都用于自上向下传递资源队列的资源比例(如上图的 vc default.depart1)
6.叶子队列对外提供资源分配服务(如上图的 vc default.ptest 和 vc defualt.adhoc)
7.一个父资源队列的所有子资源队列的资源百分比和不能超过 100% 因此调大一个队列资源比例前需要先降低一个兄弟队列的资源比例
8.OushuDB 支持动态的对繁忙的资源队列进行属性修改
四、资源队列的 DDL 定义
CREATE RESOURCE QUEUE vc_name.queue_name WITH(queue_attr_list);
ALTER RESOURCE QUEUE vc_name.queue_name wITH(queue_attr_list);
DROP RESOURCE QUEUE vc_name.queue_name queue_attr_list ::= queue_attr=value | queue_attr=value,queue_attr_list
1.5.运行状态监控
一、集群可用性检查
1、检查集群节点状态:查询 gp_segment_configuration,检查 Seqment(注册的 role 为’p'’的节点)的 status 是否为’u’,检查注册的 Segment 数量是否符合期待
Role 的三个取值:m=master, s=standby, p=segment
Status 的两个取值:u=up, d=down
2、检查集群节点状态历史:查询 gp_configuration_history,可确认历史某时段是否发生节点不可用的问题导致资源量的变化
二、资源队列定义和运行状态检查
1、检查资源队列定义:查询 pg_resqueue,可得到每个资源队列的定义和之间构成的树结构
2、检查资源队列状态:查询 pg_resqueue_status,可得到每个资源队列的实际使用状况
三、SQL 资源检查
Explain 会显示出执行计划,但不会真正地执行。
通过 Explain Analyze 的输出来检查,它会真正执行。
data locality ratio 表明当前 Virtual Segment 分配方案是否能够对目标数据实现本地 I0,1 表示 100%,一般期望不低于 0.95
virtual segment number 表明分配的 Virtual Segment 总数
different host number 表明分配的 Virtual Segment 分布到多少个 Segment 上
virtual segment number per host (avg/min/max)表示平均每个 Segment 拥有的 Virtual Segment 数量,一个 Segment 上拥有最少 Virtual Segment 和最多 Virtual Segment 的数量,通常这三个数字相等表示 Virtual Segment 均匀的分布于集群中,这最符合并行计算模式的负载
1.6.数据库启动关闭
一、启动 OushuDB: 启动整个集群
source /usr/local/hawq/greenplum_path.sh
oushudb start cluster --with_magma
启动哪些 segment 是由/hawq -install -path/etc/slaves 中包含的节点确定的
二、启动 OushuDB: master 和 segment
oushudb start master #启动 master,指的是启动本地
master oushudb start segment #启动 segment,指的是启动本地 segment
三、停止 OushuDB
方式一
。oushudb restart cluster #重启 OushuDB 集群
。oushudb stop cluster #停止 OushuDB 集群
方式二
。oushudb restart master #重启本机的 OushuDB master
,oushudb restart segment #重启本机的 OushuDB segment
。oushudb stop master #停止本机 OushuDB master
。oushudb stop segment #停止本机 OushuDB segment
1.7.日志查看
一、命令行查看日志
启动日志
/home/gpadmin/hawqAdminLogs
hawq_init_.log
hawq start_.log
hawq_stop_.log
服务器日志
$GPHOME/etc/oushudb-site.xml 中查找 hawq_master directory 和 hawq_segment directory
hawq_master_directory/pg log/hawq-.[csv|log]
hawq_segment directory/pg_log/hawq-.[csv|log]
二、通过偶数云平台查看
1.8.审计告警
在偶数云平台上操作。Skylab 的基础组件 Lava 部署完之后,自带审计中心。
告警:站内信、手机短信、电子邮件
1.9.集群监控
一、常见状态监控命令
命令行检测:oushudb state
SQL 检测:SELECT * FROM gp_segment_configuration; ----可查看节点的状态
数据库连接数检查:
select count(1) from pg_stat_activity ;
select count(1) from pg_stat_activity where current_query <> '' and procpid <> pg_backend_pid();
二、数据库连接状态监控
三、可视化监控