zyx青岛实训day27 8/13

一.LVS概述

1.什么是lvs:

lvs是一个实现负载均衡集群开源软件项目,lvs逻辑上可以分为调度层,server集群层和共享层

2.特点:免费,开源,四层负载均衡

3.Lvs工作原理

4.lvs调度算法:

  1. 静态调度算法
  1. 轮询

     RR  轮询**

     均等的对待每一台服务器,而不管服务器上实际的连接数和系统负载

  1. 加权轮询

     WRR  加权轮询**

     调度器可以自动询问真实服务器的负载情况,并动态的调整其权值

  1. 目标地址hash**

     DH  目标地址hash**

     通过一个散列函数将一个目标IP地址映射到一台服务器

  1. 源地址hash

     SH  源地址hash**

  1. 组成及相关术语
  1. 组成

     Ipvs----是真正生效实现调度的代码

     Ipsadm----负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真正的服务器

     lvs组成=ipvsipv+sadm

  1. 术语

二.环境准备

主机名

功能

IP地址

Net(ds01)

负载均衡调度器(ds.director,ntp服务)

vip:192.168.2.177

dip:192.168.1.164

Web01

真实web服务器

Rs(rs.realserver)

192.168.2.200

Web02

真实web服务器Rs(rs.realserver)

192.168.2.201

DNS

dns服务

192.168.2.188

Client

192.168.2.180

都要关闭防火墙,关闭selinux,启动网卡  

1.Web01和web02机器

(1)给web01和web02安装nginx

yum -y install nginx

(2)启动

nginx

(3)改变两台机器的nginx页面内容

[root@web01 ~]# echo "web---------01" > /usr/share/nginx/html/index.html

[root@web02 ~]# echo "web----------02" > /usr/share/nginx/html/index.html

2.net(ds01)主机

配置两给网卡和IP地址,一个对外的vip,一个对内的dip,现在主要使用nat网络模式,可以配置桥接模式对外,nat对内,教师机不方便配置桥接模式,所以都是配置的nat模式,但是一定要分清楚哪个是vip,哪个是dip,在物理主机上都要能够ping通。

3.配置Dns服务器

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld.service

关闭selinux

vim /etc/selinux/config

SELINUX=disabled

关闭NetworkManager

systemctl stop NetworkManager

systemctl disable NetworkManager.service

(1)安装bind

[root@dns ~]# yum -y install bind

(2)配置主配置文件

[root@dns ~]# vim /etc/named.conf

options {

        listen-on port 53 { 127.0.0.1; any; };

        listen-on-v6 port 53 { ::1; };

        directory       "/var/named";

        dump-file       "/var/named/data/cache_dump.db";

        statistics-file "/var/named/data/named_stats.txt";

        memstatistics-file "/var/named/data/named_mem_stats.txt";

        recursing-file  "/var/named/data/named.recursing";

        secroots-file   "/var/named/data/named.secroots";

        allow-query     { localhost; any; };

(3)配置zones文件

[root@dns ~]# vim /etc/named.rfc1912.zones  //在最后添加

zone "jj.qd" IN {

        type master;

        file "jj.qd.zone";

        allow-update { none; };

};

cd /var/named/

cp -p named.localhost jj.qd.zone

(4)配置zone文件

vim jj.qd.zone

nat     A       192.168.2.199

ds      A       192.168.2.188

web01   A       192.168.2.200

web02   A       192.168.2.201

named-checkconf /etc/named.conf

named-checkconf /etc/named.rfc1912.zones

named-checkzone jj.qd.zone jj.qd.zone

systemctl start named

systemctl enable named.service

  1. client主机

(1)编辑网卡

vim /etc/resolv.conf进去全删了

vim /etc/sysconfig/network-scripts/ifcfg-ens33 //进去添加

DNS1=192.168.2.188

(2)在client访问

[root@client ~]# ping nat.jj.qd

[root@client ~]# ping ds.jj.qd

[root@client ~]# ping web01.jj.qd

[root@client ~]# ping web02.jj.qd

(3)同步时间

[root@dns ~]# yum -y install ntpdate.x86_64

ntpdate cn.ntp.org.cn

crontab -e

* 2 * * * /usr/sbin/ntpdate cn.ntp.org.cn

(4)下载ntp

yum -y install ntp

(5)启动服务

systemctl start ntpd

systemctl enable ntpd

NAT模式搭建实战

5.ds01服务器配置

(1)安装ipvsadm

[root@ds01 ~]# yum -y install ipvsadm.x86_64

查看所有规则,如果语句配置好规则,重启之后也就没有了

[root@ds01 ~]# ipvsadm -L -n

(2)额外添加一张网卡,选择对外提供服务的桥接模式或者nat模式,选 择桥接模式(ip不同)

(3)配置网卡

[root@ds01 ~]# uuidgen

bdb8b43b-5f66-478c-9401-93aa80333cff

[root@ds01 ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33  /etc/sysconfig/network-scripts/ifcfg-ens36

[root@ds01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36

TYPE=Ethernet

BOOTPROTO=none

NAME=ens36

UUID=5d4dbbba-38b2-41d0-a5be-1d2c30dba649

DEVICE=ens36

ONBOOT=yes

IPADDR=192.168.1.164

[root@ds01 ~]# systemctl restart network

(4)清空以往的规则

[root@ds01 ~]# ipvsadm -C

(5)查看规则

[root@ds01 ~]# ipvsadm -L -n

(6)配置规则

ipvsadm -A -t 192.168.1.164 -s rr     //-A添加虚拟服务,-t添加主机

ipvsadm -Ln

(7)添加规则

ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.200:80 -m

ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.201:80 -m

ipvsadm -Ln

[root@ds01 ~]# ipvsadm -A -t 192.168.1.164:80 -s rr

[root@ds01 ~]# 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.1.164:80 rr

[root@ds01 ~]# ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.200:80 -m

[root@ds01 ~]# ipvsadm -a -t 192.168.1.164:80 -r 192.168.2.201:80 -m

[root@ds01 ~]# 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.1.164:80 rr

  -> 192.168.2.200:80             Masq    1      0          0         

  -> 192.168.2.201:80             Masq    1      0          0         

(8)vim /etc/sysctl.conf

net.ipv4.ip_forward=1   //在最后一行添加

[root@ds01 ~]# sysctl -p  

net.ipv4.ip_forward = 1    //让立即生效-----能够正常显示就可以了

6.Web01主机:

临时修改web01的网关,网管必须指向dip----对内的ip

[root@web01 ~]# route del default

[root@web01 ~]# route add default gw 192.168.2.177

7.Web02主机:

临时修改web02的网关

[root@web02 ~]# route del default

[root@web02 ~]# route add default gw 192.168.2.177

lvs-nat模式的优点是配置简单,缺点是请求和响应都必须经过ds,容易成为性能瓶颈

希望有这样一个模式,请求的时候使用input链进行负载均衡,响应的时候就不要经过ds,直接rs响应客户端

在nat模式,请求vip,就是vip的响应

构想请求vip,接受rip响应,这是不允许lvs-dr模式

8.nat模式脚本

# ds脚本

 #!/bin/bash

 #配置网卡

 echo TYPE="Ethernet" >> /etc/sysconfig/networkscripts/ifcfg-ens36 echo BOOTPROTO="none" >> /etc/sysconfig/networkscripts/ifcfg-ens36 read -p "router name:" router_name

echo NAME='"$rount_name"' >>/etc/sysconfig/networkscripts/ifcfg-ens36 uuidkey=$( uuidgen )

echo UUID='"$uuidkey"' >>/etc/sysconfig/networkscripts/ifcfg-ens36 >> /etc/sysconfig/networkscripts/ifcfg-ens36

echo DEVICE='"$rount_name"' >>/etc/sysconfig/networkscripts/ifcfg-ens36 echo ONBOOT="yes" >> /etc/sysconfig/network-scripts/ifcfgens36

echo IPADDR=192.168.1.164 >>/etc/sysconfig/networkscripts/ifcfg-ens36 systemctl restart network

#安装ipvsadm

yum list installed|grep ipvsadm

if[ $? -ne 0 ];then

yum -y install ipvsadm

fi

#配置规则

read -p "vip:" vip

read -p "port:" port

read -p "rule:" s

ipvsadm -A -t $vip:$port -s $s

# ip forward

echo "net.ipv4.ip_forward=1" >/etc/sysctl.conf

sysctl -p

# rs脚本

#!/bin/bash

read -p "dip:" dip

# 设置网关

route del default

route add defualt gw $dip

三.DR模式

  1. 性能更优,回路不经过ds
  2. ds和rs为了保证用户的响应,都要求配置统一的vip
  3. 由于rs是直接响应client,网关一定不能设置为ds的dip
  4. 对rs的vip进行抑制,让ds的vip接受请求,rs的vip不接受请求

1.ds03上的ens33上挂一个vip192.168.2.102

[root@ds03 ~]# ifconfig ens33:0 192.168.2.102 broadcast 192.168.2.102 netmask 255.255.255.255 up

route add -host 192.168.2.102 dev ens33:0

#192.168.2.101  dip

#192.168.2.102  vip  在rs上的vip和这个vip相同

2.安装ipvsadm

 yum -y install ipvsadm.x86_64

3.设置规则

ipvsadm -C

ipvsadm -A -t 192.168.2.102:80  -s rr

ipvsadm -a -t 192.168.2.102:80 -r 192.168.2.200 -g

ipvsadm -a -t 192.168.2.102:80 -r 192.168.2.201 -g

#rs不在需要指定端口,dr不支持端口映射,vip上是80端口,最终就是80端口

#-m nat -g gateway

4.在rs(web01,web02)上配置

(1)在lo接口上挂载一个vip192.168.2.102

[root@web01 ~]# ifconfig lo:0 192.168.2.102 broadcast 192.168.2.102 netmask 255.255.255.255 up

(2)配置主机路由

[root@web01 ~]# route add -host 192.168.2.102 dev lo:0

[root@web01 ~]# ifconfig

[root@web01 ~]# ip a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

    inet 127.0.0.1/8 scope host lo

       valid_lft forever preferred_lft forever

    inet 192.168.2.102/32 brd 192.168.2.102 scope global lo:0

       valid_lft forever preferred_lft forever

    inet6 ::1/128 scope host

       valid_lft forever preferred_lft forever

2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

    link/ether 00:0c:29:13:76:e2 brd ff:ff:ff:ff:ff:ff

    inet 192.168.2.200/24 brd 192.168.2.255 scope global noprefixroute ens33

       valid_lft forever preferred_lft forever

    inet6 fe80::4e57:f3b5:85eb:4fb1/64 scope link noprefixroute

       valid_lft forever preferred_lft forever

    inet6 fe80::fc42:faf3:7cd0:dbf1/64 scope link tentative noprefixroute dadfailed

       valid_lft forever preferred_lft forever

(3)抑制rs的vip接受请求

[root@web01 ~]# vim arp.sh

ifconfig lo:0 192.168.2.102 broadcast 192.168.2.102 netmask 255.255.255.255 up

route add -host 192.168.2.102 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

[root@web01 ~]# source arp.sh

SIOCADDRT: 文件已存在

[root@web01 ~]# ls

anaconda-ks.cfg  arp.sh

(4)将web01这个里面的arp.sh这个文件传到web02上面

[root@web01 ~]# scp arp.sh root@192.168.2.201:~

[root@web02 ~]# ls

anaconda-ks.cfg  arp.sh

测试使用,查看状态

在浏览器用vip访问

运行web02里面的arp.sh这个脚本

[root@web02 ~]# source arp.sh

在浏览器里面刷新访问  

在ds03上面查看连接状态与信息

[root@ds03 ~]# ipvsadm -Ln --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes

  -> RemoteAddress:Port

TCP  192.168.2.102:80                    8       52        0     6692        0

  -> 192.168.2.200:80                    4       31        0     5080        0

  -> 192.168.2.201:80                    4       21        0     1612        0

5.dr模式的脚本

(1)ds脚本

#!/bin/bash

#在ens33上挂载一个ip地址

read -p "vip:" vip

read -p "mac:" mac

read -p "num" num

ifconfig $mac:$num $vip broadcast $vip netmask

255.255.255.255

# 主机路由

route add -host $vip dev $mac:$num#安装ipvsadm

yum list installed|grep ipvsadm

if [ $? -ne 0 ] ; then

yum -y install ipvsadm

fi

#配置规则(不需要设置ip_forword)

ipvsadm -C

read -p "rule:" rule

read -p "port:" port

ipvsadm -A -t $vip:$port -s $rule

read -p "rip1:" rip1

ipvsadm -a -t $vip:$port -r $rip1 -g

read -p "rip2:" rip2

ipvsadm -a -t $vip:$port -r $rip2 -g

(2)rs脚本

#!/bin/bash

#在ens33上挂载一个ip地址

read -p "vip:" vip

read -p "mac:" mac

read -p "num" num

ifconfig $mac:$num $vip broadcast $vip netmask

255.255.255.255

# 主机路由

route add -host $vip dev $mac:$num

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

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值