负载均衡技术的介绍:
Haproxy+Keepalived高可用环境部署梳理(主主和主从模式):
https://www.cnblogs.com/kevingrace/p/5892169.html
Haproxy基础知识 -运维小结
http://www.cnblogs.com/kevingrace/p/6138150.html
HA+F5/LVS(4):实现负载均衡,一般企业使用HA+LVS。银行会使用HA+F5。HA是通过实现LVS调度器的高可用来实现的。
HA(High Available),高可用,高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。通常把正在执行业务的称 为活动节点,而作为活动节点的一个备份的则称为备用节点。当活动节点出现问题,导致正在运行的业务(任务)不能正常运行时,备用节点此时就会侦测到,并立 即接续活动节点来执行业务。从而实现业务的不中断或短暂中断。
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统
可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实现虚拟网络服务的主要技术,指出IP负载均衡技术是在负载调度器的实现技术中效率最高的。在已有的IP负载均衡技术中,主要有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器, 我们称之为VS/NAT技术(Virtual Server via Network Address Translation)。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出了通过IP隧道实现虚拟服务器的方法VS/TUN (Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。VS/NAT、VS/TUN和VS/DR技术是LVS集群中实现的三种IP负载均衡技术。
【1】技术简介
LVS集群采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。为此,在设计时需要考虑系统的透明性、可伸缩性、高可用性和易管理性。
【2】集群采用三层结构
一般来说,LVS集群采用三层结构,其主要组成部分为:
A、负载调度器(load balancer),它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
B、服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
C、共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
【3】调度器
调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合
实验环境:三台虚拟机
负载均衡包loadbalancer,需要修改yum源,
vm1为调度器 vm2 vm3为阿帕奇服务器
一、lvs介绍
三种模式
DR模式:快
NAT:配置简单
TUN:隧道模式
FULLNAT
工具:pvs称之为IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载平衡功能的一种技术
Ipvs具体实现是由ipvsadm这个程序来完成,因此判断一个系统是否具备ipvs功能,只需要察看ipvsadm 程序是否被安装。察看ipvsadm程序最简单的办法就是在任意路径执行命令ipvsadm。
二、lvs的使用---DR模式,要求虚拟和真实地址在同一个网段
1)vm1修改yum源
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/LoadBalancer
enabled=1
查看yum源
yum repolist ##查看多出四个安装包
2)安装并查看帮助
yum install ipvsadm -y ##安装
ipvsadm -l ##查看拥有的ipvsadm,若加-ln为不解析
lsmod ##查看内核
ipvsadm --help ##查看帮助功能
3)添加ipvsadm
ipvsadm -A -t 172.25.85.100:80 -s rr ##设定172.25.85.100这个IP为虚拟服务器,调度模式为论寻
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.2 -g ##绑定第一个主机
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.3 -g ##绑定第二个主机
查看ipvsadm
ipvsadm -l
4)vm1添加虚拟ip
ip addr add 172.25.85.100/24 dev eth0
5)vm2/vm3添加ip,并打开httpd服务
ip addr add 172.25.85.100/32 dev eth0
ip addr show
/etc/init.d/httpd start
6)ipvsadm策略的保存
/etc/init.d/ipvsadm save ##策略保存
vim /etc/sysconfig/ipvsadm ##查看永久保存策略的位置
-A -t 172.25.38.100:80 -s rr
-a -t 172.25.38.100:80 -r 172.25.38.2:80 -g -w 1
-a -t 172.25.38.100:80 -r 172.25.38.3:80 -g -w 1
测试:使用外部主机,访问172.25.85.100
实验结果:两个httpd论寻调度
但是此时,有时候直接可以实现对vm2和vm3的操作
arp -d 172.25.85.100 ##清除缓存
arp -an | grep 100 ##查看缓存
实验结果
curl 172.25.38.100 ###查看结果只实现了对server3的询问
三、实现只对调度机(vm1)的操作
arp:地址解析协议
arptables的介绍:
arptables,linux命令,用于过滤arp包。
基本思路和iptables一样,不过,arptables处理arp协议有关的包,这些包在iptables中并不会处理·arptables可用于灵活的arp管理,如果善于运用的话,不失为一个优秀的arp防火墙.既能防止别的机器对自己进行arp欺骗,又能防止本机病毒或错误程序向其他机器发起arp攻击。
1)实现对vm2的屏蔽
yum install -y arptables_jf ##安装 arptables_jf
arptables -L ##查看策略
arptables -A IN -d 172.25.85.100 -j DROP ##-d 目的,不许从100ip进入
arptables -A OUT -s 172.25.85.100 -j mangle --mangle-ip-s 172.25.85.2 ##-s 源,消息发出的位置
arptables -L
/etc/init.d/arptables_jf save ##保存策略
2)实现对vm3的屏蔽
yum install arptables_jf -y
arptables -A IN -d 172.25.85.100 -j DROP
arptables -A OUT -s 172.25.85.100 -j mangle --mangle-ip-s 172.25.85.3
/etc/init.d/arptables_jf save
测试:清空缓存后,访问172.25.38.100
实验结果:实现论寻,访问的vm1

四、lvs-----TUN隧道模式
1)vm1清空策略,并添加新的策略
ipvsadm -C ##清空策略
ipvsadm -A -t 172.25.85.100:80 -s rr ##添加策略,r论寻
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.2:80 -i ##添加主机vm2,-i模式为隧道
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.3:80 -i ##添加主机vm3
2)vm1添加新的回路
modprobe ipip ##添加tunl0回路
ip addr show ##查看
ip addr del 172.25.85.100/24 dev eth0 ##删除原来的ip
ip addr add 172.25.85.100/24 dev tunl0 ##添加到tunl0上
ip link set up tunl0 ##激活tunl0
ip addr show ##查看结果

3)vm2添加回路,并修改
modprobe ipip
ip addr del 172.25.85.100/32 dev eth0
ip addr add 172.25.85.100/32 dev tunl0
ip link set up tunl0
ip addr show
不让他们反向过滤
sysctl -a | grep rp_filter ##查看
sysctl -w net.ipv4.conf.default.rp_filter=0 ##关闭一系列接口
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -p ##加载
sysctl -a | grep rp_filter ##查看,发现还有接口无法,关闭
vim /etc/sysctl.conf ##进配置文件修改
sysctl -p
sysctl -a | grep rp_filter

4)vm3添加回路,并修改
modprobe ipip
ip addr del 172.25.85.100/32 dev eth0
ip addr add 172.25.85.100/32 dev tunl0
ip link set up tunl0
ip addr show
sysctl -a | grep rp_filter
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -p
sysctl -a | grep rp_filter
vim /etc/sysctl.conf
sysctl -p
sysctl -a | grep rp_filter
测试:外部机器 curl172.25.38.100
结果:实现论寻

五、lvs使用---NAT模式 -m
调度机不仅作了实现lvs的功能,还充当网关,实现路由转发功能
实验环境
server1 两个ip 172.25.85.1(内) 172.25.185.1(外)
server2 172.25.85.2
server3 172.25.85.3
server4 172.25.185.4(外)
1)给server1两个ip,172.25.85.1(内) 172.25.185.1(外)
2)给server添加ipvsadm策略
ipvsadm -A -t 172.25.185.1:80 -s rr
ipvsadm -a -t 172.25.185.1:80 -r 172.25.85.2:80 -m
ipvsadm -a -t 172.25.185.1:80 -r 172.25.85.3:80 -m
ipvsadm -Ln
3)开启动路由转发
echo "1" > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
4)给server2和server3添加网关,并开启httpd服务
route add default gw 172.25.85.1
route -n
/etc/init.d/httpd start
测试:
使用server4 172.25.185.4访问172.25.85.1
实验结果:达到轮询模式
六、lvs的健康检查
当配置号lvs后以后,实现论寻。假设一台服务器荡机以后,访问,回出现如下情况,访问网页有时成功,有时失败。我们需要,健康检查。
1)首先恢复原先的lvs,并荡掉一台服务器
1、vm1机
ipvsadm -C
modprobe -r ipip
ip addr show
ipvsadm -A -t 172.25.85.100:80 -s rr
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.2:80 -g
ipvsadm -a -t 172.25.85.100:80 -r 172.25.85.3:80 -g
ip addr add 172.25.85.100/24 dev eth0
ip addr show
ipvsadm -l
2、vm2机
modprobe -r ipip
ip addr add 172.25.85.100/32 dev eth0
/etc/init.d/httpd stop

3、vm3机
modprobe -r ipip
ip addr add 172.25.85.100/32 dev eth0
测试:发现服务器2无法访问,这再实际当中有很大的问题
2)安装ldirectord
1、vm1配置yum源
vim /etc/yum.repos.d/rhel-source.repo
[HighAvailability]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/HighAvailability
enabled=1
2、下载ldirectord-3.9.5-3.1.x86_64.rpm支持包,安装
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y
3)修改配置文件,开启服务
1、查看配置文件
rpm -qa | grep ldirec ##查询程序
rpm -qc ldirectord-3.9.5-3.1.x86_64 ##查询主配置文件
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm ##查询所有配置文件
2、修改配置文件
cd /etc/ha.d/
ls
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf . ##复制配置文件
vim ldirectord.cf
25 virtual=172.25.85.100:80
26 real=172.25.85.2:80 gate
27 real=172.25.85.3:80 gate
37 #receive="Test Page"
38 #virtualhost=www.x.y.z
3、开启服务
/etc/init.d/ldirectord start
测试
关闭一个服务器后,只访问另外一个服务器
4)修改vm1的apache服务
cd /var/www/html/
ls
rm -rf *
vim index.html
编写
<h1>系统正在维护</h1>
vim /etc/httpd/conf/httpd.conf
136 Listen 80 ###修改端口为80
/etc/init.d/httpd restart
测试
关闭两个服务器后,直接访问调度机的apache
七、lvs的高可用
首先,关闭上一个实验的环境
/etc/init.d/ldirectord stop
chkconfig ldirectord off
ip addr del 172.25.85.100/24 dev eth0 ##删除ip,keepalived会自动添加ip
dG ##vim的命令,删除从当前位置到最后一行。
高可用:通过设计减少系统不能提供服务的时间
如何实现lvs:
lvs的失效一般是,调度器荡机。
实现lvs高可用的方式是,有多台调度器,当一台调度器失效的时候,其他调度器实现。
1)设置一台机器vm4,主机名为server4,ip为172.25.38.4
创建快照,修改ip,主机名
qemu-img create -f qcow2 -b origin.qcow2 vm4.qcow2
配置yum源和vm1相同
vim /etc/yum.repos.d/rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
[LoadBalancer]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/LoadBalancer
enabled=1
[HighAvailability]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.85.250/6.5yumpak/HighAvailability
enabled=1
2)vm1下载keepalived-2.0.6.tar.gz,解压,安装
1、解压
tar zxf keepalived-2.0.6.tar.gz
2、安装安装的支持程序
yum install openssl-devel gcc -y

3、检查环境,编译,安装
cd keepalived-2.0.6
./configure --prefix=/usr/local/keepalived --with-init=SYSV ##SYSV是linux6的 7的为systemd
make && make install
3)添加软连接
cd /usr/local/keepalived/etc/rc.d/init.d/
chmod +x keepalived ##增加执行权限
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
4)编写配置文件
cd /etc/keepalived/
ls
vim keepalived.conf
编写如下
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 172.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict ##必须注释掉
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.25.85.100
}
}
virtual_server 172.25.85.100 80 {
delay_loop 6
lb_algo rr
lb_kind DR
#persistence_timeout 50
protocol TCP
real_server 172.25.85.2 80 {
TCP_CHECK{
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
real_server 172.25.85.3 80 {
TCP_CHECK {
weight 1
connect_timeout 3
retry 3
delay_before_retry 3
}
}
}
5)复制keepalived给vm4
cd /usr/local/
ll
scp -r keepalived root@172.25.85.4:/usr/local/
6)vm4添加连接文件
cd /usr/local/keepalived/
ln -s /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/keepalived/etc/keepalived/ /etc/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/
7)vm4配置文件的修改
cd /etc/keepalived/
vim keepalived.conf
修改如下
18 state BACKUP ##设为备用
21 priority 50 ##优先级设为50,主的是100
8)开启服务vm1,vm4的服务
/etc/init.d/keepalived start
测试:
查看vm1的ip地址,发现多了虚拟网络,外界机器,访问虚拟ip实现论寻。
关闭vm1的keepalived,vm4的ip添加了虚拟ip,实现调度机的功能,外界访问还是可以满足论寻。
/etc/init.d/keepalived stop