尝试使用 Puppet 安装 RabbitMQ

尝试使用 Puppet 安装 RabbitMQ

这是我收到的错误:

ubuntu@sync1:/etc/puppet$ sudo /usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install rabbitmq-server
Reading package lists...
Building dependency tree...
Reading state information...
rabbitmq-server is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up rabbitmq-server (3.2.2-1) ...
 * Starting message broker rabbitmq-server                                                                        * FAILED - check /var/log/rabbitmq/startup_\{log, _err\}
                                                                                                          [fail]
invoke-rc.d: initscript rabbitmq-server, action "start" failed.
dpkg: error processing rabbitmq-server (--configure):
 subprocess installed post-installation script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)
ubuntu@sync1:/etc/puppet$ 

在我运行 sudo puppet apply manifests/site.pp 之后发生了这种情况。

这是我的兔子班:

# See https://github.com/puppetlabs/puppetlabs-rabbitmq
class my_rabbitmq ($environment, $type, $user, $password) {

#  case $environment {
#    staging: {
#      #@todo
#    }
#    production: {
#      #@todo
#    }
#  }
#
#  case $type {
#    sync: {
#      #@todo
#    }
#    async: {
#      #@todo
#    }
#  }

class { '::rabbitmq':
  delete_guest_user => true,
  version           => '3.2.2',
}->
rabbitmq_user { 'richard':
  admin    => true,
  password => 'richard_password',
  provider => 'rabbitmqctl',
}->
rabbitmq_user_permissions { 'richard@/':
  configure_permission => '.*',
  read_permission      => '.*',
  write_permission     => '.*',
  provider             => 'rabbitmqctl',
}

}

我正在 Ubuntu 12.04 LTS VM 上尝试此操作。有什么想法吗?这让​​我抓狂了,我花了好几个小时才弄清楚。

答案1

我也遇到了这个问题。原因是在 Ubuntu 上安装“rabbitmq-server”包时,rabbitmq 实例启动。这是设计使然。可惜。

至于解决方案,我还没有找到。

编辑

我不知道您是否遇到这种情况,但就我而言,我将 Puppet 中的节点名称从“兔子”更改为其他名称。

简单解释一下,正如我提到的,安装 rabbitmq-server 会导致 rabbitmq-server 服务运行。默认情况下,它使用节点名称“rabbit”。

就我而言,puppet 出现了,配置了 rabbitmq,然后在尝试启动服务之前,运行“/etc/init.d/rabbitmq-service status”来检查它是否已经在运行。

在理想情况下,答案是“是”,因为它实际上正在运行,但在这种情况下,'/etc/init.d/rabbitmq-service'脚本使用配置的节点名称来检查实例是否正在运行 - 并且当puppet在/etc/rabbitmq/rabbitmq-env.conf中更改节点名称时,这完全破坏了服务脚本确定它是否正在运行的能力,因此当然,脚本返回0,因为它找不到正在运行的实例。

然后,Puppet 尝试使用新的节点名启动新实例,但是会失败,因为一次只能有一个服务拥有一个端口,而正在运行的实例拥有该端口。

为了解决这个问题,我将 RABBITMQ_NODENAME 重新设置为“rabbit”,一切正常。

我在这里写到了它:

http://www.standalone-sysadmin.com/blog/2014/02/rabbitmq-on-ubuntu-via-puppet/

答案2

http://blog.zugschlus.de/archives/974-Debians-Policy-rc.d-infrastructure-explained.html

Debian 经常因为这个默认设置而受到批评,而规范的答案是使用 sysv-rc 附带的策略框架来避免启动服务。由于这种机制经常被误解,我写这篇文章是为了给这个问题带来更多的困惑。

(博文不是我的)

相关内容