在搭建HAProxy+Keepalived 高可用负载均衡之前先来简单了解一下HAProxy和keepalived的原理。
HAProxy
HAProxy是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
keepalived
keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障。keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。Keepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
HAProxy+Keepalived 高可用负载均衡工作示意图:
对上图做个说明,前端的haproxy负责代理后端的web服务器,可以防止后端web服务器暴露在网络上,相对的提高了后端web服务器的安全性,keepalived负责热备份,当主服务器由于故障宕机后,从服务器可以代替其工作,从而保证了服务的不间断运行。
配置后端web服务(以Nginx为例)
以web_server1为例,web_server2同web_server1:
安装Nginx服务,并启动
yum -y install epel-release # 安装Nginx源
yum -y install nginx # 安装Nginx
systemctl start nginx # 启动Nginx服务
systemctl enabled nginx #开机自启动
创建测试页面
mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html_bak #备份默认页面
vim /usr/share/nginx/html/index.html
This is Server 111111
关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
验证
配置HAProxy
安装haproxy
yum -y install haproxy
haproxy配置
配置文件路径为/etc/haproxy/haproxy.cfg,配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_bak #先备份原配置文件
vim /etc/haproxy/haproxy.cfg
# 全局配置
global
log 127.0.0.1 local3 info # 定义全局性的日志
chroot /var/lib/haproxy # 修改haproxy的工作目录
maxconn 4000 # haproxy接受的最大并发数
daemon # 用守护进程的方式运行haproxy
user haproxy # 运行haproxy的用户
group haproxy # 运行haproxy的组
# 代理设置
defaults # 用于提供默认参数的配置
log global # 日志使用global的全局定义
mode http # 模式http
option httplog # 记录http请求
retries 3 # 重试3次
timeout connect 5000 # 转发后端的超时时间
timeout client 50000 # 客户端超时时间
timeout server 50000 # 等待服务器响应的超时时间
listen stats # 监听统计状态
mode http
bind 0.0.0.0:8080 # 绑定地址端口
stats enable # 启用统计报告
stats uri /stats # 定义访问统计页面路径
stats realm Haprroxy\ Statistics
stats auth admin:admin # 定义认证用户账号密码
listen nginxserver # 监听的服务名称
bind *:80 # 绑定的地址和端口
mode http # 定义运行的模式
default_backend nginx # 设定代理对应的后端
backend nginx # 代理后端服务器的配置
balance roundrobin # 定义轮训算法
option httpchk GET /index.html # 设定检查方式
server nginx1 192.168.1.10:80 check inter 2000 rise 3 fall 3 weight 30 # 定义轮训后端以及代理健康检查
server nginx2 192.168.1.20:80 check inter 2000 rise 3 fall 3 weight 30
启动服务
systemctl restart haproxy
systemctl enable haproxy
关闭防火墙和selinux
systemctl stop firewallld
setenforce 0
验证haproxy代理
说明:haproxy在两台服务器上的配置相同
配置keepalived
安装keepalived,并启动服务
yum -y install keepalived
systemctl start keepalived
systemctl enable keepalived
主服务器的配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak #备份原配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_TEST
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_type 1234
}
virtual_ipaddress {
192.168.1.100
}
}
从服务器的配置
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak #备份原配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_TEST
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 99
advert_int 1
authentication {
auth_type PASS
auth_type 1234
}
virtual_ipaddress {
192.168.1.100
}
}
重启服务
systemctl restart keepalived
关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
验证keepalived服务
说明:在主服务器上能看到虚拟IP就说明keepalived已经配置成功了
以上所有的配置都是单独的,下面对haproxy和keepalived做一个结合,从而实现高可用负载均衡。想要haproxy和keepalived结合,只需在haproxy配置文件中将监听地址设置成keepalived设置的虚拟IP地址即可,具体配置如下:
vim /etc/haproxy/haproxy.cfg
......
# 修改监听地址即可
listen nginxserver
bind 192.168.1.100:80 # 主从服务器配置相同
mode http
default_backend nginx
验证HAProxy和keepalived
关掉主服务器上的keepalived服务验证。
systemctl stop keepalived