架构目的
为了配合集群使用访问稳定高效,提高灾备能力,防止前端只有一台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是否会漂移回主端上。