一、Linux
Virtual Server概述
Linux Virtual Server (LVS)是一套完整的基於IP的負載均衡的集群軟體。LVS運行在一對有相似配置的電腦上:一個作為活動LVS Router(Active LVS Router),一個作為備份LVS Router(Backup LVS Router)。活動LVS Router服務有兩個角色:
* 均衡負載到真實伺服器上。
* 檢查真實伺服器提供的服務是否正常。
備份LVS Router用來監控活動的LVS Router,以備活動的LVS Router失敗時由備份LVS Router接管。
* 均衡負載到真實伺服器上。
* 檢查真實伺服器提供的服務是否正常。
備份LVS Router用來監控活動的LVS Router,以備活動的LVS Router失敗時由備份LVS Router接管。
Pulse進程運行在活動LVS Router和備份LVS Router上。在備份LVS Router上,pulse發送一個心跳(heartbeat)到活動LVS Router的公網介面上以檢查活動LVS Router是否正常。在活動LVS Router上,pulse啟動lvs進程並響應來自於備份LVS Router的心跳。
lvs進程調用ipvsadm工具去配置和維護IPVS路由表,並為每一個在真實伺服器上的虛擬服務啟動一個nanny進程。每一個nanny進程去檢查真實伺服器上的虛擬服務狀態,並將故障情況通知lvs進程。假如一個故障被發現,lvs進程通知ipvsadm在IPVS路由表中將此節點刪除。
如果備份LVS Router未收到來自於活動LVS Router的響應,它將調用send_arp將虛擬IP位址再分配到備份LVS Router的公網介面上。並在公網介面和局域網介面上分別發送一個命令去關掉活動LVS Router上的lvs進程。同時啟動自己的lvs進程來調度用戶端請求。
lvs進程調用ipvsadm工具去配置和維護IPVS路由表,並為每一個在真實伺服器上的虛擬服務啟動一個nanny進程。每一個nanny進程去檢查真實伺服器上的虛擬服務狀態,並將故障情況通知lvs進程。假如一個故障被發現,lvs進程通知ipvsadm在IPVS路由表中將此節點刪除。
如果備份LVS Router未收到來自於活動LVS Router的響應,它將調用send_arp將虛擬IP位址再分配到備份LVS Router的公網介面上。並在公網介面和局域網介面上分別發送一個命令去關掉活動LVS Router上的lvs進程。同時啟動自己的lvs進程來調度用戶端請求。
下面是一個兩層結構的LVS架構:
下面是一個三層結構的LVS架構:
兩層結構的LVS架構適合於Real Server上的資料變化不是很頻繁的情況,如果Real Server上的資料變化很頻繁應該考慮使用三層結構的LVS架構,將資料放到一個共用檔案系統(GFS)上供所有的Real Server同時讀寫。
你可以使用VS/NAT、VS/TUN和VS/DR來實現IP負載均衡:
* 使用VS/NAT方法:客戶通過Virtual IP Address(虛擬服務的IP位址)訪問網路服務時,請求報文到達調度器,調度器根據連接調度演算法從一組真實伺服器中選出一台伺服器,將報文的目標位址Virtual IP Address改寫成選定伺服器的位址,報文的目標埠改寫成選定伺服器的相應埠,最後將修改後的報文發送給選出的伺服器。同時,調度器在連接Hash表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定伺服器的位址和埠,進行同樣的改寫操作,並將報文傳給原選定的伺服器。當來自真實伺服器的響應報文經過調度器時,調度器將報文的源位址和源埠改為Virtual IP Address和相應的埠,再把報文發給用戶。當使用VS/NAT方法時,如果有大量的回應資料經過調度器,調度器將成為整個集群的瓶頸。
你可以使用VS/NAT、VS/TUN和VS/DR來實現IP負載均衡:
* 使用VS/NAT方法:客戶通過Virtual IP Address(虛擬服務的IP位址)訪問網路服務時,請求報文到達調度器,調度器根據連接調度演算法從一組真實伺服器中選出一台伺服器,將報文的目標位址Virtual IP Address改寫成選定伺服器的位址,報文的目標埠改寫成選定伺服器的相應埠,最後將修改後的報文發送給選出的伺服器。同時,調度器在連接Hash表中記錄這個連接,當這個連接的下一個報文到達時,從連接Hash表中可以得到原選定伺服器的位址和埠,進行同樣的改寫操作,並將報文傳給原選定的伺服器。當來自真實伺服器的響應報文經過調度器時,調度器將報文的源位址和源埠改為Virtual IP Address和相應的埠,再把報文發給用戶。當使用VS/NAT方法時,如果有大量的回應資料經過調度器,調度器將成為整個集群的瓶頸。
* 使用VS/TUN方法:VS/TUN的連接調度和管理與VS/NAT中的一樣,只是它的報文轉發方法不同。調度器根據各個伺服器的負載情況,動態地選擇一台伺服器,將請求報文封裝在另一個IP報文中,再將封裝後的IP報文轉發給選出的伺服器;伺服器收到報文後,先將報文解封獲得原來目標位址為VIP的報文,伺服器發現VIP位址被配置在本地的IP隧道設備上,所以就處理這個請求,然後根據路由表將回應報文直接返回給客戶。
* 使用VS/DR方法:調度器和伺服器組都必須在物理上有一個網卡通過不分斷的局域網相連,如通過交換機或者高速的HUB相連。VIP地址為調度器和伺服器組共用,調度器配置的VIP位址是對外可見的,用於接收虛擬服務的請求報文;所有的伺服器把VIP位址配置在各自的Non-ARP網路設備上,它對外面是不可見的,只是用於處理目標位址為VIP的網路請求。在VS/DR中,調度器根據各個伺服器的負載情況,動態地選擇一台伺服器,不修改也不封裝IP報文,而是將資料幀的MAC位址改為選出伺服器的MAC位址,再將修改後的資料幀在與伺服器組的局域網上發送。因為資料幀的MAC位址是選出的伺服器,所以伺服器肯定可以收到這個資料幀,從中可以獲得該IP報文。當伺服器發現報文的目標位址VIP是在本地的網路設備上,伺服器處理這個報文,然後根據路由表將回應報文直接返回給客戶。
二、本实验拓扑图
在实际环境中可修改192.168.0.200、192.168.0.10、192.168.0.11为真IP。
三、LVS在RedHat 5上的安装
1、需要的安装包:
操作系统:RedHat 5
LVS安装包:
操作系统:RedHat 5
LVS安装包:
php-common-5.1.6-5.el5.i386.rpm
php-cli-5.1.6-5.el5.i386.rpm
php-5.1.6-5.el5.i386.rpm
ipvsadm-1.24-8.1-i386.rpm
piranha-0.8.4-7.el5.i386.rpm
如果系统中没有安装Apache还需要Apache的安装包。
2、在Active LVS Router上安装PHP
Shell # rpm -ivh php-common-5.1.6-5.el5.i386.rpm
Shell # rpm -ivh php-cli-5.1.6-5.el5.i386.rpm
Shell # rpm -ivh php-5.1.6-5.el5.i386.rpm
Shell # vi /etc/httpd/conf/httpd.conf
查找AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
在其下加入:
AddType application/x-tar .tgz
AddType application/x-httpd-php .php
AddType image/x-icon .ico
修改DirectoryIndex 行,添加index.php
修改为DirectoryIndex index.php index.html index.html.var
# vi /var/www/html/test.php
添加以下行:
//php标记(用<代替[)
[?php
phpinfo();
?]
wq保存退出。
Shell # /etc/init.d/httpd restart //重新启动Apache
打开浏览器进行测试,输入http://localhost/test.php,如果能够成功显示PHP变量则说明PHP安装成功。
Shell # rpm -ivh php-common-5.1.6-5.el5.i386.rpm
Shell # rpm -ivh php-cli-5.1.6-5.el5.i386.rpm
Shell # rpm -ivh php-5.1.6-5.el5.i386.rpm
Shell # vi /etc/httpd/conf/httpd.conf
查找AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
在其下加入:
AddType application/x-tar .tgz
AddType application/x-httpd-php .php
AddType image/x-icon .ico
修改DirectoryIndex 行,添加index.php
修改为DirectoryIndex index.php index.html index.html.var
# vi /var/www/html/test.php
添加以下行:
//php标记(用<代替[)
[?php
?]
wq保存退出。
Shell # /etc/init.d/httpd restart
打开浏览器进行测试,输入http://localhost/test.php,如果能够成功显示PHP变量则说明PHP安装成功。
3、在Active LVS Router上安装LVS所需要的包
Shell # rpm -ivh ipvsadm-1.24-8.1-i386.rpm
Shell # rpm -ivh piranha-0.8.4-7.el5.i386.rpm
Shell # rpm -ivh ipvsadm-1.24-8.1-i386.rpm
Shell # rpm -ivh piranha-0.8.4-7.el5.i386.rpm
4、在Active LVS Router上打开数据转发
Shell # vi /etc/sysctl.conf
找到下面行:
net.ipv4.ip_forward = 0
将0 改成1,
net.ipv4.ip_forward = 1
执行如下命令来应用:
sysctl -p
Shell # vi /etc/sysctl.conf
找到下面行:
net.ipv4.ip_forward = 0
将0 改成1,
net.ipv4.ip_forward = 1
执行如下命令来应用:
sysctl -p
5、在Backup LVS Router上重复2、3、4步。
6、在Active LVS Router上初始化piranha的密码
Shell # piranha-passwd
输入两遍密码即可。
Shell # piranha-passwd
输入两遍密码即可。
在Active LVS Router上启动需要的服务
Shell # /etc/init.d/piranha-gui start
Shell # /etc/init.d/piranha-gui start
在Active LVS Router上配置LVS
首先在浏览器中输入http://localhost:3636打开piranha,输入用户名:piranha,密码:上面设置的密码。
首先在浏览器中输入http://localhost:3636打开piranha,输入用户名:piranha,密码:上面设置的密码。
登录后将看到监视屏幕。
配置Global Settings(是对Active LVS Router的配置),点击Direct Routing,然后输入公网IP,和局域网IP。点击ACCEPT按钮保存设置。
配置Redundancy(是对Backup LVS Router的配置),输入公网IP,和局域网IP。点击ACCEPT按钮保存设置。
点击ADD按钮添加一个服务。
按下面配置添加的服务。配置完成后不要忘记点击ACCEPT按钮保存设置。
点击REAL SERVER连接,配置Real Server。
点击MONITORING SCRIPTS连接修改监控设置,在此保持默认。
点击VIRTUAL SERVERS连接,然后点击(DE)ACTIVATE按钮激活上面设置的服务。
7、在Active LVS Router上启动pulse进程
Shell # /etc/init.d/pulse start
Shell # chkconfig --level 2345 piranha-gui on
Shell # chkconfig --level 2345 pulse on
拷贝配置文件到Backup LVS Router。
Shell # scp /etc/sysconfig/ha/lvs.cfg root@192.168.0.21:/etc/sysconfig/ha/
Shell # /etc/init.d/pulse start
Shell # chkconfig --level 2345 piranha-gui on
Shell # chkconfig --level 2345 pulse on
拷贝配置文件到Backup LVS Router。
Shell # scp /etc/sysconfig/ha/lvs.cfg root@192.168.0.21:/etc/sysconfig/ha/
8、在Backup LVS Router上启动pulse进程
Shell # /etc/init.d/pulse start
Shell # chkconfig --level 2345 pulse on
9、配置Real Server
在Real Server上创建一个脚本:
Shell # vi /root/lvsRealServer.sh
#!/bin/bash
#Description : RealServer Start!
#Write by:iStone
#Last Modefiy:2007.12.15
在Real Server上创建一个脚本:
Shell # vi /root/lvsRealServer.sh
#!/bin/bash
#Description : RealServer Start!
#Write by:iStone
#Last Modefiy:2007.12.15
VIP=192.168.0.200
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/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
#end
保存退出,并给执行权限。
Shell # chmod u+x /root/lvsRealServer.sh
Shell # ./root/lvsRealServer.sh
将脚本加入/etc/rc.d/rc.local
Shell # vi /etc/rc.d/rc.local
/root/lvsRealServer.sh
在每个Real Server上重复本步。
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/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
#end
保存退出,并给执行权限。
Shell # chmod u+x /root/lvsRealServer.sh
Shell # ./root/lvsRealServer.sh
将脚本加入/etc/rc.d/rc.local
Shell # vi /etc/rc.d/rc.local
/root/lvsRealServer.sh
在每个Real Server上重复本步。
10、测试,在其它机器上访问虚拟IP
回到Active LVS Router上,输入ipvsadm命令
如果看到以上输出,说明LVS配置成功。
沒有留言:
張貼留言