18.12 keepalived + LVS
DR模式和NAT模式的区别在于:需要每个rs上都要配置vip,减少对dir的负载(因为最后数据包的传递不经过dir 而是通过rs直接传给用户实现通信);同时可以把LVS搭建在内网中,通过端口映射的方式实现内网和公网的通信,达到节省公网IP资源的目的。
①把NAT模式中的rs网关都修改回*.*.*.2
②在dir上编写lvs_dr脚本: vim /usr/local/sbin/lvs_dr.sh
同样的先开启端口转发,定义ipv,vip,rs1,rs2变量,执行ifdown,ifup的目的是重复执行脚本时无需重复设置IP; ifconfig定义虚拟网卡名vip,route add添加网关,ipv规则中和NAT不一样的在于参数-g(网关),之前是-m伪装
③在rs上也要写脚本 vim /usr/local/sbin/lvs_rs.sh(同理rs2)
④执行脚本(同理rs2)并在windows上访问VIP测试成功
有时候实验效果不明显的原因是访问量不够,缓存,session等因素(当访问来源IP不同,量大时完全可以实现负载均衡)
无法像NAT模式一样在rs上用curl测试的原因是因为rs上本身绑定了VIP,访问的就是本身;在dir上不能访问是因为VIP在rs上都 绑定了,子网掩码和网关都相对特殊,最好的方法是再开一个虚拟机设置成同一个网段。
keepalived +LVS
使用Keepalived的好处:
①由于所有的数据都是通过分发器dir交互实现的,一旦dir宕机,则所有的服务和访问都会终止(由于keepalived可以实现高可用,同时也可以实现负载均衡,防止dir单点故障引起的服务停止,和LVS可以完美结合)
②LVS没有智能性选择的功能,只是通过基本调度算法实现数据的转发,如果某一个rs宕机,它也仍然有可能把数据转发到出故障的机器上,导致访问出问题;keepalived则实现了这一功能:即当某一个rs宕机时,也能保证服务的正常提供;请求分发过来时,keepalived可以检测到后面的某个rs宕机,此时便不会再把请求转发的有问题的rs上
完整架构需要两台服务器(角色为dir)分别安装keepalived软件,目的是实现高可用,但keepalived本身也有负载均衡的功能,所以本次实验可以只安装一台keepalived
keepalived内置了ipvsadm的功能,所以不需要再安装ipvsadm包,也不用编写和执行那个lvs_dir的脚本
具体操作:
①编辑keepalived配置文件 vim /etc/keepalived/keepalived.conf
②由于之前在dir上配置过vip,需要把dir上的ipvsadm规则清空 ipvsadm -C, VIP释放
③重新启动keepalived,dir上的VIP绑定和ipvsadm规则不需要执行(因为keepalived内置了lvs功能),rs上的脚本依然要执行;
④停掉其中一个rs上的nginx,随后恢复;测试keepalived的过滤功能,如下图测试成功
扩展
haproxy+keepalived http://blog.youkuaiyun.com/xrt95050/article/details/40926255
nginx、lvs、haproxy比较 http://www.youkuaiyun.com/article/2014-07-24/2820837
keepalived中自定义脚本 vrrp_script http://my.oschina.net/hncscwc/blog/...