sql >> データベース >  >> RDS >> PostgreSQL

Puppetを使用したBarmanの自動化:it2ndq / barman(パート2)

    この記事の最初の部分では、それぞれ pgと呼ばれる2台のUbuntu14.04TrustyTahr仮想マシンを実行するようにVagrantを構成しました。 およびbackup 。この第2部では、Puppetを使用して pgでPostgreSQLサーバーをセットアップおよび構成する方法を説明します。 backupからBarman経由でバックアップします ボックス。

    パペット:構成

    前の記事のようにマシンを定義した後、 libraries-puppetである必要なPuppetモジュールを指定する必要があります。 私たちのために管理します。

    2つのモジュールが必要です:

    1. puppetlabs / postgresql (http://github.com/puppetlabs/puppetlabs-postgresql/)PostgreSQLを pgにインストールする VM
    2. 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> セットアッププロセス全体を簡単にするクラス。


    1. 独自のアプリにAdminerをインストールする方法

    2. postgresql関数を使用して異なるテーブル名からデータをフェッチしたい

    3. SQL Serverでselectクエリを使用してテーブルを作成するにはどうすればよいですか?

    4. MariaDBJSON関数