LinuxでLVSを利用してロードバランサを構築しています。
構成1:
LB[keepalived(192.168.1.1)]仮想(192.168.0.3)
A[Apache(192.168.0.1)]
B[Apache(192.168.0.2)]
構成2:
A[Apache+keepalived(192.168.0.1)]仮想(192.168.0.3)
B[Apache(192.168.0.2)]
DSASのページなどを参考にしているのですが、構成1の3台構成NATであれば問題なく動きます。しかし構成2の同一セグメントでサーバそのものに仮想を持たせるとうまくいきません。どうもAが仮想を持った際に192.168.0.2への振り分けが発生しても、自身で処理しようとしているのか失敗してしまいます。設定は以下の通りです。何が足りないのか教えて頂けると助かります。尚、問題切り分けとしてvrrpは片系です。
---keepalived.conf
virtual_server_group HTTP3 {
192.168.0.3 80
}
virtual_server group HTTP3 {
delay_loop 10
lvs_sched rr
lvs_method DR
protocol TCP
virtualhost 192.168.0.3
real_server 192.168.0.1 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /test.html
status_code 200
}
connect_timeout 3
}
}
real_server 192.168.0.2 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /test.html
status_code 200
}
connect_timeout 3
}
}
}
vrrp_instance VI3 {
state MASTER
interface bond0
lvs_sync_daemon_interface bond0
garp_master_delay 5
virtual_router_id 3
priority 100
nopreempt
advert_int 1
virtual_ipaddress {
192.168.0.3/24 dev bond0
}
}
---
---投入コマンド
echo 0 > /proc/sys/net/ipv4/conf/bond0/rp_filter
iptables -t mangle -A PREROUTING -d 192.168.0.3 -j MARK --set-mark 1
ip rule add prio 3 fwmark 1 table 3
ip route add local 0/0 dev lo table 3
iptables -t nat -A PREROUTING -p tcp -d 192.168.0.3 -j REDIRECT
---
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
かなり前の投稿なのでいまさらですが、こちらの投稿を参考に下記の設定を行って
実現できましたので、記載させていただきます。
お話にあったように、「keepalivedが受け取る前にApacheが受け取ってしまうのか、バランシングをせずに全てAのみで処理されてしまうのです。」という部分がありましたので、
master, backupそれぞれになった際に、iptablesの設定を動的に書き換えるシェルを実行し、
VIP宛のパケットがkeepalivedで処理されるようにしました。(単純にiptablesのコマンドを叩いているだけです)
keepalived.confの設定は両サーバーとも同じです。
- keepalived.conf
vrrp_instance V_WEB {
state BACKUP
~~~ 省略
notify_master "/bin/sh /etc/keepalived/notify_master.sh"
notify_backup "/bin/sh /etc/keepalived/notify_backup.sh"
}
- notify_master.sh
#!/bin/sh
iptables -t nat -D PREROUTING -d 192.168.0.3 -j REDIRECT
- notify_backup.sh
iptables -t nat -D PREROUTING -d 192.168.0.3 -j REDIRECT
iptables -t nat -A PREROUTING -d 192.168.0.3 -j REDIRECT
No.3
- 回答日時:
> できない!というずばりの回答を頂きましたが、今は出来るようです。
どうも貴重な情報をありがとうございます。
keepalived ではなく ldirectord ですが試してみたところ、下記のように
できました。
# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.3:80 rr
-> 192.168.0.11:80 Route 1 0 0
-> 192.168.0.12:80 Route 1 0 0
-> 192.168.0.10:80 Local 1 0 0
昔できなかったのは、ループバックアドレス 127.0.0.1 だったのかもし
れません。
本題の同居しているサーバ自身からのアクセスは、こちらでも振り分け
されません。tcpdump してみると lo にパケットが現れています。振り
分けするには eth0 経由にすればよいのではないかと思うのですが、
lo のパケットを eth0 にまわす方法はわかりません。
この回答への補足
ご回答及び検証ありがとうございます。
やはり出来るのは間違いないみたいですが(ldirectordも中身はLVSですよね?最近ultramonkeyのサイトが繋がらないのは何故?) 、だとするとt-okura様の言うとおり問題はloに飛んでいるパケットをeth0などの外部にRoutingしてやれば行けるのかも!と思ってiptablesを叩きまくりましたが、うまくいきませんでした(eth0にDNATしてみても、やっぱり振り分けるより先にApacheが食べてしまってるように見える)。ただ少し光明が見えてきた気がするのですが。
何か良い手段がありましたらご教授下さい。
No.2
- 回答日時:
DSR(Direct Server Return)の構成をされていますが、DSR は、ロードバラ
ンサの IP に届いたアクセスを振り分け先のサーバが、あたかも自分がそ
の IP を持つサーバであるかのように振る舞って、クライアントに直接応
答を返すものです。応答パケットのソースアドレスは、ロードバランサの
アドレスになります。
このことを実現するため、振り分け先のサーバは、ロードバランサあての
アクセスを自分自身に取り込みます。つまり、DSR 構成のサーバ
にロードバランサあてのアクセスがあると、自分自身で処理してしまうた
め、振り分けが行われません。
なお、LVS では DSR 構成でなくてもロードバランサとリアルサーバを
同居させることはできないはずです。数年前に散々テストして、できない
という情報を見つけました。もっとも、そのころ keepalived に DSR を行
うような機能はなかったので、変わっているかもしれません。
この回答への補足
ご回答ありがとうございます。
できない!というずばりの回答を頂きましたが、今は出来るようです。下記の補足にも記述しました通り、別サーバにクライアントがあれば出来てしまうのです。はてなの中の人+ultramonkleyなどを参考に出来た次第です。
http://d.hatena.ne.jp/hirose31/20060817/1155795703
http://72.14.235.104/search?sourceid=navclient&h …
tcpdumpで内容を確認しましたが、srcMACが違う以外は同じパケットが飛んでいるように見えます。確かにDSRであればIPは書き換えないので自身でそのパケットを取り込んでしまうのでダメそうな気もしますが、外部から出来て自身から出来ないのはおかしい!と思い、何か方法があるのではないかと模索しているところです。
何か良いアイデアがありましたら宜しくお願い致します。
No.1
- 回答日時:
はじめまして、
掲題は同一セグメントのLVSと記載がありましたが、
2台でLVS構成構築可否なのでしょうか?との質問と見受けられますが。
1台がLVSの旗振り役+REALサーバ、2台目がリアルサーバー。
ミッションクリティカルなら
正直、LVSが2台構成でその配下へREALサーバーが繋がります。
http://www.thinkit.co.jp/free/compare/17/9/
2の構成の利点、なぜそのような構成にしたいのか利点がわかりません。
LVS+REALサーバ役のサーバーに障害発生した場合どうしますか。
回答により余談になってしまいましたね。(^^;;)
参考URL:http://www.thinkit.co.jp/free/compare/17/9/
この回答への補足
ご回答ありがとうございます。
当方が考えているものは、ご認識通り2台でLVS+REALサーバです。
2台で済ませたいのは単にサーバ数を減らしたいからです。
A[Apache+keepalived(192.168.0.1)]仮想(192.168.0.3)
B[Apache(192.168.0.2)]
AのkeepalivedがMASTERとなり(vrrpにて仮想を持つ)AとBのApacheにバランシングをしていて、Aのkeepalivedに障害があった際にBのkeepalivedがMASTERとなり、継続してAとBのApacheにバランシングをさせたいのです。上記設定にて別サーバのクライアントからアクセスをすると、AとBのApacheにバランシングされる事、Aのkeepalivedだけを落としてもBのkeepalivedが状態を引き継ぎAとBのApacheにバランシングを継続する事、AをシャットダウンしてもBが全てを引き継ぐ事も確認しています。
問題なのは、クライアントがAの上にいることなのです。クライアントが仮想(192.168.0.3)へのパケットを送信した際、期待する動作としては自身のkeepalivedがそのパケットを受け取り、dstMACを書き換えてAとBにバランシングしてほしいのですが、keepalivedが受け取る前にApacheが受け取ってしまうのか、バランシングをせずに全てAのみで処理されてしまうのです。
ちょっとややこしい話ですが、以下のようなものをイメージして頂ければ。
A B
Client Client
| × |
Apache Apache
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(開発・運用・管理) Windowsバッチファイルでリモートデスクトップを自動ログインするが確認画面が出る対処方法 1 2022/12/19 15:48
- オープンソース AWSドメイン名でApacheテスト・ページを表示させる方法を教えて下さい。 1 2023/04/26 15:59
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- UNIX・Linux ubuntuのサーバー(virtual box)が、再起動するとデータが消えてしまいます。 4 2022/04/27 21:29
- Windows 10 インストールしたてのVirtualBoxの仮想マシンにDHCPで割り振られるIPアドレスにつきまして 1 2023/05/03 14:46
- UNIX・Linux Linuxサーバーのパーティション・ディレクトリの推奨見積もりについて 3 2023/01/17 00:46
- UNIX・Linux postfix smtpサーバーリレーがTLSハンドシェーク失敗 1 2022/08/15 15:45
- MySQL MySQLのテーブル作成でハイフン - は使用できないのでしょうか? 2 2022/10/21 16:50
- サーバー WindowsでApache が起動しない 1 2022/11/29 12:21
- UNIX・Linux VirtualBox ゲストOSにPC内蔵HDDのパーティションをマウントする方法は? 2 2023/05/06 22:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Tera Termが接続できない
-
NTPサーバアドレスについて
-
Macで閲覧できないサイト
-
XWindowって何ですか?
-
【Windows7】インターネットア...
-
FTPコマンドライン操作時の上書...
-
コマンドifconfigがnot foundに...
-
windowsXPの自動時刻整合ができ...
-
異なるタイムゾーンのタイムサ...
-
名前解決できない
-
Windows2000 と Windows2000ser...
-
IPアドレスからサーバ名を取得...
-
DHCPサーバのIPアドレスの確認方法
-
ポケットワイファイでサーバ公...
-
ポーリング型電子メールとプッ...
-
Windows Server 2003にNTPサー...
-
プロキシの使い方?
-
windows7でのインターネット共...
-
windows2000serverにログ...
-
Mac OS9でFTPサーバ(フ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
自作のウェブサイトを友人に見...
-
Tera Termが接続できない
-
FTPの接続継続時間について
-
tera termについて
-
DHCPサーバのIPアドレスの確認方法
-
LinuxでのDNSキャッシュ表示
-
意味の違い ホスト名とサーバー名
-
DBサーバをどこに置くのがよいか
-
VNCの複数利用の方法
-
rexecの有効化方法について
-
ローカル環境でのNTPサーバ
-
DNSの逆引き権限委譲
-
UltraVNCについて
-
NFS接続+シンボリックリンクを...
-
WindowsServerで複数のDHCP
-
メインフレームとサーバは、何...
-
Cactiサーバのデータ移行方法に...
-
TeraTermでsqlplusを利用した時...
-
EDN0の設定方法について
-
DHCPサーバでの、複数スコープ設定
おすすめ情報