如何配置Puppet识别现有PostgreSQL路径 避免重复安装实例
问题根因
删除postgresql::server::db资源仅移除了业务数据库的创建逻辑,没有关闭puppetlabs官方postgresql模块默认自带的实例初始化、安装管控流程。该模块默认会根据识别到的数据库版本拼接实例标识(你环境中识别到10.21版本,就生成了postgresql-10.21的实例名),自动创建对应版本专属的数据目录、sysconfig配置软链,和你现有直接部署在/var/lib/pgsql路径下的非模块托管实例路径冲突,才会反复报软链不存在、尝试新建实例的问题。
解决步骤
- 先关掉模块默认的安装、初始化管控开关,在你声明
postgresql::server类的位置显式配置以下参数,从根源上禁止模块执行安装、初始化新实例的操作:class { 'postgresql::server': manage_package_repo => false, # 不接管PG软件源配置 manage_package => false, # 不执行任何PG软件包安装/升级操作 initialize_pgdata => false, # 核心参数:禁止执行initdb初始化新数据目录 manage_datadir => false, # 不自动创建、修改数据目录权限与内容 # 服务如果需要Puppet托管启停、开机自启就保留true,不需要就设为false manage_service => true, } - 强制覆盖模块默认的路径拼接规则,所有路径参数全部写你现有环境的实际路径,不要让模块按版本号自动生成路径:
class { 'postgresql::server': # 先把上面列的管控开关参数放在这,再补充路径配置 pgdata => '/var/lib/pgsql/data', # 替换成你实际的数据目录绝对路径,不要带版本后缀 confdir => '/var/lib/pgsql/data', # 配置文件所在目录,RHEL/CentOS平台原生安装的PG10默认就是这个路径 service_name => 'postgresql-10', # 填你现有PG的实际systemd服务名,不要带.21这类小版本号 pg_hba_conf_path => '/var/lib/pgsql/data/pg_hba.conf', postgresql_conf_path=> '/var/lib/pgsql/data/postgresql.conf', } - 排查配置残留:
- 检查所有Hiera配置文件、节点声明里有没有硬编码
postgresql::server::version: '10.21'的配置,有的话改成大版本号10,或者直接删除这个参数,让模块从系统已安装的postgres命令读取版本,避免模块拼接出错误的带小版本的实例名。 - 如果节点上
/etc/sysconfig/pgsql/目录下有残留的postgresql-10.21空文件、坏软链,直接删除即可,避免Puppet反复检测这个无效路径。
- 检查所有Hiera配置文件、节点声明里有没有硬编码
验证方法
调整完配置先跑无操作预检测:
sudo puppet agent -t --noop
确认输出中不再出现创建/var/lib/pgsql/postgresql-10.21目录、操作/etc/sysconfig/pgsql/postgresql-10.21软链的资源记录,再正式执行agent同步即可。
注意:全局检查下所有Puppet代码,要是还有地方显式声明了
postgresql::server::instance资源创建新实例,也要一并移除,否则还是会触发新实例部署逻辑。
内容的提问来源于stack exchange,提问作者M-E
相关产品推荐
相关产品推荐

