Greenplum备份、安全与高可用

2023-03-29 00:00:00 数据库 连接 备份 节点 加密

Greenplum高可用
Greenplum高可用的实现主要由以下四个部分组成:

管理节点
——需要手动激活备节点(GP7中据说可以实现自动failover)
数据节点
交换机
——建议双万兆网卡,采用模式4绑定,交换机使用链路聚合LACP的方式
服务器
——硬件冗余、raid5、hotspare


Greenplum自身在高可用方面的实现主要是2各方面,管理节点和数据节点。在管理节点方面,Standby和Master的实时更新是通过WAL(预写式日志,一种流复制技术)。可以通过“gpstate -f”命令来查看管理节点是否同步。


数据节点segment的高可用也是通过WAL来实现,可以保证实时的更新以及数据完整性和一致性。数据节点上的primary所对应的mirror会分布在集群内其他segment服务器上。可以通过“gpstate -m”查看segment之间的同步情况。在segment实例失效时,可用通过“gprecoverseg”命令进行恢复。


实现高可用的前提是获取到集群内各个节点的相关信息,gprecoverseg在恢复失效实例时,就是基于系统表gp_segment_configuration来判断对于哪些实例进行恢复。


还有一个系统视图gp_stat_replication值得关注,它是记录了walsender进程的复制状态统计信息,包括整个复制所处的阶段以及同步的状态。


Greenplum安全
Greenplum安全主要分为四大块:

身份验证
数据库连接和数据加密
授权
审计
身份验证-pg_hba.conf
当Greenplum数据库初始化成功后,当客户端请求访问数据库时,我们应该首先编辑好pg_hba.conf。这个配置文件是用来处理所有用户的身份验证,位于KaTeX parse error: Unexpected character: '' at position 32: …CTORY目录下,按行读取。 ̲ 处理用户鉴权  文件位于MASTER_DATA_DIRECTORY目录下
 忽略注释
 文件是按行读取
 应用首-个匹配行
 忽略所有在首-个匹配行之后的行
 悲观——没有授权意味着拒绝访问
 对于通过网络远程访问的主机,用户/主机需要成对出现在pg_hba.conf中

pg_hba.conf有5个必配置项。列是连接类型(本地连接、网络连接)。网络连接分为两种:

hostssl——强制加密连接
hostnossl——无需加密连接


第二列和第三列分别是客户端希望访问的数据库和以什么用户身份访问。all表示所有数据库和用户


第四列表示客户端所在位置,可以用主机名、IP地址、CIDR-address(无类别的域间路由)。其中0.0.0.0/0表示整个网络。


第五列表示访问方法。其中md5表示用户密码通过哈希加密发送到数据库服务器进行验证。用户可以根据实际环境和要求来使用这些认证


当编辑完pg_hba.conf配置文件后,可以使用gpstop -u应用该文件,该命令不会重启数据库,仅仅是更新该文件并使之生效。下图中给出一个某网段匹配多行规则的例子,当整个网段0.0.0.0/0为trust时,后面又将192.168.0.0/16设置为md5,则后者将匹配到行的规则。


加密数据库和连接
连接
用户身份验证只是步,从端到端的安全来说,还需要数据传输的加密和数据保存在数据库中的加密。数据传输加密即连接加密,例如数据从客户端传输到数据库服务器的加密。GP基于OpenSSL技术进行加密,默认读取$GP_HOME/etc/openssl.cnf这个配置文件,同时在服务器配置文件postgresql.conf中将SSL设置为on。SSL证书位于master和segment数据目录下。随后在pg_hba.conf配置文件中将列连接类型设置为hostssl就可以启用连接加密。在下图的psql远程连接的例子中,红框中的cipher:******表示该连接使用了加密连接。


gpfdist
GP数据库中,gpfdist作为可以并行数据加载的工具是很常用的。gpfdist也支持ssl选项,表示对传输的数据进行SSL加密。同样的,使用gpload也可以在yaml文件中配置SSL选项来启用加密连接(gpload也是调用gpfdist)。


静态数据加密
数据通过网络传输到数据库服务端之后,GP对于数据库服务器中的数据的静态加密解决方案是使用Pgcrypto模块进行加解密。该模块支持的加密包括哈希、对称加密和非对称加密。


在哈希函数这块又分为两种,一种是通用的哈希函数,另一种是专门用户密码的哈希函数,包括crypt()和gen_salt()。后者的加密速度慢,但破解难度高,非常适合密码的加密。
PGP加密函数支持对称加密和非对称加密。
同时也支持裸加密函数,encrypt()和decrypt()。
用户可以根据使用要求选择相应的函数。

授权
对象权限
当数据存储到数据库后,还可以对用户进行授权,即允许其访问哪些对象,这些对象包括表、视图、数据库、函数、过程语言、schema等等。GP6增加了对于指定列的访问,安全级别更高。


SHA-256加密用户密码
用户的密码通常保存在GP数据库中,默认使用md5加密存放。不过目前网上很多可以查询哈希值然后反推出密码的网站,安全性不够高。如果希望提高安全系数,使密码更难破解,则可以使用sha-256加密算法。可以在系统级别和会话级别分别设置,来强化用户密码安全度的目的。


限制访问时间
根据业务需求,我们可以同时对用户角色限制访问时间。


审计
$MASTER_DATA_DIRECTORY下的pg_log目录下有很多gpdb-2021-.csv文件,一般来说是每天一个csv文件,该文件可以用于审计,内容包括:
 数据库的启动和停止
 Segment是否失效/报错
 SQL执行状态和信息
 导致SQL出现error的状态
 所有用户对于数据库的连接尝试和断开
例如当我们需要看一些比较严重的报错(panic),可以使用gplogfilter 命令来查询日志中有没有相关信息
gplogfilter -f ‘panic’ 2020-08.csv > log.panic

数据库端口与协议
在系统配置文件sysctl.conf中可以设置local_port_range来定义本地TCP/UDP使用的端口范围。GP安装时,要求系统防火墙关闭。为了实现高效的数据传输,GP在数据传输时使用 UDP协议(可以修改,貌似master的通信是TCP)。GP在使用UDP传输时,是在一定范围内任意使用端口(服务器上的每个segment实例使用不同的端口,可以指定),不会固定到具体的某个端口。


Greenplum备份
Greenplum是MPP架构的分布式数据库,实际上是由多个postgres实例组成。所以要想实现比较高效的备份与恢复,需要使用并行的模式,可以针对多个postgres实例分别进行备份与恢复。


GP6推出了新的备份与恢复工具,分别时gpbackup和gprestore。gpbackup相对于之前的备份工具提升了性能,增加了功能。相较于之前的备份工具(dark?)在备份时会对pg_class使用了排它锁/独占锁。这样有2点不好的地方,首先是可能和其他锁冲突,导致备份不成功。其次是当获得pg_class独占锁之后,同样会导致其他问题,例如创建表失败。而使用gpbackup时,只是获取ACCESS SHARE LOCK,与执行select时获取的锁相同,而且锁是针对表级别,范围大大缩小,更利于备份时对其他表进行drop、alter、create等操作。
1、Designed to improve performance , funcctionality ,and reliability of backups
2、gpbackup utilizes ASSECC SHARE LOCK at the individual table level instead of EXCLUSIVE LOCK on pg_class catalog table。

3、This enables to run DDL statements during the backup like CREATE,ALTER,DROP,and TRUNCATE as long as these aren`t on the table currently being backed up.

gpbackup在备份时分为两种,一种是全备,也包括支持增量的全备,它们唯-一的区别是后者增加了–leaf-partition-data。同时也支持第三方的备份工具,例如用于去重的DataDomain通过配置专门的yaml文件来实现。


另一种是增量备份,它支持行存列存的AO表(append only),对于heap表都是采取全备。如果AO表有delete、alter、insert等操作之后(只要有变化),就会进行增量备份。后要注意的是,这种增量备份适用于AO表特别多,而且变化的AO表不是很多的场景


gpbackup_manager
显示有关现有设备的信息,删除现有备份或加密安全储存
gpbackup_manager list-backups
gpbackup_manager display-report 20190612154608
gpbackup_manager delete-backup 20190612154608
gpbackup_manager delete-backup 20190612154608 --plugin-config ~/ddboost_config.yaml

其他备份工具
GP中的master是一个单独的postgres实例,可以通过该节点实现串行备份,此时使用的命令与PG完全相同。
 pg_dump
——导出表的数据或者结构
 pg_dumpall
——适用于全局对象的备份和保存,以及数据结构迁移等


本文来源:https://blog.csdn.net/weixin_42788640/article/details/115470978

相关文章