サーバー構築 · 4 min read · Sep 10, 2025
Ubuntu 8.04 Hardy HeronでXenを実行する2台のサーバーによる完璧な負荷分散と高可用性のWebクラスター
Ubuntu 8.04 Hardy HeronでXenを実行する2台のサーバーによる完璧な負荷分散と高可用性のWebクラスター
はじめに
これは私のサイトからのコピーです: blogama.org
このハウツーでは、Xen、heartbeat、およびldirectordを使用して2台の実際のサーバー上に負荷分散および高可用性のWebクラスターを構築します。このクラスターは、http、メール、DNS、MySQLデータベースを処理し、完全に監視されます。これは現在、いくつかのウェブサイトを持つ本番サーバーで使用されています。
このチュートリアルの目的は、できるだけ少ない実際のサーバーで負荷分散と高可用性を達成すること、そしてもちろんオープンソースソフトウェアを使用することです。サーバーが多いほど、ハードウェアとホスティングコストが増加します。
ここにインストールされるサービスとアプリケーションの簡単なリストがあります:
- Apache
- MySQL + phpmyadmin
- Postfix (SMTP) とウェブベースのユーザー設定およびSpamassassin
- Courier (IMAP & POP) とsquirrelmail
- Bind (DNSサーバー)
- Muninとmonitによるウェブベースの監視
- 監視用の自作スクリプト
必要なもの
デュアルLANを持つ2台のサーバー、少なくとも7つのIP。IPは次のように使用されます:
- dom01.example.com : 192.168.1.100
- dom02.example.com : 192.168.1.101
- lb1.example.com : 192.168.1.102
- lb2.example.com : 192.168.1.103
- web1.example.com : 192.168.1.104
- web2.example.com : 192.168.1.105
- example.com : 192.168.1.106
- yousite.com (オプション) : 192.168.1.107
Dom0は負荷分散装置とWebサーバーから分離されます。私は試していませんが、負荷分散装置をDom0に配置することは可能だと思います。
本番サーバーには少なくとも2GBのRAMとRAID 1または10のハードドライブを推奨します。
制限事項
これは私にとって機能しました。あなたにとっても機能するとは限りませんが、ハウツーは本番およびテストサーバーで100%テスト済みです!
このセットアップは2台のサーバーでスケーラブルですが、そうする場合はMySQLレプリケーションの別の方法を見つける必要があります。
ISPConfig、CPanelなどのコントロールパネルはありません…
一部のウェブサイトはMySQLのマスターマスターレプリケーションを壊す可能性があります。Drupalでそれが起こりましたが、キャッシュを無効にするか、最小キャッシュ寿命を設定することで修正しました。これを進める前にお読みください:
A: MySQLレプリケーションは、マスターとスレーブ間のロックプロトコルをサポートしておらず、分散(クロスサーバー)更新の原子性を保証することができません。言い換えれば、クライアントAが共通マスター1に更新を行い、その間に共通マスター2に伝播する前に、クライアントBが共通マスター2に更新を行うと、クライアントAの更新が共通マスター1で行われたのとは異なる動作をする可能性があります。したがって、クライアントAの更新が共通マスター2に到達すると、共通マスター1にあるものとは異なるテーブルが生成されます。これは、2台のサーバーを双方向レプリケーション関係で連鎖させるべきではないことを意味します。更新が任意の順序で安全に行われることが確実でない限り、またはクライアントコード内で何らかの方法で順序が乱れた更新に対処しない限り。
1. Ubuntuのインストール
Ubuntu 8.04 LTSサーバーエディションの基本インストールを行います。
ソフトウェアRAID 1でインストールしたい場合は、私が書いたこのハウツーをお読みください:
Ubuntu 8.04をソフトウェアRAID 1でインストール
2. Xenのインストール
Xenはイメージファイルまたは専用パーティションから実行できます。どちらにも利点と欠点があります。
イメージファイルからのディスクI/Oは遅くなりますが、バックアップや管理が容易です。パーティションで作業する場合はその逆です。
私が提案するのは、イメージファイルから始めて、セットアップが完了したらパーティションで終えることです。この方法で、イメージファイルのバックアップを取り、テスト時に必要に応じてロールバックできます。
イメージファイルにインストールするには、ハウツーマスターFalkoのこの素晴らしいチュートリアルを参照してください:
Ubuntu 8.04 (Hardy Heron) サーバーにXenをインストールする
パーティションに直接インストールするには(Falkoのハウツーの私の修正バージョン):
Ubuntu Hardy Heron (8.04) サーバーシステムAMD64またはi386用の高性能XEN
各サーバーに2つのXenドメインを作成する必要があります(dom01とdom02はDom0またはVMコントローラーです):
サーバー #1 - dom01.example.com
lb1.example.com (256MB RAM - 5GB HDで十分) ip : 192.168.1.102
web1.example.com
(RAMが多いほど良い、Dom0には512MBを確保)
ip : 192.168.1.104
サーバー #2 - dom02.example.com
lb2.example.com (256MB RAM - 5GB HDで十分) ip : 192.168.1.103
web2.example.com (RAMが多いほど良い、Dom0には512MBを確保) ip : 192.168.1.105
3. ローカルデータ転送用のXenブリッジの作成(オプション)
デフォルトでは、Xenを使用した仮想マシンでは1つのネットワークカードのみが有効になっています。rsync、MySQLレプリケーション、バックアップなどのローカル転送には、2台のサーバー間にギガビットクロスオーバーケーブルを使用します。これは必須ではありませんが、帯域幅コストを節約し、レプリケーションが速くなります。
Xenブリッジを作成するためのこのハウツーを参照してください:
Ubuntu 8.04で新しいXenブリッジを作成する
このハウツーでは、2番目のネットワークカード(クロスオーバー)で使用されるIPは次のとおりです:
- dom01.example.com : 192.168.0.100
- dom02.example.com : 192.168.0.101
- lb1.example.com : 192.168.0.102
- lb2.example.com : 192.168.0.103
- web1.example.com : 192.168.0.104
- web2.example.com : 192.168.0.105
4. ノードの準備(dom01、dom02、lb1、lb2、web1、web2)
4.1 opensshサーバーとVIMのインストール
実行:
sudo su apt-get install vim ssh openssh-server
4.2 リポジトリの更新
mv /etc/apt/sources.list /etc/apt/sources.list.bak vi /etc/apt/sources.list
sources.listを次のようにします:
#
# deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
#deb cdrom:[Ubuntu-Server 8.04 _Hardy Heron_ - Release i386 (20080423.2)]/ hardy main restricted
# http://help.ubuntu.com/community/UpgradeNotes を参照して、
# 新しいバージョンのディストリビューションにアップグレードする方法を確認してください。
deb http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy main restricted
## 最終リリース後に生成された主要なバグ修正アップデート。
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates main restricted
## N.B. このリポジトリのソフトウェアは、Ubuntu
## チームによって完全にサポートされておらず、自由なライセンスの下にない可能性があります。ソフトウェアの使用権を確認してください。また、universeのソフトウェアは、Ubuntuのセキュリティ
## チームからのレビューや更新を受けません。
deb http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy universe
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates universe
## N.B. このリポジトリのソフトウェアは、Ubuntu
## チームによって完全にサポートされておらず、自由なライセンスの下にない可能性があります。ソフトウェアの使用権を確認してください。また、multiverseのソフトウェアは、Ubuntuのセキュリティ
## チームからのレビューや更新を受けません。
deb http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy multiverse
deb http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-updates multiverse
## 次の2行のコメントを解除して、'backports'リポジトリからのソフトウェアを追加します。
## N.B. このリポジトリのソフトウェアは、
## メインリリースに含まれるものほど広範囲にテストされていない可能性がありますが、役立つ機能を提供する新しいバージョンのアプリケーションが含まれています。
## また、backportsのソフトウェアは、Ubuntuのセキュリティチームからのレビューや更新を受けません。
# deb http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
# deb-src http://de.archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse
## 次の2行のコメントを解除して、Canonicalの
## 'partner'リポジトリからのソフトウェアを追加します。このソフトウェアはUbuntuの一部ではありませんが、
## CanonicalとそれぞれのベンダーによってUbuntuユーザーへのサービスとして提供されています。
# deb http://archive.canonical.com/ubuntu hardy partner
# deb-src http://archive.canonical.com/ubuntu hardy partner
deb http://security.ubuntu.com/ubuntu hardy-security main restricted
deb-src http://security.ubuntu.com/ubuntu hardy-security main restricted
deb http://security.ubuntu.com/ubuntu hardy-security universe
deb-src http://security.ubuntu.com/ubuntu hardy-security universe
deb http://security.ubuntu.com/ubuntu hardy-security multiverse
deb-src http://security.ubuntu.com/ubuntu hardy-security multiverse今、実行:
apt-get update apt-get upgrade
4.3 修正
/bin/shは/bin/dashへのシンボリックリンクですが、/bin/bashが必要です。したがって、次のようにします:
ln -sf /bin/bash /bin/sh
次のようにして、AppArmorを無効にします(dom01およびdom02で):
/etc/init.d/apparmor stop update-rc.d -f apparmor remove
5. ネットワーク構成(dom01、dom02、lb1、lb2、web1、web2)
5.1 IPの設定
Ubuntuでネットワーク構成を編集するには:
vi /etc/network/interfaces
これから各ネットワーク構成を1つずつ行います。2つのネットワークカードを使用していると仮定します。eth0はインターネットに接続されているもので、eth1はクロスオーバーケーブルのものです。個別に設定ファイルを書くことはせず、dom01.example.comのためだけに書きますので、次のリストに応じて修正してください:
dom01.example.com
dom01.example.com
eth0 : 192.168.1.100 eth1 : 192.168.0.100
dom02.example.com
eth0 : 192.168.1.101 eth1 : 192.168.0.101
lb1.example.com
eth0 : 192.168.1.102 eth1 : 192.168.0.102
lb2.example.com
eth0 : 192.168.1.103 eth1 : 192.168.0.103
web1.example.com
eth0 : 192.168.1.104 eth1 : 192.168.0.104
web2.example.com
eth0 : 192.168.1.105 eth1 : 192.168.0.105
dom01.example.comの例のネットワーク構成:
/etc/network/interfacesファイルを次のようにします:
# このファイルは、システムで利用可能なネットワークインターフェースとそれを有効にする方法を説明します。
# 詳細については、interfaces(5)を参照してください。
# ループバックネットワークインターフェース
auto lo
iface lo inet loopback
# インターネットに接続されたプライマリネットワークインターフェース
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
# 他のサーバーにクロスオーバーケーブルで接続されたセカンダリネットワークインターフェース
auto eth1
iface eth1 inet static
address 192.168.0.100
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255ファイルを保存して、次を実行:
/etc/init.d/networking restart
5.2 ホスト名
vi /etc/hosts
次のようにします。そうしないと、後でldirectordで問題が発生します: dom01.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# 次の行は、IPv6対応ホストにとって望ましいものです
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho dom01.example.com > /etc/hostname /etc/init.d/hostname.sh start
dom02.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 dom02.example.com dom02
192.168.1.100 dom01.example.com dom01
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# 次の行は、IPv6対応ホストにとって望ましいものです
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho dom02.example.com > /etc/hostname /etc/init.d/hostname.sh start
lb1.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 lb1.example.com lb1
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# 次の行は、IPv6対応ホストにとって望ましいものです
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho lb1.example.com > /etc/hostname /etc/init.d/hostname.sh start
lb2.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 lb2.example.com lb2
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.104 web1.example.com web1
192.168.1.105 web2.example.com web2
# 次の行は、IPv6対応ホストにとって望ましいものです
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho lb2.example.com > /etc/hostname /etc/init.d/hostname.sh start
web1.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web1.example.com web1
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.105 web2.example.com web2
# 次の行は、IPv6対応ホストにとって望ましいものです
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho web1.example.com > /etc/hostname /etc/init.d/hostname.sh start
web2.example.com
127.0.0.1 localhost.localdomain localhost
127.0.1.1 web2.example.com web2
192.168.1.100 dom01.example.com dom01
192.168.1.101 dom02.example.com dom02
192.168.1.102 lb1.example.com lb1
192.168.1.103 lb2.example.com lb2
192.168.1.104 web1.example.com web1
# 次の行は、IPv6対応ホストにとって望ましいものです
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhostsecho web2.example.com > /etc/hostname /etc/init.d/hostname.sh start
6. ソフトウェアのインストール(dom01、dom02、lb1、lb2、web1、web2)
実行:
apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。