Keepalievd+Nginx/LVS/HAProxy

5 篇文章 0 订阅

一、Keepalievd+Nginx/LVS/HAProxy三者的区别

  至于具体使用哪种组合,我们必须知道每个代理服务器自身的优势,在真实的需求下选择一款代理软件

  [三种代理服务器的对比]https://blog.csdn.net/ck784101777/article/details/100140875

二、Keepalievd+Nginx

Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived可以用来防止服务器单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生,通过配合Nginx可以实现web前端服务的高可用。

Keepalived实现的基础是VRRP协议,Keepalived就是巧用VRRP协议来实现高可用性(HA)的.

VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器IP(一个或多个),而在路由器组内部,如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTER,或者是通过算法选举产生,MASTER实现针对虚拟路由器IP的各种网络功能,如ARP请求,ICMP,以及数据的转发等;其他设备不拥有该IP,状态是BACKUP,除了接收MASTER的VRRP状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP将接管原先MASTER的网络功能。

VRRP协议使用多播数据来传输VRRP数据,VRRP数据使用特殊的虚拟源MAC地址发送数据而不是自身网卡的MAC地址,VRRP运行时只有MASTER路由器定时发送VRRP通告信息,表示MASTER工作正常以及虚拟路由器IP(组),BACKUP只接收VRRP数据,不发送数据,如果一定时间内没有接收到MASTER的通告信息,各BACKUP将宣告自己成为MASTER,发送通告信息,重新进行MASTER选举状态。

Nginx作为代理服务器,使用反向代理技术,以轮询的方式调用web集群,实现负载均衡

 

下面我们模拟一个实验看看Keepalievd+Nginx组合是如何工作的

1.拓扑图

 拓扑图与ip地址的图表如下

服务器名ip地址ip类型
Nginx代理服务器主192.168.4.80VIP
Nginx代理服务器主192.168.2.10DIP
Nginx代理服务器备192.168.4.80VIP
Nginx代理服务器备192.168.2.20DIP
Web服务1192.168.2.41RIP
Web服务2192.168.2.42

RIP

Web服务3192.168.2.43RIP

2.代理服务器安装Nginx

[Nginx的安装]https://blog.csdn.net/ck784101777/article/details/98775059

本例的配置文件如下,修改两个地方,一是在http{} 中的任意一个地方添加一个服务器地址池,二是在http{}中localtion{}下添加一个地址映射规则.这里有两台代理服务器,配置文件是一样的,默认的算法是轮询算法

[Nginx五种算法]https://blog.csdn.net/ck784101777/article/details/100154296


#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    upstream webstreams{
      server 192.168.4.41:80;
      server 192.168.4.42:80;
      server 192.168.4.43:80;
  }    

    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_path http://webstreams;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
       }
            
    }

}

3.代理服务器安装Keepalievd

     需要修改的地方:

           1)将路由id改为本机名 

           2)主服务器为master 优先级100 备服务器backup 优先级50 

           3)vrrp:192.168.4.80

  proxy1:

  1. [root@proxy1 ~]# yum install -y keepalived      //安装
  2. [root@proxy1 ~]# vim /etc/keepalived/keepalived.conf  //修改配置
  3. global_defs {
  4. notification_email {
  5. admin@tarena.com.cn                //设置报警收件人邮箱
  6. }
  7. notification_email_from ka@localhost    //设置发件人
  8. smtp_server 127.0.0.1                //定义邮件服务器
  9. smtp_connect_timeout 30
  10. router_id proxy1                        //设置路由ID号(实验需要修改)
  11. }
  12. vrrp_instance VI_1 {
  13. state MASTER                      //主服务器为MASTER(备服务器需要修改为BACKUP)
  14. interface eth0                    //定义网络接口
  15. virtual_router_id 51                //主备服务器VRID号必须一致
  16. priority 100                 //服务器优先级,优先级高优先获取VIP
  17. advert_int 1
  18. authentication {
  19. auth_type pass
  20. auth_pass 1111                      //主备服务器密码必须一致
  21. }
  22. virtual_ipaddress { //谁是主服务器谁获得该VIP(实验需要修改)
  23. 192.168.4.80
  24. }
  25. }
  26. [root@proxy1 ~]# systemctl start keepalived

proxy2:

  1. [root@proxy1 ~]# yum install -y keepalived      //安装
  2. [root@proxy1 ~]# vim /etc/keepalived/keepalived.conf  //修改配置
  3. global_defs {
  4. notification_email {
  5. admin@tarena.com.cn                //设置报警收件人邮箱
  6. }
  7. notification_email_from ka@localhost    //设置发件人
  8. smtp_server 127.0.0.1                //定义邮件服务器
  9. smtp_connect_timeout 30
  10. router_id proxy2                        //设置路由ID号(实验需要修改)
  11. }
  12. vrrp_instance VI_1 {
  13. state BACKUP                      //主服务器为MASTER(备服务器需要修改为BACKUP)
  14. interface eth0                       //定义网络接口
  15. virtual_router_id 51                //主备服务器VRID号必须一致
  16. priority 50                            //服务器优先级,优先级高优先获取VIP
  17. advert_int 1
  18. authentication {
  19. auth_type pass
  20. auth_pass 1111                      //主备服务器密码必须一致
  21. }
  22. virtual_ipaddress {           //谁是主服务器谁获得该VIP(实验需要修改)
  23. 192.168.4.80
  24. }
  25. }
  26. [root@proxy2 ~]# systemctl start keepalived

4.web服务器

 每台web服务器创建一个用于测试的页面 

  1. [root@web1/ ~]# yum -y install httpd
  2. [root@web1 ~]# echo "This is web1" > /var/www/html/index.html
  3. [root@web1 ~]# systemctl restart httpd
  4. [root@web2/ ~]# yum -y install httpd
  5. [root@web2 ~]# echo "This is web2" > /var/www/html/index.html
  6. [root@web2 ~]# systemctl restart httpd
  7. [root@web3/ ~]# yum -y install httpd
  8. [root@web3 ~]# echo "This is web3" > /var/www/html/index.html
  9. [root@web3 ~]# systemctl restart httpd

5.测试的方式

 使用客户端主机检测

   1)开启两台代理服务器,输入命令curl 192.168.4.80.观察到显示的结果轮询变化

   2)开启代理服务器1关闭代理服务器2,输入命令curl 192.168.4.80.观察到显示的结果轮询变化

           3)关闭两台代理服务器,输入命令curl 192.168.4.80,观察到结果无响应

   4)关闭一台web服务器,关闭web3,观察结果将不轮询web3的内容

 实验证明:

           1)证明了keepalievd的热备效果,即只要非双台代理服务器宕机,都是允许访问网站的

   2)证明了Nginx的反向代理的功能,轮询输出结果,而且带有检查web服务器宕机的效果

 

三、Keepalievd+HAProxy

 [HAProxy的使用]https://blog.csdn.net/ck784101777/article/details/100150846

 如果阅读了上文Keepalievd+Nginx的组合,做Keepalievd+HAProxy其实非常容易,我们只需要安装HAProxy并稍微修改一下配置文件即可.我们保证实验环境一致,除HAProxy的配置外其余的环境与上一个例子一致.

给两台代理服务器安装HAProxy,内容相同

[root@proxy1 ~]# killall nginx                       //关闭nginx

[root@proxy1 ~]# yum -y install haproxy  //安装haproxy

[root@proxy2 ~]# vim /etc/haproxy/haproxy.cfg    //修改haproxy配置文件
global 
log 127.0.0.1 local2 192.168.2.100
chroot /usr/local/haproxy                                  ##haproxy启动路径
pidfile /var/run/haproxy.pid                                ##haproxy的pid存放路径,pid是进程号
maxconn 4000               ##最大连接数,默认4000
user haproxy
group haproxy
daemon                  #创建1个进程进入deamon模式运行
defaults
mode http                 ##默认的模式mode { tcp|http|health }
option dontlognull              ##不记录健康检查的日志信息
option httpclose               ##每次请求完毕后主动关闭http通道
option httplog                ##日志类别http日志格式
option forwardfor              ##后端服务器可以从Http Header中获得客户端ip
option redispatch              ##serverid服务器挂掉后强制定向到其他健康服务器
timeout connect 10000            #如果backend没有指定,默认为10s
timeout client 300000             ##客户端连接超时
timeout server 300000            ##服务器连接超时
maxconn 3000                ##最大连接数
retries 3                  ##3次连接失败就认为服务不可用,也可以通过后面设置
listen stats 0.0.0.0:1080           #监听端口
stats refresh 30s              #统计页面自动刷新时间
stats uri /stats                #统计页面url
stats realm Haproxy Manager         #进入管理解面查看状态信息
stats auth admin:admin           #统计页面用户名和密码设置
 
listen websrv-rewrite 0.0.0.0:80        //监听全网段80端口 0.0.0.0也可以写*
balance roundrobin             #轮叫算法
server web1 192.168.4.41:80 check inter 2000 rise 2 fall 5   
server web2 192.168.4.42:80 check inter 2000 rise 2 fall 5

server web3 192.168.4.43:80 check inter 2000 rise 2 fall 5

 

四、Keepalievd+LVS

 我们要弄清楚Keepalievd与LVS的关系,如图,Keepalievd本身就是一个使用LVS的一个软件,所以它可以使用LVS的功能,也就是说在这里我们用Keepalievd既实现了热备功能也实现了代理功能,具体看下面的例子

[LVS技术]https://blog.csdn.net/ck784101777/article/details/99753041

  与前两种组合不一样,LVS的配置稍微复杂一些,它需要在web服务器上配置虚拟ip地址,并且这个虚拟ip地址是同一个地址

1.拓扑图

服务器名ip地址ip类型
Nginx代理服务器主192.168.4.80VIP
Nginx代理服务器主192.168.2.10DIP
Nginx代理服务器备192.168.4.80VIP
Nginx代理服务器备192.168.2.20DIP
Web服务1192.168.2.41RIP
Web服务2192.168.2.42

RIP

Web服务3192.168.2.43RIP
Web服务1192.168.2.41VIP
Web服务2192.168.2.42

VIP

Web服务3192.168.2.43VIP

 

2.web服务器配置

为三个服务器做相同配置d

注意:这里的子网掩码必须是32(也就是全255),网络地址与IP地址一样,广播地址与IP地址也一样。

  1. [root@web1 ~]# cd /etc/sysconfig/network-scripts/
  2. [root@web1 ~]# cp ifcfg-lo ifcfg-lo:0      //在linux中:0代表虚拟网卡
  3. [root@web1 ~]# vim ifcfg-lo:0
  4. DEVICE=lo:0
  5. IPADDR=192.168.4.15
  6. NETMASK=255.255.255.255
  7. NETWORK=192.168.4.15
  8. BROADCAST=192.168.4.15
  9. ONBOOT=yes
  10. NAME=lo:0

这里因为web1也配置与调度器一样的VIP地址,默认肯定会出现地址冲突。

写入这四行的主要目的就是访问192.168.4.15的数据包,只有调度器会响应,其他主机都不做任何响应。

[为什么要给web服务器配置虚拟ip]https://blog.csdn.net/ck784101777/article/details/99936969

  1. [root@web1 ~]# vim /etc/sysctl.conf
  2. #手动写入如下4行内容
  3. net.ipv4.conf.all.arp_ignore = 1
  4. net.ipv4.conf.lo.arp_ignore = 1
  5. net.ipv4.conf.lo.arp_announce = 2
  6. net.ipv4.conf.all.arp_announce = 2
  7. #当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
  8. #本机不要向外宣告自己的lo回环地址是192.168.4.15

重启网络服务,设置防火墙与SELinux

  1. [root@web1 ~]# systemctl stop NetworkManager
  2. [root@web1 ~]# systemctl disable NetworkManager
  3. [root@web1 ~]# systemctl restart network
  4. [root@web1 ~]# ifconfig
  5. [root@web1 ~]# systemctl stop firewalld
  6. [root@web1 ~]# setenforce 0

配置请求页面是

  1. [root@web1/ ~]# yum -y install httpd
  2. [root@web1 ~]# echo "This is web1" > /var/www/html/index.html

 

3.代理服务器配置

安装keepalived

  1. [root@proxy1 ~]# yum install -y keepalived
  2. [root@proxy1 ~]# systemctl enable keepalived

修改配置文件,proxy1 proxy2修改router_id proxy2 和state为BACKUP,priority 50 即可

  1. [root@proxy1 ~]# vim /etc/keepalived/keepalived.conf
  2. global_defs {
  3. notification_email {
  4. admin@tarena.com.cn                //设置报警收件人邮箱
  5. }
  6. notification_email_from ka@localhost    //设置发件人
  7. smtp_server 127.0.0.1                //定义邮件服务器
  8. smtp_connect_timeout 30
  9. router_id proxy1                        //设置路由ID号(实验需要修改)
  10. }
  11. vrrp_instance VI_1 {
  12. state MASTER                          //主服务器为MASTER
  13. interface eth0                        //定义网络接口
  14. virtual_router_id 51                 //主辅VRID号必须一致
  15. priority 100                     //服务器优先级
  16. advert_int 1
  17. authentication {
  18. auth_type pass
  19. auth_pass 1111                      //主辅服务器密码必须一致
  20. }
  21. virtual_ipaddress { //配置VIP(实验需要修改)
  22. 192.168.4.80
  23. }
  24. }
  25. virtual_server 192.168.4.80 80 {        //设置ipvsadm的VIP规则(实验需要修改)
  26. delay_loop 6
  27. lb_algo rr                  //设置LVS调度算法为RR
  28. lb_kind DR                          //设置LVS的模式为DR(实验需要修改)
  29. #persistence_timeout 50 //(实验需要注释)
  30. #注意这样的作用是保持连接,开启后,客户端在一定时间内始终访问相同服务器
  31. protocol TCP
  32. real_server 192.168.4.41 80 {       //设置后端web服务器真实IP(实验需要修改)
  33. weight 1                                        //设置权重为1
  34. TCP_CHECK {                      //对后台real_server做健康检查(实验需要修改)
  35.     connect_timeout 3
  36.     nb_get_retry 3
  37.     delay_before_retry 3
  38. }
  39. }
  40. real_server 192.168.4.42 80 {                 //设置后端web服务器真实IP(实验需要修改)
  41. weight 1                                         //设置权重为1
  42. TCP_CHECK { //对后台real_server做健康检查(实验需要修改)
  43.     connect_timeout 3
  44.     nb_get_retry 3
  45.     delay_before_retry 3
  46. }
  47. real_server 192.168.4.43 80 {                 //设置后端web服务器真实IP(实验需要修改)
  48. weight 1                                           //设置权重为1
  49. TCP_CHECK {          //对后台real_server做健康检查(实验需要修改)
  50.     connect_timeout 3
  51.     nb_get_retry 3
  52.     delay_before_retry 3
  53. }
  54. }
  55. }
  56. [root@proxy1 ~]# systemctl start keepalived
  57. [root@proxy1 ~]# ip a s #查看VIP配置
  58. [root@proxy1 ~]# iptables -F        //清空防火墙规则

4.测试的方式

 使用客户端主机检测

   1)开启两台代理服务器,输入命令curl 192.168.4.80.观察到显示的结果轮询变化

   2)开启代理服务器1关闭代理服务器2,输入命令curl 192.168.4.80.观察到显示的结果轮询变化

           3)关闭两台代理服务器,输入命令curl 192.168.4.80,观察到结果无响应

   4)关闭一台web服务器,关闭web3,观察结果将不轮询web3的内容

 实验证明:

           1)证明了keepalievd的热备效果,即只要非双台代理服务器宕机,都是允许访问网站的

   2)证明了LVS的反向代理的功能,轮询输出结果,而且带有检查web服务器宕机的效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值