この記事の最初の部分では、それぞれ pg
と呼ばれる2台のUbuntu14.04TrustyTahr仮想マシンを実行するようにVagrantを構成しました。 およびbackup
。この第2部では、Puppetを使用して pg
でPostgreSQLサーバーをセットアップおよび構成する方法を説明します。 backup
からBarman経由でバックアップします ボックス。
パペット:構成
前の記事のようにマシンを定義した後、 libraries-puppet
である必要なPuppetモジュールを指定する必要があります。 私たちのために管理します。
2つのモジュールが必要です:
-
puppetlabs / postgresql
(http://github.com/puppetlabs/puppetlabs-postgresql/)PostgreSQLをpg
にインストールする VM -
it2ndq / barman
(http://github.com/2ndquadrant-it/puppet-barman)backup
にBarmanをインストールします
両方のモジュールはPuppetForgeからインストールされます。 puppetlabs / postgresql
の場合 モジュールでは、最新バージョン(4.3.0)が postgres_password
を破っているため、現時点ではバージョン4.2.0を使用する必要があります。 後で使用するパラメータ(このプルリクエストを参照)。 Puppetfile
というファイルを作成しましょう プロジェクトディレクトリにこのコンテンツを含める:
forge "http://forgeapi.puppetlabs.com" mod "puppetlabs / postgresql"、 "<4.3.0" mod "it2ndq / barman" |
これで、次を実行してPuppetモジュールとその依存関係をインストールできます。
$ librarian-puppet install --verbose |
必須ではありませんが、オプション-verbose
を使用することをお勧めします 毎回librarian-puppet
使用されている。これがないと、コマンドは非常に静かになり、事前に何をしているかについての詳細を知っておくと便利です。たとえば、-verbose
を使用せずに 、依存関係の競合が解決されるのを待つ貴重な時間を無駄にしていることに気付くかもしれませんが、数分後にエラーが表示されるだけです。
コマンドが正常に完了すると、 modules
barman
を含むディレクトリ およびpostgresql
モジュールとその依存関係( apt
、 concat
、 stdlib
)は作業ディレクトリに作成されます。さらに、 librarian-puppet
Puppetfile.lock
を作成します インストールされたモジュールの依存関係とバージョンを識別するためのファイル。将来の更新を防ぐためにそれらを固定します。このようにして、後続のlibrarian-puppetのインストール
runは、可能なアップグレードではなく、常に同じバージョンのモジュールをインストールします(アップグレードが必要な場合は、 libraries-puppet update
トリックを行います)。
これで、サーバーのプロビジョニングにPuppetマニフェストを使用していることをVagrantに伝えることができます。 Vagrantfile
を変更します 次のように:
Vagrant.configure( "2")実行 | config | {:pg => {:ip => '192.168.56.221'、:box =>'ubuntu / trusty64'}、:backup => {:ip => '192.168.56.222'、:box =>'ubuntu / trusty64 '}} .each do | name、cfg | config.vm.define name do |ローカル| local.vm.box =cfg [:box] local.vm.hostname =name.to_s +'.local.lan' local.vm.network:private_network、ip:cfg [:ip] family ='ubuntu' bootstrap_url =' http://raw.github.com/hashicorp/puppet-bootstrap/master/'+ family +'.sh'#puppet-bootstrapを1回だけ実行する local.vm.provision:shell、:inline => <<-eos if [! -e /tmp/.bash.provision.done]; 次に curl -L#{bootstrap_url} | bash touch /tmp/.bash.provision.done fi eos #Puppetでプロビジョニング local.vm.provision:puppet do |人形| puppet.manifests_path ="manifests" puppet.module_path =["。"、 "modules"] puppet.manifest_file ="site.pp" puppet.options =['--verbose'、] end 終了 終了 終了 |
追加した行を使用して、manifests/site.pp
を使用してVMをプロビジョニングする手順をVagrantに提供しました。 メインマニフェストおよびmodules
に含まれるモジュールとして ディレクトリ。これは、 Vagrantfile
の最終バージョンです。 。
次に、マニフェスト
を作成する必要があります ディレクトリ:
$mkdirマニフェスト |
site.pp
の最初のバージョンを書き込みます 。非常に基本的な設定から始めます:
ノードバックアップ{クラス {'barman':manage_package_repo => true 、}} node pg {} |
これでマシンを起動して、 backup
で確認できます。 デフォルト構成のBarmanサーバーがあります( pg
にPostgreSQLはありません まだ)。 backup
にログインしましょう :
$vagrantsshバックアップ |
/etc/barman.conf
を見てください :
#Barmanのメイン構成ファイル(PostgreSQLのバックアップおよびリカバリマネージャー) #www.pgbarman.orgのBarmanプロジェクトの詳細 #重要:このファイルはPuppetによって管理されているため、編集しないでください! #グローバルオプション [バーマン] barman_home =/var/lib/barmanbarman_user =barmanlog_file =/var/log/barman/barman.logcompression =gzipbackup_options =Exclusive_backupminimum_redundancy =0retention_policy =reserved_policy_mode =autowal_retention_policy =mainconfiguration_files_directory =/etc/barman.conf.d |
次のステップは、 pg
でPostgreSQLインスタンスを実行することです。 。 PostgreSQLサーバーでBarmanが必要とするパラメーターに注意する必要があるため、次のように設定する必要があります。
-
wal_level
少なくともarchive
レベル -
archive_mode
on
-
archive_command
WALをbackup
にコピーできるようにします -
pg_hba.conf
のルールbackup
からのアクセス用
これらのパラメータはすべて、 puppetlabs / postgresql
を介して簡単に設定できます。 モジュール。さらに、Barmanサーバーでは、次のものが必要です。
- PostgreSQL接続文字列
-
.pgpass
認証用ファイル - SSHコマンド
- SSHキー交換を実行するには
it2ndq / barman
〜barman / .ssh
に秘密/公開キーペアを生成します 。ただし、サーバー間でキーを自動的に交換するには、このチュートリアルの目的を超えたPuppet Masterの存在が必要です(これは、PuppetMasterとbarmanのセットアップに焦点を当てる次のインストールの一部になります) ::autoconfigure
class)–したがって、この最後のステップは手動で実行されます。
site.pp
を編集します 次のようにファイルします:
ノードバックアップ{クラス {'barman':manage_package_repo => true 、} barman ::server {'test-server':conninfo =>'user =postgres host =192.168.56.221'、ssh_command =>'ssh [email protected]'、} file {'/ var / lib / barman / .pgpass':確認 =>'present'、owner =>'barman'、group =>'barman'、mode => 0600、content => '192.168.56.221:5432:*:postgres:insecure_password'、}} node pg {クラス {'postgresql ::server':listen_addresses =>'*'、postgres_password =>'insecure_password'、pg_hba_conf_defaults => false 、} postgresql ::server ::pg_hba_rule {'ローカルアクセス':type =>'local'、database =>'all'、user =>'all'、auth_method =>'peer'、} postgresql ::server ::pg_hba_rule {'Barman access':type =>'host'、database =>'all'、user =>'postgres'、address => '192.168.56.222/32'、auth_method =>'md5'、} postgresql ::server ::config_entry {'wal_level':value =>'archive'; 'archive_mode':value =>'on'; 'archive_command':value =>'rsync -a%p [email protected]:/var/lib/barman/test-server/incoming/%f'; }クラス {'postgresql ::server ::contrib':package_ensure =>'present'、}} |
マニフェストを変更したら、プロビジョニングを再実行する必要があります:
$vagrantプロビジョニング |
マシンが稼働している状態で、キー交換を進めることができます。 pg
にログインします :
$ vagrant ssh pg |
postgres
のキーペアを作成します ユーザー、 ssh-keygen
を使用 、プロンプトが表示されたらすべてのフィールドを空のままにします(したがって、常にEnterキーを押します):
[email protected]:〜$ sudo -iu [email protected]:〜$ [email protected]:〜$ cat .ssh / id_rsa.pub |
最後のコマンドは、〜barman / .ssh / authorized_keys
に追加する必要のある長い英数字の文字列を出力します。 backup
上のファイル 。
$ vagrant ssh [email protected]:〜$ sudo -iu [email protected]:〜$ echo "ssh-rsa ...">> .ssh / authorized_keys |
同様に、 barman
の公開鍵をコピーします ユーザーをauthorized_keys
に追加します postgres
のファイル pg
のユーザー :
[email protected]:〜$ cat .ssh / id_rsa.pubssh-rsa ... [email protected]:〜$ログアウト [email protected]:〜$ログアウト $ vagrant ssh [email protected]:〜$ sudo -iu [email protected]:〜$ echo "ssh-rsa ...">> .ssh / authorized_keys |
この時点で、2つのサーバー間で双方向の最初の接続を確立します。
[email protected]:$ ssh example @ sqldat.com192.168.56.222example @ sqldat.com:$ ssh [email protected] |
barman check
を実行できます バーマンが正しく機能していることを確認するには:
[email protected]:〜$ barman check allServer test-server:ssh:OK PostgreSQL:OK archive_mode:OK archive_command:OKディレクトリ:OK保持ポリシー設定:OKバックアップの最大経過時間:OK(last_backup_maximum_ageは提供されていません)圧縮設定:OK最小冗長性要件:OK(バックアップは0、少なくとも0が必要) |
すべての行に「OK」と表示されます。ここで、バックアップを実行するには、次のコマンドを実行するだけです。
[email protected]:$ barman backup test-server |
現実的な構成
これまでに使用されたBarman構成は非常に単純ですが、 site.pp
にいくつかのパラメーターを簡単に追加できます。 また、保持ポリシーやBarman 1.4.0で利用可能な新しい増分バックアップなど、Barmanのすべての機能を利用できます。
このチュートリアルは、次の要件を備えた現実的なユースケースで締めくくります。
- 毎晩午前1時のバックアップ
- 先週の任意の瞬間にポイントインタイムリカバリを実行する可能性
- 常に少なくとも1つのバックアップを利用できるようにする
-
barman check
を介してエラーを報告する 最新のバックアップが1週間より古い場合 - 増分バックアップを有効にしてディスクスペースを節約する
Puppetのファイル
を使用します .pgpass
を作成するためのリソース 接続パラメータとcron
を含むファイル 毎晩実行するジョブを生成するためのリソース。最後に、 barman ::server
を編集します 必要なバーマンパラメータを追加します。
最終結果は次のとおりです。
ノードバックアップ{クラス {'barman':manage_package_repo => true 、} barman ::server {'test-server':conninfo =>'user =postgres host =192.168.56.221'、ssh_command =>'ssh [email protected]'、retention_policy =>'1週間のリカバリウィンドウ'、 minimum_redundancy => 1、last_backup_maximum_age => '1 WEEK'、reuse_backup =>'link'、} file {'/var/lib/barman/.pgpass': ensure =>'present'、owner =>'barman'、group =>'barman'、mode => 0600、content => '192.168.56.221:5432:*:postgres:insecure_password'、} cron {'barman backup test- server':command =>' / usr / bin / barman backup test-server'、user =>' barman'、hour => 1、minute => 0、}} node pg { class {'postgresql ::server':listen_addresses =>'*'、postgres_password =>'insecure_password'、pg_hba_conf_defaults => false 、} postgresql ::server ::pg_hba_rule {'ローカルアクセス':type =>'local'、database =>'all'、user =>'all'、auth_method =>'peer'、} postgresql ::server ::pg_hba_rule {'Barman access':type =>'host'、database =>'all'、user =>'postgres'、address => '192.168.56.222/32'、auth_method =>'md5'、} postgresql ::server ::config_entry {'wal_level':value =>'archive'; 'archive_mode':value =>'on'; 'archive_command':value =>'rsync -a%p [email protected]:/var/lib/barman/test-server/incoming/%f'; }} |
結論
51行のPuppetマニフェストを使用して、実稼働サーバーで必要となる可能性のある設定と同様の設定でPostgreSQL/Barmanサーバーのペアを構成することができました。バックアップを処理するBarmanサーバーを持つことの利点と、Puppetによって管理され、再利用可能でバージョン管理可能なインフラストラクチャを持つことの利点を組み合わせました。
このシリーズの記事の次の最後の投稿では、Puppet Masterを使用して異なるマシン間でリソースをエクスポートし、VMが barman ::autoconfigure<を介して正しく機能するために必要なパラメーターを交換できるようにする方法を見ていきます。 / code> セットアッププロセス全体を簡単にするクラス。