keepalived+haproxy服务器负载均衡

文章目录

  • 架构目的
  • haproxy安装
  • keepalived安装
  • 后端访问服务安装
  • 测试
    • 测试VIP是否可以访问
    • 测试VIP是否可以漂移

架构目的

为了配合集群使用访问稳定高效,提高灾备能力,防止前端只有一台LB出现问题后导致后端服务器无法被访问,并且keepalived创建VIP对外访问,增加安全性。

架构
前端两台服务器,安装haproxy和keepalive;
后端有条件的使用2台或多台服务器,安装apache或nginx,我条件有限所以在一台服务器上同时安装apche和nginx提供服务。

haproxy安装

版本没有特意去下载,使用自带安装包安装,两台前端服务器haproxy配置相同。

yum install -y haproxy

安装完成后编辑配置文件

vim /etc/haproxy/haproxy.cfg

global

    log         127.0.0.1 local2

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats


defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    retries                 3
    timeout http-request    10s
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    maxconn                 3000

    stats uri               /admin/stats	##查看haproxy状态码
    monitor-uri             /monitoruri		##可视化监视器
    stats refresh           3s				##监视器刷新时间


frontend  main *:80		##对外端口使用80
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
    acl url_static       path_end       -i .jpg .gif .png .css .js

    use_backend static          if url_static
    default_backend             static


backend static
    balance     roundrobin
    server      web1 172.24.206.89:80 check inter 2000 fall 3	##
    server      web2 172.24.206.89:8080 check inter 2000 fall 3
##balance指定调度算法为轮询(不能用简写的rr)
##server指定后端真实服务器,web1和web2的名称可以任意
##check代表健康检查,inter设定健康检查的时间间隔,fall定义失败次数
##这里因为实验服务器有限所以在一台服务器上安装了nginx和apache使用两个端口

配置编写完成后启动服务

keepalived安装

同样使用软件库内的安装包安装,给前端两台服务器安装。

yum install -y keepalived

编辑配置文件,注意这里配置文件是分主备的,可以一主多备
主端的配置

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict			##如果创建出VIP但是不能访问,记着注释这一项
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER			##主端是MASTER,备端是BACKUP
    interface ens33			##要加VIP的网卡名
    virtual_router_id 51	
    priority 100
    advert_int 1
    authentication {
        auth_type PASS		##验证类型有两种 PASS和HA
        auth_pass 1111		##验证密码,在一个实例中主备密码保持一样
    }
    virtual_ipaddress {
        172.24.206.100/23	##设定VIP,可以多个
    }
}

virtual_server 172.24.206.100 80 {	##设定端口
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 172.24.206.86 80 {	##真实本机的IP和端口
        weight 1
        TCK_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

备端配置文件

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
#   vrrp_strict			##如果创建出VIP但是不能访问,记着注释这一项
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP			##主端是MASTER,备端是BACKUP
    interface ens33			##要加VIP的网卡名
    virtual_router_id 51	
    priority 100
    advert_int 1
    authentication {
        auth_type PASS		##验证类型有两种 PASS和HA
        auth_pass 1111		##验证密码,在一个实例中主备密码保持一样
    }
    virtual_ipaddress {
        172.24.206.100/23
    }
}

virtual_server 172.24.206.100 80 {	
    delay_loop 6
    lb_algo rr
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 172.24.206.87 80 {	##真实本机的IP和端口
        weight 1
        TCK_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

都配置完成后,启动服务,查看是否在主端网卡上添加了VIP

]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:42:b7:d0 brd ff:ff:ff:ff:ff:ff
    inet 172.24.206.86/23 brd 172.24.207.255 scope global noprefixroute dynamic ens33
       valid_lft 6959sec preferred_lft 6959sec
    inet 172.24.206.100/23 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe42:b7d0/64 scope link 
       valid_lft forever preferred_lft forever

后端访问服务安装

后端服务器安装nginx即可,因为我只有一台服务器,所以安装apche使用80端口,安装nginx使用8080端口。
为了测试区别,给默认发布页重写内容,最简单就是一个写入AAAAAAAAAA,一个写入BBBBBBBBBBB。

测试

测试VIP是否可以访问

使用一台其他服务器访问,测试的主机要处于一个网段内,或使用浏览器去访问VIP

[root@localhost ~]# curl 172.24.206.100
AAAAAAAAAAAAAAAAAAAAA
[root@localhost ~]# curl 172.24.206.100
BBBBBBBBBBBBBBBBBBBB
[root@localhost ~]# curl 172.24.206.100
AAAAAAAAAAAAAAAAAAAA
[root@localhost ~]# curl 172.24.206.100
BBBBBBBBBBBBBBBBBBBB

看到这种结果就说明我们haproxy正常运行。

测试VIP是否可以漂移

下来测试keepalived灾备效果。
我们手动关机一台前端的主服务器,查看备端是否接收到VIP。

[root@master ~]# poweroff

[root@backup ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:78:3a:02 brd ff:ff:ff:ff:ff:ff
    inet 172.24.206.87/23 brd 172.24.207.255 scope global noprefixroute dynamic ens33
       valid_lft 3977sec preferred_lft 3977sec
    inet 172.24.206.100/23 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe78:3a02/64 scope link 
       valid_lft forever preferred_lft forever

这样的效果就表示我们搭建成功了,可以在继续测试访问VIP的效果。
开启主端,关闭备端看VIP是否会漂移回主端上。

你可能感兴趣的:(Linux开源服务部署,haproxy,keepalived,nginx,apche)