lvs集群和DR模式

 
Ngnix:
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8、不支持Session的直接保持,但能通过ip_hash来解决。、对Big request header的支持不是很好,
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
10、Nginx还能做Web服务器即Cache功能。
 
HAProxy的特点是:
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache。

集群:多台主机对外提供服务
负载均衡集群
高可用集群
负载均衡:
软件:
Lvs,nginx,haproxy
硬件:
F5
LVS:
1、抗负载能力强 7、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
10种算法
6、配置 复杂,对网络依赖比较大,稳定性很高。
三种模式:
dr路由
nat模式
tun隧道模式
-A:添加一个虚拟服务(添加vip)[相当于负载均衡哪个服务器]
-E:编辑修改一个虚拟服务
-D:删除虚拟服务
-C:清空规则表
-R:从标准输入恢复规则表
--save|-S:将当前内存中的规则保存到标准输出
-a:指定在虚拟服务中添加RS节点 [添加后端的web服务器]
-e:指定在虚拟服务中编辑修改RS节点
-d:指定在虚拟服务中删除RS节点
-L|-l:显示lvs中的规则表 << ipvsadm -L -n --stats
-Z:将计数器清零
-t service-address[:port]:该规则是对tcp协议的请求做调度
-u service-address[:port]:该规则是对udp协议的请求做调度
-f:表示这个请求是经过iptables所标记过的服务类型
-r: 指定真实服务器的地址(remote)
-s scheduler:指定该规则要用的调度算法192.(rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq)
-p [time]:指定在多次时间以内,将相同的客户端调度到相同的后端节点之上,默认时间300s
-w:设置RS节点的权重
-g:指定用DR模式(默认)
-i:指定用tunnel模式
-m:指定用nat模式

DS:net:192.168.126.7
255.255.255.0
192.168.192.2
vmnet2:192.168.100.5
255.255.255.0

RS1:192.168.100.6
255.255.255.0
192.168.100.5
RS2:192.168.100.8
255.255.255.0
192.168.100.5
#挂在本地镜像
mount /dev/cdrom /mnt/
cd /mnt/Packages/
#安装ipvsadm包
rpm -ivh ipvsadm-1.27-7.el7.x86_64.rpm
#开启转发模式
[root@db1 ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@db1 ~]#echo 1 > /proc/sys/net/ipv4/ip_forward
或者
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1


#配置nat模式
╭─root@zxw7 /etc/sysconfig/network-scripts
╰─➤ ipvsadm -A -t 192.168.126.7:80 -s rr
╭─root@zxw7 /etc/sysconfig/network-scripts
╰─➤ ipvsadm -a -t 192.168.126.7:80 -r 192.168.100.6 -m 127 ↵
╭─root@zxw7 /etc/sysconfig/network-scripts
╰─➤ ipvsadm -a -t 192.168.126.7:80 -r 192.168.100.8 -m

#如果想让配置保存下来需要 #查看ipvsadm包的文件位置
[root@db1 ~]# rpm -ql ipvsadm-1.27-7.el7.x86_64
/etc/sysconfig/ipvsadm-config
/usr/lib/systemd/system/ipvsadm.service
/usr/sbin/ipvsadm /usr/sbin/ipvsadm-restore
/usr/sbin/ipvsadm-save /usr/share/doc/ipvsadm-1.27
/usr/share/doc/ipvsadm-1.27/README /usr/share/man/man8/ipvsadm-restore.8.gz
/usr/share/man/man8/ipvsadm-save.8.gz /usr/share/man/man8/ipvsadm.8.gz
#查看ipvsadm.service服务的结构可以看到配置未见在/etc/sysconfig/ipvsadm


[root@db1 ~]# cat /usr/lib/systemd/system/ipvsadm.service
那么我们只需要ipvsadm -S > /etc/sysconfig/ipvsadm就可以把配置文件保存在配置文件中
ipvsadm -R < /etc/sysconfig/ipvsadm就可以从配置文件中恢复到当前配置

 


DR模式

direct_server:192.168.254.17

real_server:192.168.254.18
real_server:192.168.254.19

#vip为虚拟服务ip
vip:192.168.254.250


direct_server:
yum install ipvsadm
老板
direct_server:
ipvsadm -C #清除配置信息


#添加对外提供的服务ip
ipvsadm -A -t 192.168.254.250:80 -s rr #-A为ADD -t为tcp -s rr为设置算法为轮叫算法

#添加2台real_server主机
ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.18:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式
ipvsadm -a -t 192.168.254.250:80 -r 192.168.254.19:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式

#配置网卡的子网口为vip,ip地址为192.168.254.250
ifconfig ens33:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up

#添加路由(访问192.168.254.250都走ens33:0这个网卡)
route add -host 192.168.254.250 dev ens33:0
员工1 | 员工2
real_server:
#在回环地址的子网口上配置服务ip(vip)
ifconfig lo:0 192.168.254.250 broadcast 192.168.254.250 netmask 255.255.255.255 up

#添加路由
route add -host 192.168.254.250 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
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


arp_ignore:定义接收到ARP请求时的响应级别
0:默认,只用本地配置的有响应地址都给予响应
1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
arp_announce:定义将自己的地址向外通告时的级别
0:默认,表示使用配置在任何接口的任何地址向外通告
1:尽量仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告

 


DR模式

direct_server:192.168.126.7
real_server:192.168.126.6
real_server:192.168.126.8

#vip为虚拟服务ip
vip:192.168.126.5

第一步:下载
direct_server:
yum install ipvsadm -y
老板
第二步:清空配置信息
direct_server:
ipvsadm -C #清除配置信息


第三步:添加对外提供的服务ip
ipvsadm -A -t 192.168.126.5:80 -s rr #-A为ADD -t为tcp -s rr为设置算法为轮叫算法
第四步:配置网卡的子网口为vip,ip地址为192.168.126.5
net-tools
ifconfig ens33:0 192.168.126.5 broadcast 192.168.126.5 netmask 255.255.255.255 up

第五步:添加路由(访问192.168.126.5都走ens33:0这个网卡)
route add -host 192.168.126.5 dev ens33:0

─root@zxw7 ~
╰─➤ route -n
╭─root@zxw7 ~
╰─➤ ifconfig ens33:0 down

第六步:添加2台real_server主机
ipvsadm -a -t 192.168.126.5:80 -r 192.168.126.6:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式
ipvsadm -a -t 192.168.126.5:80 -r 192.168.126.8:80 -g #-a为add -t为tcp -r为realserver -g为DR路由模式

员工1 | 员工2
real_server:
#在回环地址的子网口上配置服务ip(vip)
ifconfig lo:0 192.168。126.5 broadcast 192.168.126.5 netmask 255.255.255.255 up

#添加路由
route add -host 192.168.126.5 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
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


arp_ignore:定义接收到ARP请求时的响应级别
0:默认,只用本地配置的有响应地址都给予响应
1:仅仅在目标IP是本地地址,并且是配置在请求进来的接口上的时候才给予响应
(仅在请求的目标地址配置请求到达的接口上的时候,才给予响应)
arp_announce:定义将自己的地址向外通告时的级别
0:默认,表示使用配置在任何接口的任何地址向外通告
1:尽量仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告

╭─root@zxw7 ~
╰─➤ cat server.yaml
- hosts: zxw
remote_user: root
tasks:
- name: yum install net-tools -y
yum: name=net-tools state=latest
- name: ifconfig
command: ifconfig lo:0 192.168.126.5 broadcast 192.168.126.5 netmask 255.255.255.255 up
ignore_errors: yes
- name: route add -host 192.168.126.5 dev lo:0
command: route add -host 192.168.126.5 dev lo:0
ignore_errors: yes
- name: echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
shell: echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
- name: echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
shell: echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
- name: echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
shell: echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
- name: echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
shell: echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
╭─root@zxw7 ~
╰─➤ cat /etc/ansible/hosts

[zxw]
192.168.126.6 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
192.168.126.8 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=123
─root@zxw7 ~
╰─➤ ansible-playbook --syntax-check

原文地址:https://www.cnblogs.com/itzhao/p/11266391.html