如何在 Amazon EC2 实例上安装 Puppet 集群?

How can i install puppet cluster on Amazon EC2 instances?

我在 EC2 中使用 ubuntu 12.04 AMI 来创建 puppet 集群,但我在配置它时遇到了问题。 问题是主人无法识别奴隶。 我需要 mysql

以外的更多包裹吗
/etc/mysql/my.cnf

我需要对上述文件进行哪些更改?

Puppet 是一种配置管理gement 工具,它允许自动化定义和维护多个开发人员工作站的一致状态的过程。它是一个描述性的、集中式的、基于客户端-服务器的系统。中央服务器已配置,客户端与其同步,以确保所有系统都以所描述的状态结束。例如,使用 Puppet 可以轻松完成确保项目中所有开发人员系统具有相同开发环境的任务。 这是一个快速程序,用于在具有 Ubuntu OS 的 Amazon EC2 实例上设置 Puppet 服务器和一个 Puppet 客户端,并在服务器上安装 Puppet Dashboard 以查看客户端的状态。

先决条件

  • 两个 ec2 实例设置 Ubuntu ami.
  • 一个名为 puppetserver 的实例,另一个名为 puppetclient。

程序

Puppet 服务器和客户端设置

  • 配置主机文件查看 puppetserver 和 puppetclient 上的 /etc/hostname 文件。这些分别是 Puppet 服务器和客户端主机名 在两个系统上编辑 /etc/hosts 文件。添加服务器和客户端 IP 以及相应的主机名。

  • 正在设置 Puppet 服务器 启用 Puppet Labs 包存储库

  • 在 Puppet 服务器
  • 上下载 OS(这里是 Ubuntu 12.04)的 "puppetlabs-release" 包
  • 通过 运行ning 安装包 dpkg -i
  • 运行 apt-get update 以获取新的可用包列表。

例如,要为 Ubuntu 12.04、Precise Pangolin 启用存储库:

wget https://apt.puppetlabs.com/puppetlabs-release-precise.deb 
sudo dpkg -i puppetlabs-release-precise.deb 
sudo apt-get updateInstall Puppet

安装木偶

安装人偶大师

sudo apt-get update sudo apt-get install puppetmaster

设置 Puppet 客户端

在 Puppet 客户端上安装 Puppet

sudo apt-get update sudo apt-get install puppet

在客户端指定Puppet 服务器域名。为此,请修改
/etc/puppet/puppet.conf 文件并添加行 服务器=。 客户端现在可以连接到 Puppet master。

启动 Puppet 代理服务以建立服务器和客户端之间的首次通信。

sudo puppet agent --verbose --no-daemonize --onetime

这将启动与 Puppet 主进程的连接,该进程正在侦听 Puppet 服务器上的端口 8140。输出将是冗长的,并且代理将不会作为守护进程在后台继续 运行ning。还有,它只会运行一次,即关闭连接后,代理进程就会退出。输出如下:

客户端已通过发送 SSL 证书请求让服务器知道自己。服务器需要对客户端进行认证。 查看服务器上尚未签署的证书列表

sudo puppet cert --list

这列出了以下内容

签署客户端节点的 SSL 证书

sudo puppet cert --sign <puppet client name>

客户端现在可以与服务器建立完全连接并轮询 Puppet master 以获取任何配置更新。

定义配置

我们已经在 Puppet 服务器和客户端上设置了 puppet,并在两台机器之间建立了通信。下一步是使用 puppet 清单定义目标系统的配置。这些清单在 site.pp 文件中指定。

例如,我们定义了一个清单,它将在客户端创建一个 helloworld.txt 文件。

定义清单

将以下清单定义放入 /etc/puppet/manifests/site.pp 文件,

node "<puppet client hostname>" { file { "/home/ubuntu/helloworld.txt": content => "This is test content", ensure => file, owner => "ubuntu", group => "ubuntu", mode => 0644 } }

这个清单定义了 puppet 客户端必须有一个 helloworld.txt 文件 在 /home/ubuntu/ 文件夹中有内容,这是测试内容。

在客户端获取更改

在 Puppet 客户端上,运行 以下命令。

sudo puppet agent -t

puppet 客户端拉取 puppet 服务器上 site.pp 文件中定义的清单。它获悉名为 helloworld.txt 且具有定义规范的文件预计存在于位置 /home/ubuntu。由于客户端上不存在此类文件,因此代理会采取行动并创建文件。

查看 'helloworld.txt' 文件

要验证客户端是否处于 Puppet 服务器定义的状态,运行 以下命令

sudo vi /home/ubuntu/helloworld.txt

文件内容与服务器上清单定义中定义的相同。

正在安装 Puppet 仪表板

概览 Puppet Dashboard 是一个与 Puppet 交互的 GUI。它可用于查看和报告所有客户端节点的状态。 Puppet 仪表板 运行s 在 Puppet 服务器上的端口 3000 上。

设置步骤如下

  1. 正在安装外部依赖项

Dashboard 是 Ruby on Rails 网络应用程序,因此需要安装某些软件 Ruby宝石 Rake 版本 0.8.3 或更新版本 MySQL 数据库服务器版本 5.x Ruby-MySQL 绑定版本 2.7.x 或 2.8.x

安装包

sudo apt-get install -y build-essential irb libmysql-ruby libmysqlclient-dev libopenssl-ruby libreadline-ruby mysql-server rake rdoc ri ruby ruby-dev

安装Ruby宝石包系统

( URL="http://production.cf.rubygems.org/rubygems/rubygems-1.3.7.tgz" PACKAGE=$(echo $URL | sed "s/\.[^\.]*$//; s/^.*\///") cd $(mktemp -d /tmp/install_rubygems.XXXXXXXXXX) && \ wget -c -t10 -T20 -q $URL && \ tar xfz $PACKAGE.tgz && \ cd $PACKAGE && \ sudo ruby setup.rb )

创建 gem 作为 gem1.8 的替代名称

sudo update-alternatives --install /usr/bin/gem gem /usr/bin/gem1.8 1

正在安装 Puppet 仪表板

从 puppetlabs 包存储库安装 puppet-dashboard

sudo apt-get update sudo apt-get install puppet-dashboard

正在配置仪表板

修改database.yml文件。它可以在 /usr/share/puppet-dashboard/config/database.yml.

找到

在生产环境的键值对下,数据库值'dashboard_production'指定仪表板数据库名称,用户名值'dashboard'指定此数据库的用户。在下一步中,我们将创建数据库和用户。密码值是 MySQL.

的密码

创建和配置 MySQL 数据库

为 puppet-dashboard 创建用户和数据库。导航到 MySQL 命令行

CREATE DATABASE dashboard_production CHARACTER SET utf8; CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'my_password'; GRANT ALL PRIVILEGES ON dashboard_production.* TO 'dashboard'@'localhost';

配置 MySQL 的最大数据包大小以允许数据库中的更大行

set global max_allowed_packet = 33554432;

同时修改mysql配置文件/etc/mysql/my.cnf

允许 32MB 允许偶尔有 17MB 的行,有足够的空闲空间

max_allowed_packet = 32M

要创建仪表板表,运行 在 puppet-dashboard 文件夹中执行以下命令

cd /usr/share/puppet-dashboard rake RAILS_ENV=production db:migrate

正在测试仪表板是否正常工作

使用 Ruby 的内置 WEBrick 服务器启动仪表板

cd /usr/share/puppet-dashboard
sudo ./script/server -e production

仪表板实例使用“生产”环境在端口 3000 上启动。仪表板的 UI 可以在 :3000

查看

配置人偶

puppet 服务器和客户端都需要配置为仪表板接收报告。 将代理节点配置为通过打开报告向主节点提交报告。

puppet.conf(在每个代理上)

[agent]
report = true

配置服务器。将 http 报告处理程序添加到 puppet 服务器的报告设置并将 reporturl 设置为 Dashboard 实例的 reports/upload URL

puppet.conf(关于人偶大师)

[master]
reports = store, http
reporturl = http://<server hostname>:3000/reports/upload

为了启用仪表板的外部节点分类器 (ENC),

puppet.conf(关于人偶大师)

[master]
node_terminus = exec
external_nodes = /usr/bin/env PUPPET_DASHBOARD_URL=http://<server hostname>:3000 /usr/share/puppet-dashboard/bin/external_node

正在测试 Puppet 与仪表板的连接

重启木偶大师 运行 测试配置的傀儡代理之一

sudo puppet agent -t

输出将是:

这意味着报告已经到达。为了处理它,我们将激活 delayed_job 个工作人员。

开始 delayed_job 名工人

运行下面的命令

cd /usr/share/puppet-dashboard
sudo env RAILS_ENV=production script/delayed_job -p dashboard -n 1 -m start

这将启动 delayed_job 个工作程序,并完成挂起的任务。

这样,puppet现在安装在两个EC2实例上,其中一个是server,一个是client。此外,还安装了 puppet-dashboard 以查看客户端节点的状态。