絵の下には 、実際のビジネスクラスタアーキテクチャダイアグラムである 以前の技術に関連して、今日の LVS + keepalivedのロードバランシングnginxde この写真はちょうど彼女であると技術が累積実験の前で構築することができ、ウェブ我々のテストマシンよりサーバー実際には、あることがより理論は、我々は完全なネットワークマップを行うことができ、その後、前の実験と組み合わせると同じ今日であります
図は、おそらくこのクラスタ上の 限られた条件 、私はここで開かれた 3台の実際にマシンをするだけでなく、追加LVSをメインフックからは、上から防ぐためにカットすることができ LVS あなたにいくつかの設定ファイルを与えると同じメインから実際にはしていない後ろからさkeepalivedのここでの優先順位は同じではありませんLVSの設定ファイルと同じマスタースレーブをインストール
実験環境:(私たちが構築するために、他のノートを参照できる環境)
192.168.1.120のLVS + keepalivedの負荷nginxののサーバ(プライマリ)
192.168.1.116のnginxの負荷分散サーバー
192.168.1.118のnginxの負荷分散サーバー
192.168.1.117ラップ+ tomcat1 + TOMCAT2 WEBのサーバー(一般的に、各ウェブのみでサーバサイトのTomcat 複数設定することができます)
192.168.1.18のmysqlの主はkeepalivedのメイン
(ここでは、使用 5つのマシンを発揮できるコースからセットを、我々は2つのデータベースの前に置くことができますし、2台の良いのWeb サーバにも開くように設定することができLVSをから、その効果はより明白です)
今日の内容は keepalivedのLVS + フロントエンドの負荷にnginxのは、その後、我々は上にあるここで行うために、サーバnginxの+ keepalivedのあなたが言うことができないあなたの会社は2台のがある場合のnginxのサーバーその後、nginxの+ keepalivedのことができますが、一度nginxのサーバーなどを場合keepalivedの今日の値は使用しないでLVS + keepalivedのをフロントエンド倍数解決することでnginxののロードバランシングの問題を。。。。。。。。。。。。
LVSは、単に動作します:ユーザーが今後の方法に基づいてLVS VIP、LVSとアルゴリズムを要求し、バックエンドサーバーに要求を転送し、バックエンドサーバーは要求を受信し、ユーザに返さ。ユーザーのために、アプリケーションが特定のWebバックエンドを見ることができません。
三つの方法、すなわちNAT、DR、TUNモード、共通のアルゴリズム転送LVS:RR、LC、WRR、WLCモード(RRポーリングモードを、LCは最小接続モードです)
以下の場合は 1.116とnginxの負荷分散の1.118ここでは2つのサイトがこれら二つのnginxのIP LVSは、負荷nginxの(2つのフロントエンドWebサーバーのnginxの2 + 2つのバックエンドデータベースを)解決することができますどのようにアクセスすることはできません同じサイトであります両方のnginxの条件上の2つの異なるサイトを構成するために制限しました。
ステップ 1。
- LVS環境のインストール設定192.168.1.120
ダウンロード LVS必要なソフトウェアipvsadmの-1.2.4.tar.gzソフトウェアを、コンパイルしてインストールします。
wgetの-c
http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
カーネルにコンパイルのln -s /usr/src/kernels/2.6.*は/ usr / src / linuxの// IPVSモジュール、我々はソフトの接続を行う必要があります
(ここに書かれた自分のマシンのコア内にある カーネルの場合は、ここで覚えているタブが出てこないし、我々はカーネルのカーネル-develのインストール-y yumのカーネル拡張パッケージをインストールし、)
yumのGCC *ののopensslのopenssl-develのインストール-y
タールxzvf ipvsadmの-1.24.tar.gz &&のCD ipvsadmの-1.24 && && make installを作ります
(以下の会社は、一般に、以下に配置keepalivedのない黄色のマーカーがこの方法で達成されてもよいです)
LVSは、インストール後、ステップ二段構成、サービスポートの定義のための第一段階、第二段階が追加されるRealServerのバックエンドサービスを構成する必要があります。
ipvsadmの-A -t 192.168.1.199:80 -s RR
ipvsadmの-a -t 192.168.1.199:80 -r 192.168.1.116 -g -w 2
ipvsadmの-a -t 192.168.1.199:80 -r 192.168.1.118 -g -w 2
あなたは、展開を自動化するスクリプトを使用することができます。 server_lvs.shを
#!/ binに/ bashの
SNS_VIP = 192.168.1.199
SNS_RIP1 = 192.168.1.116
SNS_RIP2 = 192.168.1.118
1>は、/ proc / sys / net / IPv4の/ ip_forwardエコー
。/etc/rc.d/init.d/functions
機能ipvsadmの(){
/ sbinに/ ipvsadmの--set 30 5 60
の/ sbin / ifconfigコマンドはeth0:0 $ VIP放送の$のVIPのネットマスク255.255.255.255アップ
/ sbinに/ルート-host $ SNS_VIP DEVはeth0を追加:0
/ sbinに/ ipvsadmの-A -t $ SNS_VIP:80 -s WLC -p 120
/ sbinに/ ipvsadmの-a -t $ SNS_VIP:80 -r $ SNS_RIP1:80 -g -w 1
/ sbinに/ ipvsadmの-a -t $ SNS_VIP:80 -r $ SNS_RIP2:80 -g -w 1
/etc/init.d/ipvsadm保存
}
場合は「$ 1」
開始)
ipvsadmの
エコー " - - - - - - - - - - - - - - - - - - - - - - - - -----」
/ sbinに/ ipvsadmの-Ln
タッチは/ var / lock / subsys / ipvsadmの>を/ dev / null 2>&1
;;
やめる)
/ sbinに/ ipvsadmの-C
/ sbinに/ ipvsadmの-Z
ifconfigコマンドはeth0:0ダウン>>を/ dev / null 2>&1
ルート・デル$ SNS_VIP >>を/ dev / null 2>&1
RM -rfは/ var / lock / subsys / ipvsadmの>を/ dev / null 2>&1
「ipvsadmの停止!」エコー
;;
状態)
[もし!-eは/ var / lock / subsys / ipvsadmの]
それから
「ipvsadmの停止!」エコー
1番出口
他
「始めipvsadmの!」エコー
されます
;;
*)
エコー "使い方:$ 0 {開始|停止|ステータス}"
1番出口
ESAC
終了0
パラメータ:
仮想サーバーのアドレスを追加-A。
-t 仮想サーバー提供は、 TCPサービス。
-sを使用したスケジューリングアルゴリズムを。
では-a 仮想サーバー本当のバックエンドサーバーを追加します。
-rは、実サーバのアドレスを指定します。
-iモード、-g直接ルートモード、現在の転送モードNATモードを設定-m トンネルモード。
右-w実際のバックエンドサーバーの重み。
ipvsadmの-D -t 192.168.1.199:80
ipvsadmの-d -t 10.143.130.106:80 -r 10.143.130.107:80
表示 listコマンドを転送LVS:ipvsadmの-Ln
私たちは、この場合に見つける緊急事態のLVSの発生、マシンダウン、およびバックエンドアプリケーションのすべてがアクセスできません。この要件を達成するためにどのように、メインダウン、などのバックアップLVSがある場合には、ある、フェールオーバーを使用する必要があり、自動的にからに切り替え、ここでは、この問題を回避する方法、ソフトウェアの以下の説明はkeepalivedのために設計されています障害検出およびスイッチングを行います。
あなたが使用している場合があります keepalived.conf構成を、あなたはバランスの取れたRealServerのコマンドを追加するためにIPVS -Aコマンドを実行する必要がある、すべての設定は、あなただけのIPVSをインストールする必要があり、そのすべてを取得するには、構成ファイル内のkeepalived.confになりますモジュール。
ステップ2。
- keepalivedのインストール構成
公式ダウンロード安定版に対応するkeepalivedのを:
CDは/ usr / src; wgetの-c http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
タール-xzvf keepalivedの-1.1.15.tar.gz && CD keepalivedの-1.1.15を&& ./configureを&&作る&& make installを
(ここでは、カーネルとコンパイラのフロントmysqlの+ keepalivedのインストール方法をインストールする必要はありませんkeepalivedのは、私たちがLVSが定義されているインストールしたときと同じではありません)
(ここでエラーをコンパイル 、インストールに yumをPOPT-develのインストール)
インストール、構成はシステムサービスとしてサービスをkeepalivedの。
DIR =は/ usr / local /
cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived && cp $DIR/sbin/keepalived /usr/sbin/
在MASTER上/etc/keepalived/目录创建keepalived.conf配置文件,并写入如下内容:
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 100
advert_int 5
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.199
}
}
virtual_server 192.168.1.199 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
# persistence_timeout 60
protocol TCP
real_server 192.168.1.116 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.118 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
以上就是keepalived的配置文件 记住上面的vip的ip要保证没有被使用 这里是两台nginx服务器 如果还有多个nginx服务器就在配置文件里面添加real_server 对应的配置段
下面可以看到我们的lvs+keepalived配置成功
Lvs从上安装lvs和主安装是一样的 keepalived上配置如下就行了 我这里就不演示了:
如上配置文件,红色标记的地方需要注意,state状态主服务器设置MASTER,从设置为BACKUP,优先级备机设置比MASTER小,例如设置90,使用TCP端口检测。
在LVS BACKUP服务器写入如下配置,需要注意的是客户端的配置要修改优先级及状态:
! Configuration Filefor keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.199
}
}
virtual_server 192.168.1.199 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
# persistence_timeout 60
protocol TCP
real_server 192.168.1.116 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.118 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
如上设置,LVS 主备配置完毕,接下来需要在realserver配置LVS VIP,为什么要在realserver绑定VIP呢?
客户端访问director的VIP,director接收请求,将通过相应的算法将请求转发给相应的realserver。在转发的过程中,会修改请求包的目的mac地址,目的ip地址不变。
Realserver接收请求,并直接响应客户端。这时便出现一个问题,director此时与realserver位于同一个网络中,当director直接将请求转发给realserver时,realserver检测到该请求包的目的ip是vip而并非自己,便会丢弃,而不会响应。为了解决这个问题,所以需要在所有Realserver上都配上VIP。
为什么一定要配置在lo接口上呢?
在realserver上的lo口配置VIP,这样限制了VIP不会在物理交换机上产生MAC地址表,从而避免IP冲突。
客户端nginx服务器上启动Realserver.sh脚本内容:
#!/bin/sh
#LVS Client Server
VIP=192.168.1.199 (这里的vip 要和lvs上的keepalived配置文件里面的vip是一样的)
case $1 in
start)
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
exit 0
;;
stop)
ifconfig lo:0 down
route del $VIP >/dev/null 2>&1
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
echo "RealServer Stoped OK"
exit 1
;;
*)
echo "Usage: $0 {start|stop}"
;;
esac
在客户端nginx服务器都要执行上面的脚本 执行方式如下 两台nginx都是一样在lo上绑定虚拟ip 两台都要指定 有多少nginx服务器就指定多少
这是我们来做个验证 就是把其中一台nginx服务关掉看看有什么效果:
这里我们会发现那台nginx服务关掉了 lvs就会从路由表里面把它踢出去 当然nginx再起来的时候lvs就会自动把它加入路由表里面
接下来就是验证的时候了 在验证前我们要先把一些服务器添加到开机自动启动,
chkconfig --add keepalived
chkconfig keepalived on
- 在lvs上 我们要保证开机自动启动keepalived执行命令: echo "/etc/init.d/keepalived restart">>/etc/rc.local
- 在客户端nginx服务器上保证vip开机自动添加 执行命令:echo "sh /root/realserver.sh start" >> /etc/rc.local
- 客户端nginx服务器保证开机启动nginx服务执行命令:echo "/usr/local/nginx/sbin/nginx">>/etc/rc.local
接下来我们域名解析在Windows上hosts文件里 ,访问网站看到如下效果,说明我们成功了。