如何做好 openGauss 企业级部署.docx
OpenGauss数据库作为开源数据库的后起之秀,这两年开源社区蓬勃发展,越来越多的公司和企业加入到OPenGaUSS开源社区.作为纯国产开源的关系型数据库,当前部分银行已经尝试在生产应用OPenGaUSS数据库,同时也有很多合作伙伴在OPenGaUSS内核的基础上推出各自的商业版本.OpenGauss数据库至今为止基本保持三月一次发版的节奏.每次发版都会发现内容非常多,不仅包含大功能的新增和改进,同时也有非常多的问题技修豆.可以说OPenGaUSS开源社区的投入,并不逊色于传统的大型商业数据库公司.国内几家合作伙伴的加入和贡献,也让OPenGaUSS数据库生态越来越好,这也给企业在生产使用OPenGaUSS数据库带来更大的信心.作为新的数据库,如何做好企业及部署,这是值得探讨的地方,这篇文常并不是一个细致的安装教程,网上也不缺乏该类教程而是结合商业数据库应用和部署的经脸,讨论下OPenGaUSS数据库企业级应用需求下需要考虑的方方面面.数据库架构设计OPenGaUSS作为集中式的单机数据摩,这里的架构设计主要是讨论高可用怎么做.同城和异地容灾怎么做。本地高可用传统的数据库本地高可用有两种比较流行的方式:集中式存储方式和数据库复制方式.Db2和OraCIe等商业数据库的部罟大部分都是采用集中式存储的模式.而MySQ1.数据库就基本都是通过数据库复制的模式来实现高可用。集中式存储官方的架构图也是推荐使用这种方式.OPenGaUSS数据库提供了Om工具来帮助部署和萱理OPenGaUSS数据库的主管集群节点.OPenGaUSS数据库的物理豆制支持一主多备和级联备等功能,未来也会加入延时宜制功能.OPenGaUSS的备机是支持只读操作的,可以实现读写分离,减少主库的读负载.建议本地高可用就通过数据库物理同步来实现.建议打开备机可读,设首Wa1.IeVel为hot,standby.为了保障数据一致性.SynChrOnOUS.commit建议修改为remote,write或者remote.receive.如果只有一主一从的情况下,建议设者most.available,sync为on.最后通过第三方的高可用集群软件来监视OPenGaUSS的主从状态,实现故障自动切换等商可用场景.客户端访问方式OpenGauss数据库主从架构下,客户端如何连接到主数据库呢?又怎么做读写分黑?这个时候就需要讨论下客户端连接数据库的几种方式:VIP,DNS和主机列表.因为OPenGaUSS数据库的jdbc驱动里支持设置多个主机,并提供参数设置只连主节点还是只连备节点,这也应对了读写分寓的需求.VIP传统的VlP模式只能支持应用连接到主节点上,从节点的读诘求是不太好设宜的.增加读VIP的菅理对于高可用软件来说就太复杂了。VIP管理还有一个限制是必须属于同一网段.对于同城双中心不能采用相同网段的情况下,VIP漂移就不能实现。DNSDNS也具备高可用性,但是只能检测到机器IP是否存在,不能检测OPenGaUSS的服务,所以采用DNS的高可用相对来说不太适合数据库来使用.主机列表例如下面这个例子就是只连主库的客户端设置:url=jdbc:postgresql:/:26000,:26000/?connectTimeout=SSitargetServerType=master&tcpKeepAlive=true我比较偏向于采用主机列表的方式,通过配置客户端参数,实现自动主库发现,负载均衡,只读从库等各类应用场景需求.这种方式也避免了VIP,DNS在不同架构下的管理豆杂性,相对更通用一些.缺点是增加了一点客户端数据源配2S的复杂性.同城容灾系统用户操作系统用户主要是安装OPenGaUSS的用户和组,以及需要使用gsql客户端访问OPenGaUSS数据库的操作系统用户.例如华为的OPenGaUSS数据库默认采用Omm用户和dbgrp用户组,这在华为的高斯分布式产品里都是这个设计的。我们使用OPenGaUSS的时候也延续了这个习惯.超级用户Omm操作系统用户具有OPenGaUSS数据库程序的访问权限能执行gsql、gs.ctl等工具,而这些工具的权限一般是700,也就是说只有Omm用户能使用。而通常Omm用户访问本地的OPenGaUSS是通过socket,可以使用超级用户,还可以免密,因此这个用户完全是交给系统管理员的,不适合交给用户使用.应用用户那么如果应用用户需要使用gsql等工具怎么办?这种情况下建议设计一个系统用户叩PUSer,并为它安装一个单独的gsql等工具客户端通过IO连接数据库.数据库用户数据库用户也应该分为几种类型:超级省理员、监控管理员.数据库管理员和普通数据库用户.超级管理员一开始initdb的初始用户就是超级管理员用户,具有sysadmin的权限。这个用户通常不会交给应用来使用,甚至不应该当做超级管理员来使用.这个用户只能是作为能够登录到这个操作系统上应急的免密超级用户。所以为了管理OPenGaUSS数据库,我们还需要创建一个单独的管理员用户具备sysadmin角色权限.例如设计一个gsadmin用户,在运维工具平台通过这个用户远程管理所有的OPenGaUSS数据库。createusergsadminwithsysadminpassword,xxx×xx××,还有一种用户是远程备份用户,建议创建单独的用户并sysadmin角色权限。监控管理员OpenGauss数据库从2.0.0版本开始提供了monadmin角色.这个角色权限能终访问所有的系统视图.因此对于监控用户,建议配背这个角色即可.createusermonadminwithmonadminpassword,x×xxx×xx'数据库首理员OPenGaUSS的数据库是相互隔离的.对于每一个独立的数据库,可以设置一个数据库管理员角色的用户,给予全库的管理权限。grantallprivilegesondatabase<dbname>to<username>这种用户通常也是作为应用来连接的用户,具备全库的对象管理能力,也具备数据修改查询能力.这是一种很常见的用法,很少有在应用数据源配普连接用户的时候还继续做细致的权限分离。当然数据库权限管理是具备相关能力的。普通数据库用户除了本应用系统使用的数据库管理员用户,可能还存在类似若系统访问的特殊需求情况.例如抽取数据的用户,只读访问的用户等.这些用户建议创建单独的最小授权用户.白名单在OPenGaUSS数据库的目录下,设计了pg.hba.conf配置文件,用来定义用户访问数据库的方式,也可以称作是白名单管理.定义了在什么访问类型下,访问哪个数据库,是哪个用户,从哪里来访问,采用何种验证方式。这些组合可以实现很复杂的白名单过滤规则.这种可以过滤IP的用户访问控制有点像mysql,但是又完全不一样.OpenGauss里的数据库用户名对应的就是一个用户角色,不像mysql,如果用户名里的IP不一样,其实算是不同的用户.不过从金融行业的实践来看,数据库服务器和应用服务器等在隔寓的网络区内,主机间的访问控制通过网络来管理,基本不需要底层数据库来实现豆杂的管控.为了管理方便,不如全部放开数据库级别的ip管控.下面这个例子使用gs_guc工具配置整个集群所有的白名单:gs_gucreload-Nall-Iall-h'hostallall0.0.0.0/0sha256"M译过来就是任何IP基于host请求过来的所有用户访问所有数据库都果用Sha256加密算法验证用户。文件系统设计OPenGaUSS数据库建议配置至少两个独立的文件系统.一个用来放数据库,一个用来放数据库运行中产生的归档日志,诊断日志等.数据库数据库存放的路径建议放在单独的文件系统上.部分*要的业务系统也建议将在线日志pg,×og放在单独的文件系统上,与数据data分开.然而从实际情况来者,data和xlog采用不同的文件系统,除非底层的盘也是独立的,性能是没有什么区别的.因此暂时建议采用一个就可以了.诊断日志数据库运行中产生的诊断日志,审计日志,归档日志,core文件等,都是不影响数据库运行的,但是又持续不断的产生的。因此需要单独规划一个文件系统来存放,同时做好这些日志的清理策略.这个文件系统也可以用来规划存放脚本文件,备份文件,跑批文件等临时文件.例如将归档日志路径、审计日志路径、Core文件路径和诊断日志路径都设置到这个文件系统下面.gs_gucset-c"archive_Command=,cp%p/gausslogarchive%f'""gs_gucset-c"audil_direcIory='gaussloglogo11mPg_aUdit'"gs_gucset-c*bboxdump_path-'ZgausslogZcorefiIe'gsgcset-c"logdirectory=>gaussloglogoaunpglog'"其他运维设计规划好了数据库安装,下一步是设计相关运维需求方案.性能参数设25安装完成之后最先需要的是根据业务负载需求设置相关参数.这些参数细节比较多,需要好好阅读相关资料再做选择.其中max_PrOCeSS.memory和ShareC1.bUfferS是比较关键的内存参数,建议按照操作系统内存总量(数据库独占资源)的70%和50%来设冒.增JB检查点和双写开关应该打开.这个是OPenGaUSS相对于postgresql比较大的改进机制,解决了全量检查点的性能瓶颈问题。enable.OPfUSion开关也建议打开,对于高并发小事务的竞争会有改善.gs_gucset-c,cstore-buffers=128MB-gs_gucset-c'enable_alarm=off"gs_gucset-c,enable_delta_store=on-gs_gucset-c'enable_double_write=on"gs_gucset-c,enableJncrementa1.checkpoint=on"gs_gucset-c'enable_wdr_snapshot=off"gs_gucset-c,enable_xlog_prune=on"gs_gucset-c'log_min_duration_Statement=Is-gs_gucset-c'maintenance.work.memxlGB"gs_gucset-c'max_ConneCtionS=2000"gs_gucset-cmax-files.per-process=10000,gs_gucset-c'max_PrePared.transactions=2000'gs_gucset-c'sessionjimeot=0"gs_gucset-c,shared-buffers=2GB"gs_gucset-c'temp_bUfferS=128MB'gs_gucset-c'update。CkWaijtimeOUt=lmin"gs_gucset-c'wa1.bUfferS=64MB"gs_gucset-cewdr_snapshot_interval=10min-gs_gucset-c'work,mem=512MB"gs_gucset-ceIogJempJiIes=100MB"gs_gucSet-c,enable-mergejoin=ON"gs_gucset-c'enable_nestloop=ON"gs_gucset-c'advance_xlog_file_num=10”gs_gucset-c'pagewriter,sleep=1000ms-gs_gucset-c'XloginsertJocks=50rgs_gucset-c,Iockwai1.timeout=lmin"gs_gucset-c'enable.OPfUSion=off"gs_gucset-c'max_process_memory=3GB*自动管理为了降低DBA的运堆工作量,使用OPenGaUSS的过程里要充分利用好数据库的自动管理机制.尤其是跟性能动态调整相关的机制.自动统计信息收集分析OPenGaUSS数据库内部的执行计划有两种选择方式,基于规则和基于代价.基于代价的这种方式依赖于数据库的统计信息.数据库的统计信息是由analyze命令采集的.除了人为发出analyze命令,OPenGaUSS内部也提供了自动analyze的功能.建议打开autoanalyze和autovacuum的开关.自动清理OpenGauss的存储引擎还有一个比较特殊的地方,就是update和delete都会保留原元组,作为MVCC的基石,这种机制会不停产生死元组,并且一直占据表内的空间.这种情况下需要vacuum命令来回收这些空间后续的数据才能使用.OpenGauss提供了autovacuum机制,能够根据表的数据变化量自动触发vacuum机制,回收死元组.但是在vacuum受到MVCC机制影响,清理数据会检查数据库里最老的事务.因此除了打开autovacuum,还需要控制好数据库内的最长事务.所以需要监控pg_stat_activity中×act.start不为空的事务,判断长事务.如果遇到一亘处于idleintransaction状态的连接,一定要检查处理.安全审计OpenGauss数据库提供了安全审计功能,可以设置相关审计参数,将审计日志记录下来,通过sql函数pg_query_audit直看审计记录.下表展示了甫计相关的配置项.其中DM1.操作和SE1.ECT操作审计功能建议关闭,因为审计量太大了.配选项描述用户登录、注销审计参数:auditoginogout默认值为7,表示开启用户登录、退出的审计功能.设度为0表示关闭用户登录、退出的审计功能.不推荐设置除。和7之外的值.数抠库启动、停止、恢复和切换审计参数:audit_database_PrOCeSS默认值为1,表示开启数抿库启动、停止、恢复和切换的审计功能。用户锁定和解锁审计参数Iaudit-UserJocked默认值为1,表示开启审计用户锁定和解锁功能.用户访问越权审计参数:audit_user_violation默认值为0,表示关闭用户越权操作审计功戳.授权和回收权限审计参数:audit_grant_revoke默认值为1,表示开启审计用户权限授予和回收功能.数据库对象的CREATE,A1.TER,DROP操作审计参数:audit_system_object默认值为12295,表示只对DATABASE.SCHEMA、USER、DATASOURCE这四类数据库对象的CREATE、A1.TER.DROP操作进行审计.具体表的INSERT.UPDATE和DElETE探作审计参数:audit.dml.state默认值为0,表示关闭具体表的DM1.操作(SE1.ECT除外)审计功能.SE1.ECT操作审计参数:audit_dml_state_select默认值为0,表示关闭SE1.ECT操作审计功能.CoPY审计参数:audit_copy_exec默认值为0,表示关闭copy操作审计功能.存储过程和自定义函数的执行审计参数:audit_function_exec默认值为0,表示不记录存储过程和自定义函数的执行审计日志.SET审计参数:audit_Set.parameter默认值为1,表示记录Set操作审计日志如果需要针对特殊用户进行SQ1.级别的审计,可以使用AUDrrPO1.ICY统一审计方式.打开enable.security.policy开关统一审计策略才可以生效.统一审计默认输出节点的rsyslog日志中,在操作系统后台服务配置文件etcrsyslog.conf中添加代码:IocaIO.*varlogloCaImeSSageS执行如下命令:sudotouchvarlogloCalmeSSageSsudoChmOd600localmessagessudoSystemctlrestartrsyslog然后通过创建AUDITPO1.ICY实现.CREATEAUDITPO1.ICYIFNOTEXISTSpolicy.nameprivilege_audit_clauseaccess_audit_clause)filter_group_clauseENAB1.EIDISAB1.E);例如仅审计userl用户的iud操作:CREATEAUDITPO1.ICYadtlACCESSINSERT,UPDATE,DE1.ETEFI1.TERONRO1.ES(Userl);监控告警对于企业级的数据库部署运维,监控告警和应急处理是最电要的.对于OpenGauss的监控告警需要达到的目标是能够准确发现问题并告瞥,能够快速基于监控数据分析根因并处理.为了实现这个目标,建议OPenGaUSS数据库的监控一方面要全面采集性能和状态指标,另一方面对于关键指标实现准确告瞥.监控OPenGaUSS提供了很多监控视图.特别是dbe_Perf模式下的监控视图,内容包括OS、Instance.Memory,File,Object,Workload,SeSSiOn/Thread、Transaction.Query,CaChe/10、Utility.1.ock.WaitEvents.Configuration,Operator和WorkloadManager等对象的监控.这些监控视图也是WDR报告的快照来源,建议统一采集这些性能快照视图数据,通过锣能运维管理和分析.告警相对于监控数据采集的全面性,告警指标需要挑选全局有意义的对象.点要的告警有监控数据库状态、主从豆制状态、在线会话数量、等待会话数量、长事务、长SQ1.、死锁、回滚语句数量等.笛份恢豆OpenGauss数据库支持的备份方式还是比较全面的.而企业级的数据库在这方面要求也很高。一方面为了出问题尽快恢宣,数据库定期备份策略都比较激进,另一方面备份过程还要尽最减少性能膨响和资源占用.例如银行一般每天都会备份全量数据库,时刻备份归档日志,为了减少性能影响,备份会选择从库执行。如果是远程备份,那么还会采用单独的备份网段,与生产业务网隔黑.很多国内备份J.家当前也一直在测试备份。PenGHUSS数据库,相信很快就会有类似于NBU这样的备份产M出现,井在企业级应用。OPenGaUSS数据库支持远程备份,当前也可以建立基F网络的备份服务器,通过备份专用网,统一调度管理所有数据库的备份。结束语其实做好OPenGaUSS企业级部署,就是拿之前对于Db2和Orade的运睢标准来建设OPenGaUSS数据座的运维体系.OPenGaUSS数据库技术特点与这些商业数据库相比差别不大,当前欠缺的也只是生态和产品成熟性.相信这两方面会越来越好,因此我对于OPenGaUSS数据面在企业中的应用前景非甫看好,也希望其尽快成为一个合格的国产替代品.