月曜日, 2月 15, 2010

XenServer 入門 (第3回、XenServerにおけるストレージ管理)

[概要]
XenServerにおけるストレージ管理について説明します。

[詳細]
XenServerの仮想マシンは、サーバの内蔵ストレージやネットワークストレージに格納します。今回はそのストレージの管理方法について説明します。
それでは、早速説明に入ります。XenServerで扱うストレージの種類とそれぞれの設定方法は次のとおりです。
使用する環境にあわせて、ストレージを選択してください。Live Maigrationを行う環境が必要な場合には、共有ストレージが必要になります。
  • Virtual disk storage
    • NFS VHD
      NFSでマウントした先をストレージとして使用します。
      • コンソール画面で、"New Storage"をクリックして、ウィザードを起動します。


      • "Type"では"NFS VHD"にチェックを行い"Next"で次に進みます。


      • "Location"では、次の項目を入力します。
        Name:
         ストレージ名を指定します。必須。
        Share Name:
         NFSのマウント・ポイントを"サーバ名 or IPアドレス:マウントポイント"の形式で入力します。必須。
        Advanced Options:
         NFSのマウントのオプションを指定します。任意。
        Create a new SR:
         新しくStorage Repository (SR)を作成します。
        Reattach an existing SR:
         既存のSRがある場合、選択したSRを使用します。


    • iSCSI
      iSCSIで提供されるストレージを使用します。
      • "Type"で"iSCSI"にチェックを行い"Next"で次に進みます。


      • "Location"では、次の項目を入力します。
        Name:
         ストレージ名を指定します。必須。
        Target Host:
         iSCSIのターゲットホストとポート番号を指定します。iSCSIのデフォルトのポート番号は3260です。
        Use CHAP:
         iSCSIのアクセス認証にCHAPを使用します。
        CHAP User:
         CHAP認証のユーザ名を指定します。
        CHAP Secret:
         CHAP認証で使用するのパスワードを入力します。
        Target IQN:
         "Discover IQNs"を押し、リストから使用するIQNを選択します。
        Target LUN:
         "Discover LUNs"を押し、リストから使用するLUNを選択します。


    • Hardware HBA
      SCSI, SANストレージを使用します。
      • "Type"で"Hardware HBA"にチェックを行い"Next"で次に進みます。


      • "Location"では、次の項目を入力します。
        Name:
         ストレージ名を指定します。必須。
        Choose a LUN to re-attach or create a new SR on:
         選択したLUNに、新規の場合はSRを作成、既存の場合には接続を行います。


  • Advanced StorageLink technology
    ストレージ各社から提供される昨日と連携することのできる有償オプションで、現在はNetAppとDell EqualLogicがあります。
  • ISO library
    インストール媒体のISOイメージを格納しているネットワーク・ストレージを作成します。こちらはRead onlyのアクセスになります。
    • Windows File Sharing (CIFS)
      Windowsのファイル共有を使って、ISOイメージ・ライブラリにアクセスします。
      • "Type"で"Windows File Sharing (CIFS)"にチェックを行い"Next"で次に進みます。


      • "Location"では、次の項目を入力します。
        Name:
         ストレージ名を指定します。必須。
        Share Name:
         Windowsの共有名を入力します。
        Use different uesr name:
         ライブラリの接続でユーザ名を指定する場合にチェックします。任意。
        User Name:
         接続するサーバのユーザ名を入力します。
        Password:
         上記のユーザのパスワードを入力します。
        Advanced Options:
         sambaのオプションを指定します。任意。

    • NFS ISO
      NFSを使用して、ISOイメージ・ライブラリにマウントします。
      • "Type"で"Windows File Sharing (CIFS)"にチェックを行い"Next"で次に進みます。


      • "Location"では、次の項目を入力します。
        Name:
         ストレージ名を指定します。必須。
        Share Name:
         NFSのマウント・ポイントを"サーバ名 or IPアドレス:マウントポイント"の形式で入力します。必須。
        Advanced Options:
         NFSのマウントのオプションを指定します。任意。



このほかに共有できないローカルなストレージとして次の3つあります。
  • DVD drives
    サーバに接続されているDVDドライブがリストされます。


  • Local storage
    XenServerがインストールされたドライブ含む固定ドライブとその中にある仮想ディスク表示されます。また、仮想ストレージの作成も可能です。



  • Removable storage
    XenServerに接続されたUSBなどのリムーバブルドライブが表示されます。



これらのストレージをそれぞれのサイトに合わせて、使い分けてください。
次回は仮想マシンの作成について説明します。

木曜日, 2月 04, 2010

ssh-agentを使用したパスワードなしの接続

[概要]
ssh-agentを使用したパスワードなしの接続方法について説明します。

[詳細]
sshでの接続では、都度、パスワードもしくは、パスフェーズを入力をする必要があり、意外と面倒な作業です。また、シェルスクリプトなどでの自動化の妨げになります。
パスワードなしでの接続は、ホストベースの認証や、空のパスフェーズを使った公開鍵認証がありますが、セキュリティの低下が否めません。
ssh-agentを利用することで、前出の方法に比べセキュリティ・レベルをおとさずに、一度の認証で以降パスワードなしで接続することができます。
それでは、認証の手順を説明します。
  1. ssh-agentの起動
    ssh-agentを起動します。なお、RHEL, CentOSやUbuntuなどのディストリビューションでは、コンソールでX windowsを使用すると自動的にssh-agentが起動するようになり、設定もされているので起動の必要ありません。
    コンソールを使用していないリモートユーザやスクリプトで使用するとき、手動で起動してください。
    ssh-agentを実行すると下記のような出力があり、ssh-agentがデーモンとして実行されます。

    [root@localhost.localdomain ~]# ssh-agent
    SSH_AUTH_SOCK=/tmp/ssh-orwkxI2007/agent.2007; export SSH_AUTH_SOCK;
    SSH_AGENT_PID=2008; export SSH_AGENT_PID;
    echo Agent pid 2008;

    "SSH_AUTH_SOCK=..."の行と"SSH_AGENT_PID="をコピー & ペーストします。

    [root@localhost.localdomain ~]# SSH_AUTH_SOCK=/tmp/ssh-orwkxI2007/agent.2007; export SSH_AUTH_SOCK;
    [root@localhost.localdomain ~]# SSH_AGENT_PID=2008; export SSH_AGENT_PID;

    ここで、SSH_AUTH_SOCKは、ssh-agentと他のSSHのクライアントが通信に使用するソケットのファイル、SSH_AGENT_PIDは、ssh-agentの停止するときに使用される環境変数です。

    次のようにevalを使用すると、ssh-agentと同時に環境変数も設定されます。

    [root@localhost.localdomain ~]# eval `/usr/bin/ssh-agent`
    Agent pid 2008

  2. 秘密鍵の追加
    ssh-addを使用して、ssh-agentに秘密鍵を登録することで、エージェントがパスフレーズを維持します。

    [root@localhost.localdomain ~]# ssh-add ~/.ssh/id_rsa
    Enter passphrase for /root/.ssh/id_rsa:
    Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)

  3. 接続確認
    sshをつかって、パスフレーズなしの接続ができるかどうかを確認します。
    [root@localhost.localdomain ~]# ssh remote.localdomain
    Last login: Mon Feb 1 15:22:55 2010 from local.localdomain
    [root@remote.localdomain ~]#
以上でssh-agentを使用したパスワードなしの接続方法について説明は終了です。下は知っていると便利なTIPSです。

おまけ:「ssh-gentの終了方法」
ssh-agentの終了は、"ssh-agent -k"です。このとき、環境変数"SSH_AGENT_PID"で設定されたPIDのargentが終了します。この際、SSH_AGENT_PIDは必須です。
おまけ:「すでに起動しているssh-agentへの接続方法」
リモートから接続したときなど、新たにssh-agentを起動せずに既存のagentを使用することもできます。 すでに起動しているssh-agentに接続するためには、agentのプロセスと、それと通信するためのソケットを特定し、環境変数にセットします。 ソケットと対応するssh-agentを探します。
  1. プロセスの特定
    psコマンドを使って、ssh-agentのプロセスを特定します。
    [root@remote.localdomain ~]# ps -C ssh-agent -o pid,ppid,user,command
    PID PPID USER COMMAND
    4576 4536 root /usr/bin/ssh-agent /bin/sh -c exec -l /bin/bash -c "/usr/bin/dbus-lau"
    7473 1 root ssh-agent

    上の例では2つのssh-agentが動作しています。
    PID 4576は、X Windowのコンソールにログインした際のプロセスで、デーモン化していませんので親のPID(PPID)を見ることができます。
    PID 7473は、今回説明した方法で起動したプロセスです。こちらはデーモン化しているのでPPIDが1になっています。この場合、実際にPID 7473を起動したプロセスはPPID=PID-1つまり7472となります。
  2. ソケットの特定
    ソケット・ファイルは、"/tmp/ssh-XXXXXXXXXX/agent.ppid"として存在します。(Xは任意の英数字、ppidは親のプロセスID。)
    そこで、findコマンドでソケット・ファイルを探します。

    [root@remote.localdomain ~]# find /tmp/ssh-* -name agent.*
    /tmp/ssh-Otawzy4536/agent.4536
    /tmp/ssh-jqcBXV7472/agent.7472

  3. 環境変数の設定
    ソケットとプロセスの結びつけができたら、環境変数SSH_AUTH_SOCKとSSH_AGENT_PIDを設定すれば、既存のssh-agentに接続することができます。
    [root@remote.localdomain ~]# SSH_AUTH_SOCK=/tmp/ssh-Otawzy4536/agent.4536; export SSH_AUTH_SOCK;
    [root@remote.localdomain ~]# SSH_AGENT_PID=4576; export SSH_AGENT_PID;
    [root@localhost.localdomain ~]# ssh remote.localdomain
    Last login: Mon Feb 2 15:22:55 2010 from local.localdomain
    [root@remote.localdomain ~]#