3-4-基于LVS实现4层负载均衡配置和nat模型实战

centos内核支持ipvs,只需在用户空间安装ipvsadm即可,首先应该准备好拓扑环境,了解编写规则的工具用法

yum install -y ipvsadm
rpm -ql ipvsadm---可以看到用到了unit file,也就是脚本(开机启动不启动),ipvsadm不是一项服务,规则会保存到内存中不会永久有效,为什么会用到unitfile呢?因为需要在开机时使用restone重新载入规则

注意:对于集群类服务来说,不建议开机自动启动,需要手动开启,防止及其挂了。我们会有高可用集群服务器,会自动切换到另外一台服务器上。

ipvsadm -h获取它的简要帮助说明文档
ipvsadm命令的选项大写是集群服务、小写是real server

ipvsadm命令:
核心功能:
集群服务管理:增删改
集群服务的RS管理:增删改
查看:
管理集群服务:增删改
增改:
ipvsadm -A|E -t|u|f service-address [-s scheduler][-p [timeout]]
删:
ipvsadm -D -t|u|f service-address
service-address:
-t|u|f:
-t:TCP协议的端口,VIP:TCP_PORT
-u:UDP协议的端口,VIP:UDP_PORT
-f:firewall MARK,是一个数字;

管理集群上的RS:增删改
    增改:
        ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m][-w weight]
    删:
        ipvsadm -d -t|u|f service-address -r server-address
    server-address:
        rip[:port]---和前边的service端口一致可以不写,一般不写(容易出错)
    选项:
        lvs类型:---不能混合使用
            -g:gateway,dr类型
            -i:ipip,tun类型
            -m:masquerade,nat类型---masquerade地址伪装
        -w weight:权重;
    清空定义的所有内容:
        ipvsadm -C
    查看:
        ipvsadm -L|l [options]
            --numberlc,-n:numerlc output of addresses and ports数字格式显示地址和端口,不要反解
            --exact:expand numbers(display exact values)---精确显示计数器的值
            计数器
            --connection,-c:output of current IPVS connections---显示连接状态
            --stats:output of statistics information---统计数据
            --rate:output of rate information---速率数据
    保存和重载:
        ipvsadm -S=ipvsadm-save---注意这里没有空格
        ipvsadm -R=ipvsadm-restore---注意这里没有空格

负载均衡集群设计时需注意的问题:
(1)是否需要会话保持;---web站点需要会话保持,session绑定,session cookie,session server
(2)是否需要共享存储;
共享存储:NAS(NFS和CFS两种),SAN,DS(分布式存储)
数据同步:
课外作业:rsync+ipotify实现数据同步
lvs-nat:
设计要点:
(1)RIP与DIP在同一IP网络,RIP的网关要指向DIP;
(2)支持端口映射;
(3)Directory要打开核心转发功能;
实践作业(博客):负载均衡两个php应用(wordpress,discuzx)---视频中有讲解怎么做
测试:(1)是否需要会话保持(2)是否需要共享存储

lvs-dr:
    dr模型中,各主机上均需要配置VIP,解决地址冲突的方式有三种:
        (1)在前端网关做静态绑定;
        (2)在各RS使用arptables
        (3)在各RS修改内核参数,来限制arp响应和通告的级别;

lvs默认类型是dr,因为dr承载能力最大,因为响应报文不经有directory

lvs模型中必须同步时间,直接输入命令ntpdate 172.16.0.1
视频后边就是配置dr类型的负载均衡lvs了,一个direcotry,两个rs
两个rs先安装几个程序
如果rs中没有仓库,可以从其他主机复制,scp /etc/yum.repos.d/epel.repo 172.16.0.6:/etc/yum.repos.d/
两个rs的网卡类型要改成vmnet1,就是和vs在一个交换机上的意思

rs1:
ifconfig---先查看网卡的ip地址
hostnamectl set-hostname rs1.ilinux.io---修改主机名

先装几个程序
yum install -y nginx telnet-server
然后修改网卡类型为vmnet1,修改ip地址
nmtui---命令行窗口样式的修改ip地址
systemctl restart network---重启网络服务
ifconfig---查看ip地址修改结果
ping 192.168.10.254---测试通不通
编辑默认网页:
vim /user/share/nginx/html/test1.html
systemctl start nginx
ss -tnl---查看nginx服务端口

rs2:
ifconfig---先查看网卡的ip地址
hostnamectl set-hostname rs2.ilinux.io---修改主机名

先装几个程序
yum install -y nginx telnet-server
然后修改网卡类型为vmnet1,修改ip地址
nmtui---命令行窗口样式的修改ip地址
systemctl restart network---重启网络服务
ifconfig---查看ip地址修改结果
ping 192.168.10.254---测试通不通
编辑默认网页:
vim /user/share/nginx/html/test1.html
systemctl start nginx
ss -tnl---查看nginx服务端口

directory:
两个rs配置好nginx后,就可以临时访问一下,看能不能访问到网页。
curl http://192.168.10.11/test1.html
curl http://192.168.10.12/test1.html

yum install -y ipvsadm
ipvsadm -A -t 172.16.0.6:80 -s rr---添加tcp协议vip端口为80的是集群服务,调度方式是轮询
ipvsadm -Ln---查看定义的规则
ipvsadm -a -t 172.16.0.6:80 -r 192.168.10.11 -m---添加rs,类型是伪装地址(nat)
ipvsadm -a -t 172.16.0.6:80 -r 192.168.10.12 -m---添加rs,类型是伪装地址(nat)
ipvsadm -Ln---查看定义的规则
sysctl -w net.ipv4.ip_forward=1---打开核心转发
curl http://172.16.0.6/test1.html---就可以看到轮询效果了
for i in {1..10};do curl http://172.16.0.6/test1.html;done

上述是轮询的配置,下边是加权轮询
先修改权重
ipvsadm -e -t 172。16.0.6:80 -r 192.168.10.11 -m -w 2---修改权重为2
ipvsadm -e -t 172。16.0.6:80 -r 192.168.10.11 -m -w 3---修改权重为3
ipvsadm -Ln---查看规则列表
ipvsadm -Z---清空以前的连接数
ipvsadm -Ln --rate---查看速率数据
ipvsadm -E -t 172.16.0.6:80 -s wrr修改调度算法为加权轮询
让一个服务器不再接收请求有两种方法:1:删除规则2:权重标记为0
ipvsadm -d -t 172.16.0.6:80 -r 192.168.10.12---删除规则
如果两个rs都down了,就没有服务器响应了,可以在directory上装nginx提供web服务,但是平时不提供服务,因为有ipvs直接截获
vim /user/share/nginx/html/index.html
systemctl start nginx
此时访问还是访问不到的(没有rs),但是访问dip确是可以的,我们可以加权
ipvsadm -a -t 172.16.0.6:80 -r 127.0.0.1 -g---必须使用-g类型

下边是sh类型,把来自于同一个ip的请求发往同一个rs
ipvsadm -e -t 172.16.0.6:80 -s sh

如果rs上有两种不同的服务,需要各自定义规则
两个rs部署telnet服务,同时还有web服务
systemctl start telnet.socket
useradd centos ; echo 'mageedu' | passwd --stdin centos---添加一个centos用户,密码是mageedu

ipvsadm -A -t 172.16.0.6:23 -s wlc---默认是wlc
ipvsadm -a -t 172.16.0.6:23 -r 192.168.10.11 -m -w 1
ipvsadm -a -t 172.16.0.6:23 -r 192.168.10.12 -m -w 2

可以把这些规则保存到一个文件中
ipvsadm -S -n > /etc/sysconfig/ipvsadm

转载于:https://blog.51cto.com/13852573/2364127

你可能感兴趣的:(3-4-基于LVS实现4层负载均衡配置和nat模型实战)