Github经典案例第三期:PostgreSQL 实操!安装配置客户端或服务器详解!
Posted ITPUB
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Github经典案例第三期:PostgreSQL 实操!安装配置客户端或服务器详解!相关的知识,希望对你有一定的参考价值。
目的:将PostgreSQL安装和配置为客户端或服务器。
平台:Debian7+、ubuntu 12.04+、Red Hat/ CentOS / Scientific(6.0+) - “EL6系列”、Fedora、SLES12+、openSUSE13+ / openSUSE Leap
Chef:12.1+以上
Cookboo ks:compat_resource、openssl、build-essential
属性
基于平台设置以下属性,请参阅attributes/default.rb文件(所有文件及英文原版可参见:https://github.com/sous-chefs/postgresql)。
以下属性在recipe [postgresql :: server]中生成。
postgresql.conf和pg_hba.conf文件是从属性动态生成的。 节点['postgresql'] ['config']中的每个键都是一个postgresql配置指令,并将在配置文件中呈现。例如:
将影响postgresql.conf文件中的以下行:
listen_addresses ='localhost'
属性文件包含Debian和RHEL平台系列的默认值(根据节点['platform_family'])。这些默认值在平台之间具有差异,因为它们最初是从该cookbook先前版本的postgresql.conf文件中提取出来的,它们的默认配置不同。生成的配置文件将与之前相同,但内容将从属性中动态呈现。有关具体配置的详细信息,请参考该开源项目中的PostgreSQL文档。
对于“on”或“off”的值,应将其指定为文字true或false。字符串值将与单引号一起使用。设置为literal nil的配置选项将被完全跳过。所有其他值(例如,数字文字)将被原样使用。 例如:
将导致以下配置行:
logging_collector ='on'
datestyle ='iso,mdy'
端口= 5432
(没有为ident_file打印的行,因为它为零)
请注意,unix_socket_directory配置已重命名为Postgres 9.3中的unix_socket_directories,因此请确保使用节点['postgresql'] ['unix_socket_directories']属性而不是node ['postgresql'] ['unix_socket_directory']。
pg_hba.conf文件是从节点['postgresql'] ['pg_hba']属性动态生成的。该属性必须是散列数组,每个散列包含授权数据。因为它是一个数组,开发者可以附加到自己的cookbook。数组中的哈希键必须是符号,每个哈希将被写入pg_hba.conf中的一行。例如,fromnode ['postgresql'] ['pg_hba']:
将导致pg_hba.conf中的以下行:
如果CIDR-ADDRESS应为空,则使用nil(如上所述)。
请注意,cookbook模板自动提供以下授权规则。该cookbook在PostgreSQL服务器中执行SQL,不提供明文密码。因此,节点['postgresql'] ['pg_hba']属性不需要指定此授权规则:
(顺便说一句,模板使用peer而不是Ident,用于PostgreSQL 9.1及以上版本,具有相同的效果。)
客户端
安装节点['postgresql'] ['client'] ['packages']属性中定义的包。
ruby
在Ruby环境下安装pg gem,以便可以在其他环境中使用。build-essential包和postgresql客户端包将在编译阶段安装,以便可以编译pg的本机扩展。
服务器
包括server_debian或server_redhat,以获取安装和服务管理的相应服务器软件包。并管理服务器的配置:
• •为postgres创建强大的默认密码(通过openssl)
• •设置postgres的密码
• •管理postgresql.conf文件。
• •管理pg_hba.conf文件。
从系统配置获取区域设置和时区设置。创建符合系统的区域设置和时区的node.default ['postgresql'] ['config']属性。此外,还可创建与initdb相同的错误报告和日志记录设置:可存储7天的名为postgresql-Mon.log的日志文件等。
由于Chef属性优先,此方法创建的默认属性很容易被普通属性覆盖。例如,假设DBA希望无限期地保存日志文件,每天滚动或者增长到10MB。Chef安装可包括用于区域设置和时区设置的postgresql :: config_initdb,但需要根据节点的JSON属性自定义日志记录设置:
注意:postgresql :: config_initdb基于PostgreSQL initdb实用程序的源代码中的算法。
性能调优。使用wimpy默认的postgresql.conf,并将数据库服务器扩展为与正在部署的硬件一样强大。这将为专用的Postgresql系统创建一个在正确范围内node.default ['postgresql'] ['config']属性的基线配置,大多数安装不需要额外的性能调整。
需要做的唯一决定是从以下数据库工作负载中选择一个db_type。(有关详细说明,请参阅代码注释。)
该属性可使用具有三个输入参数的性能模型。这些节点属性是完全可选的,但是正确选择db_type显然很重要:
node ['postgresql'] ['config_pgtune'] ['db_type'] - 从上述五个选项列表中指定数据库类型。如果未指定,默认为“mixed”。
node ['postgresql'] ['config_pgtune'] ['max_connections'] - 指定预期的最大连接数。如果没有指定,就取决于数据库类型:“web”:200,“oltp”:300,“dw”:20,“mixed”:80,“desktop”:5
node ['postgresql'] ['config_pgtune'] ['total_memory'] - 以kB为单位指定系统总内存。(例如“49416564kB”)如果没有指定,将从Ohai自动属性中获取。这可以用于调整不是专用数据库的系统。
由于Chef属性优先,此方法创建的默认属性很容易被普通属性覆盖。例如,如果正在运行应用程序基准测试不同的缓冲区高速缓存大小,那么将尝试使用此节点JSON属性:
请注意,该属性在其计算中使用max_connections。如果想覆盖这个设置,你应该指定一个['postgresql'] ['config_pgtune'] ['max_connections']而不是node ['postgresql'] ['config'] ['max_connections']。
注意:postgresql :: config_pgtune基于由Greg Smith和其他pgsql-hackers开发的pgtune python脚本。
安装节点['postgresql'] ['contrib'] ['packages']属性中定义的包。PostgreSQL发行版的contrib目录包括数据库工程师经常需要的移植工具、分析工具和插件功能。有些(如pgbench)是可执行的,其他(如pg_buffercache)将需要安装到数据库中。
安装在节点['postgresql'] ['contrib'] ['extensions']属性中定义的任何contrib模块扩展。这些将在集群随后创建的数据库中可用,因为它们将使用CREATE EXTENSION命令安装到template1数据库中。
请注意,pg_stat_statements视图仅在postgresql.conf加载其共享库时有效,可以使用此node属性:
如果将shared_preload_libraries与contrib结合使用,请确保在server之前调用contrib(以确保按顺序安装和设置)。
启用由DevrimGündüz维护的PostgreSQL全球开发组织yum存储库,以便更新PostgreSQL软件包。如果节点['postgresql'] ['enable_pgdg_apt']属性为true,则自动包含,并将节点['postgresql'] ['client'] ['packages']和node ['postgresql'] ['server] ['packages']设置为从该存储库使用的包列表,并设置节点 ['postgresql'] ['version']属性到要使用的版本(例如,“9.2”)。
启用由DevrimGündüz维护的PostgreSQL全球开发组织yum存储库,以便更新PostgreSQL软件包。如果节点['postgresql'] ['enable_pgdg_yum']属性为true,则自动包含。还可以使用override_attributes来设置一些需要嵌入版本号的值。例如:
您可以设置节点['postgresql'] ['pgdg'] ['repo_rpm_url']属性来获取最近的PGDG repo包。
用法
在需要连接到PostgreSQL数据库的系统上,添加到运行列表属性[postgresql] orrecipe [postgresql :: client]。
在应该是PostgreSQL服务器的系统上,在运行列表中使用recipe [postgresql :: server],此属性确实为postgres用户设置了密码。如果你正在使用chef服务器,如果找不到属性节点['postgresql'] ['password'] ['postgres'],则会生成一个随机密码并执行一个node.save。如果你使用chef-solo,你需要设置属性节点['postgresql'] ['password'] ['postgres']在节点json_attribs上的文件或角色。
在Debian系统中,SSL将被启用,因为Debian / Ubuntu上的软件包也会生成SSL证书。在服务器系统上,配置文件更改后,postgres服务器将重新启动。只能通过设置以下属性将其更改为重新加载:
使用Chef-client时,以下节点属性存储在Chef Server上。因为不能连接到服务器或保存节点对象,要使密码在主菜单独立运行中保持不变,必须在使用的json_attribs文件中指定它们。 例如:
这实际上应该是“加密密码”而不是明文,所以应该使用PostgreSQL算法将其生成为md5哈希。
• ·如果具备Postgres访问权限并且想要使用相同的密码,则可以从现有postgres数据库复制md5-hashed密码:
·可以从任何postgres数据库会话运行此操作以使用新密码:
·可以从Linux命令行运行它:
与 100 + 技术大牛面对面
SACC2017
作为国内最受欢迎的架构师盛会,2017 第九届中国系统架构师大会 (SACC) 将于将于 2017 年 10 月 19-21 日在北京新云南皇冠假日酒店震撼来袭。
大会以 “云智未来” 为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置 2 大主会场,18 个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100 余位技术专家及行业领袖来分享他们的经验;并将吸引 4000 + 人次的系统运维、架构师及 IT 决策人士参会,为他们提供最具价值的交流平台。
点击 “阅读原文” 与 100 + 技术大牛面对面,立享购票 7.8 折优惠~
以上是关于Github经典案例第三期:PostgreSQL 实操!安装配置客户端或服务器详解!的主要内容,如果未能解决你的问题,请参考以下文章
Android Study Jam 在线答疑第三期:Jetpack Compose 案例实战