LVS集群---》在这里做前端调度器搭建使用,工作模式用的LVS-nat和LVS-dr。



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
集群:一组通过高速网络互联的计算组,并以单一系统的模式加以管理,服务的是同一网站

集群目低:增加可靠性 提高性能 降低成本 提高可靠扩展性

集群分类:
高性能计算集群HPC(工作中用的少):通过以集群开发的并行应用程序,解决复杂的科学问题|(主要是单次科学计算速度要求快,如天气预报)

负责均衡(LB)集群:客户端负责在计算机集群中尽可能平均分摊(用户量大,需要快速解决,平均分摊)


高可用(HA)集群:避免单点故障,当一个系统发生故障时,可以快速迁移


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

搭建LAMP分离结构
1.准备三台虚拟机
vh01.tedu.cn 192.168.4.1/24 web1
vh02.tedu.cn 192.168.4.2/24 web2
vh03.tedu.cn 192.168.4.3/24 mysql1

2.配置mysql(vh03)
# yum -y install mysql-server
# service mysqld start; chkconfig mysqld on
# mysql -uroot
mysql> grant all on *.* to 'admin'@'192.168.4.1' identified by 'tedu.cn';
mysql> grant all on *.* to 'admin'@'192.168.4.2' identified by 'tedu.cn';

3.配置web服务器
在两台web服务器上安装软件包

# yum -y install httpd php php-mysql
#  service httpd start; chkconfig httpd on

在vh01上安装Discuz

#unzip Discuz_X3.2_SC_UTF8.zip
#mv upload/ /var/www/html/bbs
#firefox http://192.168.4.1/bbs & (把打开的页面中,带红叉的目录,复制到一个文件夹中,给它权限,就可以安装了,也可以直接给bbs目录改成apache属主,或给777,权限都行,但怕权限太大不安全)
#cd /var/www/html/bbs/
#vim 1.txt  
./config    可写     不可写
./data    可写     不可写
./data/cache    可写     不可写
./data/avatar    可写     不可写
./data/plugindata    可写     不可写
./data/download    可写     不可写
./data/addonmd5    可写     不可写
./data/template    可写     不可写
./data/threadcache    可写     不可写
./data/p_w_upload    可写     不可写
./data/p_w_upload/album    可写     不可写
./data/p_w_upload/forum    可写     不可写
./data/p_w_upload/group    可写     不可写
./data/log    可写     不可写
./uc_client/data/cache    可写     不可写
./uc_server/data/    可写     不可写
./uc_server/data/cache    可写     不可写
./uc_server/data/avatar    可写     不可写
./uc_server/data/backup    可写     不可写
./uc_server/data/logs    可写     不可写
./uc_server/data/tmp    可写     不可写
./uc_server/data/view    可写     不可写

#chmod 777 $(awk '{print $1}' ./1.txt (把上面第一列弄出来给权限)

#//再在浏览器页面中,一步一步安装就可,然后创建一个用户。

将vh01的bbs目录打包到scp到vh02
#cd /var/www/html
#tar -zcf bbs.tar.gz  bbs
#scp bbs.tar.gz root@192.168.4.2:/root/var/www/html

vh02:# cd /var/www/html/
#tar -zxvf bbs.tar.gz
# firefox http://192.168.4.2/bbs
在打开的浏览器中就会看到刚注册的用户。因为数据都是保存在数据库中,所以能同步。

——————————————————————————————————————
LVS集群组成
-前端:负责均衡层 由一台或多台负责高度器构成
-中间:服务器群组层 由一组实际运行应用服务的服务器组成
-底端:数据共享存储层 提供共享存储空间的存储区域
LVS术语: DS调度服务器(将负载分发到RS服务器上)  RS真实服务器(真正提供应用服务的服务器) VIP虚拟IP地址(公布给用户访问的虚拟IP地址) RIP真实IP地址(集群节点上使用的IP地址) DIP调度器连接节点服务器的IP地址


 lvs工作模式三种 :NAT模式    TUN模式(隧道模式)    DR(模式)
vs/NAT通过网络地址转换实现的虚拟服务器(大并发访问时,调度器的性能成为瓶颈)
vs/DR直接使用路由器技术实现虚拟服务器(节点服务器需要配置VIP)
vs/TUN通过隧道方式实现虚拟服务器

负载均衡调度算法10种
常用四种
轮循(平均)
加权轮循(根据权重值进行轮循,一般性能好的可以让它多轮几次,差的少轮)   
最少连接 (选浙最少连接服务器)
加权最少连接(也是根据性能)

目标地址散列
最少队列调度
——————————————————————————————————————



准备一台虚拟机作为调度器
vh04.tedu.cn 192.168.4.4/24 201.1.1.4/24 (eth0和eth2)
一,配置yum
# vim /etc/yum.repos.d/abc.repo
[abc]
name=abc
baseurl=ftp://192.168.4.11/pub/iso/   (这里默认用的是yum仓库中的Server库)
gpgcheck=0
[LoadBalncer]
name=abc
baseurl=ftp://192.168.4.11/pub/iso/LoadBalancer  (LVS装的包ipvsadm在yum仓库的LoadBalancer库)
gpgcheck=0
# yum repolist
仓库标识                                 仓库名称                          状态
LoadBalncer                              abc                                   4
abc                                      abc                               3,819
repolist: 3,823
二。安装ipvsadm
# yum install -y ipvsadm

++++++++++++++++++++
配置lvs-nat模式
++++++++++++++++++++
1..打开调度器的路由功能(vh04)
# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1
# sysctl -p


2.配置两台web服务器网关,指向调度器的内网地址(192.168.4.4)。
vh01和vh02 网关设置192.168.4.4

3.在调度器上创建虚拟服务器,指定调度算法是rr(轮循)
#ipvsadm -A -t 201.1.1.4:80 -s rr   (-A 添加虚拟服务器 -t设置群集地址VIP  -s指定负载调度算法)

4.将realserver加入到虚拟服务器
# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.1 -m   (-a添加真实服务器 -d删除真器 -r指定真实服务器 -m使用NAT模式 -g是DR模式 -i是TUN模式 -w设置权重 默认不输为1)
# ipvsadm -a -t 201.1.1.4:80 -r 192.168.4.2 -m -w 2

5.查看规则
# ipvsadm -Ln

6.两个web服务器做一个测试页面,看轮循

vh01做一个测试页面
# cat /var/www/html/index.html
<h1><font color=red> web is  1

vh02做一个测试页面
# cat /var/www/html/index.html
<h1><marquee><font color=red> web is 2


6.在客户端,真机测试:

[root@room1pc01 桌面]# firefox http://201.1.1.4 (第一次是vh01页面,第二是vh02,三是vh01,四是vh02)

7.修改调度算法
#ipvsadm -E -t 201.1.1.4:80 -s wrr(调度算法改为权重轮循)
8.再在客户机测试:
[root@room1pc01 桌面]# firefox http://201.1.1.4 (出两次vh02,才出一次vh01)

9.保存lvs规则

service ipvsadm save


10调度器做个扩展(工作 要用地着叫脚本)
可以在调度器写一个脚本,监视web集群,当有一个出现故障时直接从调度器上移除,修复好了,自动加上了。

脚本:
vim monitor_web.sh
#!/bin/bash
#调度器上运行监控web1和web2脚本,当一台web坏了直接移除出ipvsadm,修复好后自动加入
进来。每三秒一次死循环。        
VIP=201.1.1.4:80
RIP1=192.168.4.1
RIP2=192.168.4.2

while :
do
    for ip in $RIP1 $RIP2
    do
        web_stat=$(nmap -n -sT $ip -p 80 2> /dev/null | grep open)
        in_lvs=$(ipvsadm -Ln | grep $ip)

        if [ -z "$web_stat" -a -n "$in_lvs" ]; then
            ipvsadm -d -t $VIP -r $ip
        elif [ -n "$web_stat" -a -z "$in_lvs" ]; then
            ipvsadm -a -t $VIP -r $ip -m
        fi
    done
    sleep 3
done

:wq


# chmod +x monitor_web.sh
#yum install -y nmap
#./monitor_web.sh &
# ipvsadm -Ln (可以看到web1和web2,当web1坏了就移除了,修复了就加进来,可以测试在vh01:service httpd stop)

______________________________________________________________________________________________________________________________
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

[root@room1pc01 桌面]# touch /nsd/myfile.txt
[root@room1pc01 nsd]# ls
 myfile.txt  
[root@room1pc01 nsd]# cp myfile{.txt,.doc}   复制
[root@room1pc01 nsd]# ls
 myfile.doc  myfile.txt  
++++++++++++++++++++++++++++

配置LVS-DR模式
1.清理调度器的规则 (接着上面的做,所以先清空之前的模式)
#ipvsadm -D -t 201.1.1.4:80
2.删除eth2的ip和子网
vim /etc/sysconfig/network-scripts/ifcfg-eth2(把ip和子网删了)

3.在vh04的eth0上配置vip 192.168.4.100

cp /etc/sysconfig/network-scripts/ifcfg-eth0{,:0}

vim /etc/sysconfig/network-scripts/ifcfg-eth0:0

DEVICE=eth0:0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
USERCTL=no
IPADDR=192.168.4.100
NETMASK=255.255.255.0


service network restart



4.在两台web服务器的lo上配置vip
#cp /etc/sysconfig/network-scripts/ifcfg-lo{,:0}
# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.100
NETMASK=255.255.255.255
NETWORK=192.168.4.100
BROADCAST=192.168.4.100
ONBOOT=yes
NAME=loopback
# service network restart
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet 192.168.4.100/32 brd 192.168.4.100 scope global lo:0
....................

# scp /etc/sysconfig/network-scripts/ifcfg-lo:0 root@192.168.4.2:/etc/sysconfig/network-scripts/ifcfg-lo:0
root@192.168.4.2's password:
ifcfg-lo:0                                    100%  128     0.1KB/s   00:00  

在vh02上:
# service network restart
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet 192.168.4.100/32 brd 192.168.4.100 scope global lo:0
    inet6 ::1/128 scope host
。。。。。。。。

5.在两台服务器上配置内核参数(为的就是当客户端给192.168.4.100发送请求时,只有调度器响应,web服务器不相应)
(vh01和vh02都做)
# sysctl -a |grep arp_ig
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.default.arp_ignore = 0
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.eth0.arp_ignore = 0
net.ipv4.conf.eth1.arp_ignore = 0
net.ipv4.conf.eth2.arp_ignore = 0
net.ipv4.conf.eth3.arp_ignore = 0
# echo  "net.ipv4.conf.all.arp_ignore = 1"  >>/etc/sysctl.conf
# echo  "net.ipv4.conf.lo.arp_ignore = 1"  >>/etc/sysctl.conf
# sysctl -a |grep arp_an
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.default.arp_announce = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.eth0.arp_announce = 0
net.ipv4.conf.eth1.arp_announce = 0
net.ipv4.conf.eth2.arp_announce = 0
net.ipv4.conf.eth3.arp_announce = 0
# echo  "net.ipv4.conf.all.arp_announce = 2"  >>/etc/sysctl.conf
# echo  "net.ipv4.conf.lo.arp_announce = 2"  >>/etc/sysctl.conf
# sysctl -p


6.配置lvs规则
# ipvsadm  -A -t 192.168.4.100:80 -s lc
# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.1
# ipvsadm -a -t 192.168.4.100:80 -r 192.168.4.2 -g
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.4.100:80 lc
  -> 192.168.4.1:80               Route   1      0          0         
  -> 192.168.4.2:80               Route   1      0          0  


7.客户端(真机测试192.168.4.254):
# firefox http://192.168.4.100/  (一定要加上/)

8.查看
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.4.100:80 lc
  -> 192.168.4.1:80               Route   1      0          1         
  -> 192.168.4.2:80               Route   1      0          1    


9.客户端批量发送请求(真机192.168.4.254)

[root@room1pc01 桌面]# which bc
/usr/bin/bc
[root@room1pc01 桌面]# rpm -qf /usr/bin/bc
bc-1.06.95-1.el6.x86_64
[root@room1pc01 桌面]# ab -n 1000 -c 10 http://192.168.4.100/     (每次发送10个请求,一共发送1000个请求)

10.查看
# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.4.100:80 lc
  -> 192.168.4.1:80               Route   1      0          486       
  -> 192.168.4.2:80               Route   1      0          515