1,配置haproxy负载平衡集群

1.1 问题

准备三台linux服务器,两台做web服务器,一台安装haproxy,实现功能如下:

客户端访问haproxy,haproxy分发请求到后端real server

要求haproxy根据cookie为客户端分配固定后端服务器

开启haproxy监控页面,及时查看调度器状态

设置haproxy为开机自启

1.2方案

使用3太虚拟机,1台作为haproxy调度器,2台作为real server,客户机作为物理机,拓扑图如下

haproxy,keepalive热备,keepalive+lvs_web服务器

1.3步骤

步骤1:配置后端web服务器,关闭防火墙,selinux

1,配置两台web服务器网络参数,

haproxy,keepalive热备,keepalive+lvs_服务器_02

2,设置web服务

haproxy,keepalive热备,keepalive+lvs_服务器_03

步骤2:部署proxy服务器

1,配置网络,安装软件

haproxy,keepalive热备,keepalive+lvs_web服务器_04

[root@haproxy ~]# echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf   #开启路由转发

[root@haproxy ~]# vim /etc/sysctl.conf

[root@haproxy ~]# sysctl -p

net.ipv4.ip_forward = 1

[root@haproxy ~]# yum -y install haproxy

2,修改配置文件

  1. [root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
  2. global
  3. log 127.0.0.1 local2 ###[err warning info debug]
  4. chroot /usr/local/haproxy
  5. pidfile /var/run/haproxy.pid ###haproxy的pid存放路径
  6. maxconn 4000 ###最大连接数,默认4000
  7. user haproxy
  8. group haproxy
  9. daemon ###创建1个进程进入deamon模式运行
  10. defaults
  11. mode http ###默认的模式mode { tcp|http|health } log global ###采用全局定义的日志
  12. option dontlognull ###不记录健康检查的日志信息
  13. option httpclose ###每次请求完毕后主动关闭http通道
  14. option httplog ###日志类别http日志格式
  15. option forwardfor ###后端服务器可以从Http Header中获得客户端ip
  16. option redispatch ###serverid服务器挂掉后强制定向到其他健康服务器
  17. timeout connect 10000 #如果backend没有指定,默认为10s
  18. timeout client 300000 ###客户端连接超时
  19. timeout server 300000 ###服务器连接超时
  20. maxconn 60000 ###最大连接数
  21. retries 3 ###3次连接失败就认为服务不可用,也可以通过后面设置
  22. listen stats
  23. bind 0.0.0.0:1080 #监听端口
  24. stats refresh 30s #统计页面自动刷新时间
  25. uri /stats #统计页面url
  26. stats realm Haproxy Manager #统计页面密码框上提示文本
  27. stats auth admin:admin #统计页面用户名和密码设置
  28. #stats hide-version #隐藏统计页面上HAProxy的版本信息
  29. listen websrv-rewrite 0.0.0.0:80
  30. cookie SERVERID rewrite
  31. balance roundrobin
  32. server web1 192.168.20.101:80 cookie \
  33. app1inst1 check inter 2000 rise 2 fall 5
  34. server web2 192.168.20.102:80 cookie \
  35. app1inst2 check inter 2000 rise 2 fall 5

3,启动服务并设置开机启动

  1. [root@haproxy ~]# systemctl start haproxy
  2. [root@haproxy ~]# systemctl enable haproxy

步骤3:客户端认证

可以直接使用本地访问,每次刷新页面获取后台服务器内容

haproxy,keepalive热备,keepalive+lvs_客户端_05

haproxy,keepalive热备,keepalive+lvs_客户端_06

2,keepalived高可用服务器

2.1 问题

准备3台linux服务器,两台做web服务器,并部署keepalived高可用软件,一台做为客户端主机,实现如下功能:

1,使用keepalived实现web高可用

2,web服务器ip地址分别为192.168.81.129和192.168.18.130

3,web服务器的漂移vip为192.168.18.135

4,客户通过访问wip地址访问web页面

2.2 方案

使用3台虚拟机,2台作为web服务器,并部署keepalived,1台作为客户端,拓扑如下:

haproxy,keepalive热备,keepalive+lvs_服务器_07

步骤一:接着使用实验一的两台web服务器,网络和web服务已完成

步骤二:安装keepalived软件,两台web做同样的操作

[root@web1 ~]# yum install -y keepalived

[root@web2 ~]# yum install -y keepalived

步骤三:部署keepalived服务器

1,修改web1服务器keepalived配置文件

  1. [root@web1 ~]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. notification_email {
  4. admin@test.com.cn                //设置报警收件人邮箱
  5. }
  6. notification_email_from ka@localhost    //设置发件人
  7. smtp_server 127.0.0.1                //定义邮件服务器
  8. smtp_connect_timeout 30
  9. router_id web1                        //设置路由ID号
  10. }
  11. vrrp_instance VI_1 {
  12. state MASTER                          //主服务器为MASTER
  13. interface ens33                        //定义网络接口
  14. virtual_router_id 50                    //主辅VRID号必须一致
  15. priority 100                     //服务器优先级
  16. advert_int 1
  17. authentication {
  18. auth_type pass
  19. auth_pass 1111                      //主辅服务器密码必须一致
  20. }
  21. virtual_ipaddress { 192.168.81.135/24 }
  22. }

2,修改web2服务器keepalived配置文件

  1. [root@web2 ~]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. notification_email {
  4. admin@test.com.cn                //设置报警收件人邮箱
  5. }
  6. notification_email_from ka@localhost    //设置发件人
  7. smtp_server 127.0.0.1                //定义邮件服务器
  8. smtp_connect_timeout 30
  9. router_id web2                        //设置路由ID号
  10. }
  11. vrrp_instance VI_1 {
  12. state BACKUP                          //从服务器为SLAVE
  13. interface ens33                        //定义网络接口
  14. virtual_router_id 50                    //主辅VRID号必须一致
  15. priority 50                         //服务器优先级
  16. advert_int 1
  17. authentication {
  18. auth_type pass
  19. auth_pass 1111                      //主辅服务器密码必须一致
  20. }
  21. virtual_ipaddress { 192.168.81.135/24 }
  22. }

3,启动服务

  1. [root@web1 ~]# systemctl start keepalived
  2. [root@web2 ~]# systemctl start keepalived

4,步骤四 测试

2) 客户端访问

客户端使用curl命令连接http://192.168.81.135,查看Web页面;关闭Web1服务器的keepvalived服务,客户端再次访问http://192.168.81.135,验证是否可以正常访问服务。

3, keepalived+lvs服务器

3.1 问题

使用keepalived为lvs调度器提供高可用功能,防止调度单点故障,为用户提供web服务

 路由器对外公网ip为 192.168.25.138

 路由器内网ip为192.168.81.128

路由器需要设置SNAT及DNAT功能

lvs1调度器真实ip地址为192.168.81.131

lvs2调度器真实ip地址为192.168.81.132

服务器IP地址为 192.168.81.135

真实web服务器地址为192.168.81.129 和192.168.81.130

使用加权轮询调度算法,设置真实服务器权重

3.2 方案

使用5台虚拟机,1台做为linux路由器,2台做lvs调度器,2台做realServer ,物理机做客户端,拓扑如下:

haproxy,keepalive热备,keepalive+lvs_服务器_08

3.3 步骤

步骤1:配置网络环境  沿用以上实验,先将两台web的keepalived服务停止

haproxy,keepalive热备,keepalive+lvs_客户端_09

1,设置web服务器网络参数

子网卡:子网卡在这里并不是实际上的网络接口设备,但是可以作为网络接口在系统中出现,如eth0:1、eth1:2这种网络接口。它们必须要依赖于物理网卡,虽然可以与物理网卡的网络接口同时在系统中存在并使用不同的IP地址,而且也拥有它们自己的网络接口配置文件。但是当所依赖的物理网卡不启用时(Down状态)这些子网卡也将一同不能工作。

haproxy,keepalive热备,keepalive+lvs_客户端_10

修改内核参数,向sysctl.conf文件添加以下内容

haproxy,keepalive热备,keepalive+lvs_客户端_11

arp_ignore定义了对目标地址为本机ip的arp询问的不同应答模式

arp_announce对网络接口(网卡)上发出的arp请求包中的源ip地址做出相应的限制;主机会根据这个参数值的不同选择使用ip数据包的源ip或当前接口卡的ip地址作为arp请求包的源ip地址。

0不开启源地址校验。

1开启严格的反向路径校验。对每个进来的数据包校验其反向路径是否是最佳路径接收报文的网卡和回数据的网卡是否是同一张网卡。如果反向路径不是最佳路径则直接丢弃该数据包。

2开启松散的反向路径校验。对每个进来的数据包校验其源地址是否可达即反向路径是否能通通过任意网卡如果反向路径不通则直接丢弃该数据包

2,web服务沿用实验2的设置

3,设置lvs调度器网络参数

haproxy,keepalive热备,keepalive+lvs_服务器_12

4,设置路由器网络参数

haproxy,keepalive热备,keepalive+lvs_客户端_13

5,开启路由转发功能

haproxy,keepalive热备,keepalive+lvs_服务器_14

步骤二:调度器安装keepalived与ipvsadm软件

ipvsadm命令是lvs在应用层的管理命令,我们可以通过这个命令去管理lvs的配置。

ipvsadm是一个工具,同时它也是一条命令,用于管理lvs的策略规则。

ipvsadm是linux下的LVS虚拟服务器的管理工具,LVS工作于内核空间,而ipvsadm则提供了用户空间的接口;

[root@lvs1 ~]# yum -y install keepalived ipvsadm

[root@lvs1 ~]# systemctl start keepalived

[root@lvs2 ~]# yum -y install keepalived ipvsadm

[root@lvs2 ~]# systemctl start keepalived

步骤三:部署keepalived实现LVS-DR模式调度器的高可用

1,lvs1调度器设置keepalived,并启动服务

  1. [root@lvs1 ~]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. notification_email {
  4. admin@test.com.cn                //设置报警收件人邮箱
  5. }
  6. notification_email_from ka@localhost    //设置发件人
  7. smtp_server 127.0.0.1                //定义邮件服务器
  8. smtp_connect_timeout 30
  9. router_id lvs1                        //设置路由ID号
  10. }
  11. vrrp_instance VI_1 {
  12. state MASTER                          //主服务器为MASTER
  13. interface ens33                        //定义网络接口
  14. virtual_router_id 50                    //主辅VRID号必须一致
  15. priority 100                     //服务器优先级
  16. advert_int 1
  17. authentication {
  18. auth_type pass
  19. auth_pass 1111                      //主辅服务器密码必须一致
  20. }
  21. virtual_ipaddress { 192.168.81.135/24 }
  22. }
  23. virtual_server 192.168.81.135 80 {      //设置VIP为192.168.81.135
  24. delay_loop 6
  25. lb_algo wrr                 //设置LVS调度算法为WRR
  26. lb_kind DR                          //设置LVS的模式为DR
  27. persistence_timeout 1
  28. protocol TCP
  29. real_server 192.168.81.129 80 {
  30. weight 1                  //设置权重为1
  31. TCP_CHECK {
  32.     connect_timeout 3
  33.     nb_get_retry 3
  34.     delay_before_retry 3
  35. }
  36. }
  37. real_server 192.168.81.130 80 {
  38. weight 2                  //设置权重为2
  39. TCP_CHECK {
  40.     connect_timeout 3
  41.     nb_get_retry 3
  42.     delay_before_retry 3
  43. }
  44. }
  45. }
  46. [root@lvs1 ~]# systemctl start keepalived
  47. [root@lvs1 ~]# ipvsadm -Ln

2,lvs2调度器设置keepalived

  1. [root@lvs2 ~]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. notification_email {
  4. admin@test.com.cn                //设置报警收件人邮箱
  5. }
  6. notification_email_from ka@localhost    //设置发件人
  7. smtp_server 127.0.0.1                //定义邮件服务器
  8. smtp_connect_timeout 30
  9. router_id lvs2                        //设置路由ID号
  10. }
  11. vrrp_instance VI_1 {
  12. state BACKUP                          //从服务器为SLAVE
  13. interface ens33                        //定义网络接口
  14. virtual_router_id 50                    //主辅VRID号必须一致
  15. priority 50                     //服务器优先级
  16. advert_int 1
  17. authentication {
  18. auth_type pass
  19. auth_pass 1111                      //主辅服务器密码必须一致
  20. }
  21. virtual_ipaddress { 192.168.81.135/24 }
  22. }
  23. virtual_server 192.168.81.135 80 {      //设置VIP为192.168.81.135
  24. delay_loop 6
  25. lb_algo wrr                 //设置LVS调度算法为RR
  26. lb_kind DR                          //设置LVS的模式为DR
  27. persistence_timeout 1
  28. protocol TCP
  29. real_server 192.168.81.129 80 {
  30. weight 1                  //设置权重为1
  31. TCP_CHECK {
  32.     connect_timeout 3
  33.     nb_get_retry 3
  34.     delay_before_retry 3
  35. }
  36. }
  37. real_server 192.168.81.130 80 {
  38. weight 2                  //设置权重为2
  39. TCP_CHECK {
  40.     connect_timeout 3
  41.     nb_get_retry 3
  42.     delay_before_retry 3
  43. }
  44. }
  45. }
  46. [root@lvs2 ~]# systemctl start keepalived
  47. [root@lvs2 ~]# ipvsadm -Ln

步骤四:客户端测试

客户端使用curl命令反复链接http://192.168.25.138,查看访问的页面是否会轮询到不同的后端真实服务器。