一、安装环境
1.软件版本
HAProxy:1.5.18
Keepalived:1.3.5
Nginx:1.12.2
PHP:7.2
系统版本:CentOS 7.4
2.IP分配与架构图
3.安装软件
1>关闭所有服务器的firewall与SELinux
~ ]# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
~ ]# systemctl disable firewalld
~ ]# systemctl stop firewalld
~ ]# reboot
2>在各服务器上安装所需软件,这里都是yum安装,详细安装步骤略过。
4.软件配置
1>HAProxy配置
要实现动静分离需在HAProxy中做ACL规则匹配。具体配置详情如下,两台HAProxy的配置相同:
global
log 127.0.0.1 local2 chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn
user haproxy
group haproxy
daemon stats socket /var/lib/haproxy/stats defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/
option redispatch
retries
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn frontend myweb
bind *:
compression algo gzip #选择压缩方式,可优化网页访问速度
compression type text/html text/plain application/x-javascript text/css application/xml #定义要压缩的文件类型
errorloc http://192.168.29.101:9999/errorloc/403.html #错误页位置
rspidel ^Server:.* #删除报头文件中以Server开头的项,安全优化项,因为Server开头的一般是私密信息,如后端服务器的Nginx版本等
acl static path_end .png .jepg .jpg .bmp .html .htm .jsp #ACL规则定义,匹配以.png...结尾的请求并命名为static
use_backend staticsv if static #如果匹配ACL规则static则交由后端服务器组staticsv处理
acl dynamic path_end .php #ACL规则定义,匹配以.php结尾的请求并命名为dynamic
use_backend dynamicsv if dynamic #如果匹配ACL规则dynamic则交由后端服务器组dynamicsv处理
default_backend dynamicsv #默认后端服务器组 backend staticsv
balance roundrobin #调度算法
cookie server insert nocache
server staticsv1 192.168.29.103: check cookie static1
server staticsv2 192.168.29.104: check cookie static2 backend dynamicsv
balance roundrobin
cookie server insert nocache
server dynamicsv1 192.168.29.105: check cookie dynamic1
server dynamicsv2 192.168.29.106: check cookie dynamic2 listen stats #定义状态页
bind *:
acl sta src 192.168.29.1
block if ! sta
http-request allow if sta
stats enable
stats uri /myhaproxy?admin
stats realm "Hello World"
stats auth admin:admin
2>配置Keepalived
在192.168.29.101上的配置如下:
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout
router_id n1
vrrp_mcast_group4 224.1.101.18
}
vrrp_script chk_hapx {
script "killall -0 haproxy && exit 0 || exit 1" #这里要指出的是,killall -0 表示检查是否有进程存在,若存在返回值0,若不存在返回1,表示haproxy没有正常工作,并且返回1时往下执行操作。
weight -
interval
fall
rise
} vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.29.88/ dev ens33 label ens33:
}
track_script {
chk_hapx
}
}
在192.168.29.102上的配置如下(与101的区别已用黄颜色标注):
global_defs {
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout
router_id n1
vrrp_mcast_group4 224.1.101.18
}
vrrp_script chk_hapx {
script "killall -0 haproxy && exit 0 || exit 1"
weight -
interval
fall
rise
} vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id
priority
advert_int
authentication {
auth_type PASS
auth_pass
}
virtual_ipaddress {
192.168.29.88/ dev ens33 label ens33:
}
track_script {
chk_hapx
}
}
关于keepalived的原理与应用可以阅读这篇博客←点击
5.配置静态服务器组与动态服务器组
在192.168.29.103和192.168.29.104上安装nginx服务
在192.168.29.105和192.168.29.106上安装nginx+php服务
6.配置MariaDB与NFS
配置过程在之前的博客已有详细描述了这里不再赘述:
MariaDB配置点击→这里
NFS配置点击→这里
以上都配置完成后一个简易的基于keepalived+HAProxy的动静分离就部署完成了,然后就能所需的网页资源了。
虽然架构很简单,但能帮助我们理解工作逻辑,和熟悉配置详情。