Keepalived+Haproxy实现高可用负载综合实验
之前做过一个keepalived+Haproxy实现高可用负载的实验,只是在同一局域网下做的,这次是在之前的基础上加了一个外网,客户机利用DHCP服务获取地址,用DNS服务器用来做域名解析,最后实现外网客户机通过域名访问远端web服务器。如果想了解单独的keepalived+Haproxy的实验可参考https://blog.csdn.net/weixin_42342456/article/details/86356310
实验拓扑:
实验要求:
客户机从DHCP服务器获取IP地址、网关、DNS服务器地址通过DNS服务器将域名解析到keepalived的VIP上keepalived通过haproxy或lvs代理发送给后端完成响应的请求
实验步骤:
1.配置DNS服务器和DHCP服务器
DNS服务器:安装Bind软件
yum -y install bind*
配置DNS正向解析,具体步骤如下:配置主配置文件
vim /etc/named.conf #修改主配置文件中的如下两行listen-on port 53 { any; }; #监听所有地址的53端口allow-query { any; }; #允许所有人请求
编辑区域配置文件
vim /etc/named.rfc1912.zones #向区域配置文件最后面添加如下内容zone "test.com" IN { type master; file "test.com.zone"; allow-transfer { none; };};
编辑数据配置文件
cd /var/named/cp -a named.localhost test.com.zonevim test.com.zone$TTL 1D@ IN SOA test.com. admin.test.com. (200 1H 15M 1W 1D)@ IN NS www.test.com.www IN A 172.16.1.100
重启服务,验证正向解析
systemctl restart namedsystemctl enable named验证:[root@localhost ~]# nslookup> www.test.comServer:172.16.1.10Address:172.16.1.10#53Name:www.test.comAddress: 172.16.1.100
如果域名能被正常解析,就说明DNS服务没有问题了。提示: 如果修改完配置文件后,重启服务无法启动,可使用named-checkconf
命令和named-checkzone
命令,分别检查主配置文件与数据配置文件中语法或参数的错误。如果想了解更多有关DNS服务的知识,请参考:https://blog.csdn.net/weixin_42342456/article/details/85164189
DHCP服务器:安装DHCP服务
yum -y install dhcp
配置DHCP
vim /etc/dhcp/dhcpd.confddns-update-style none;ignore client-updates;default-lease-time 259200;max-lease-time 518400;option domain-name-servers 172.16.1.10; #DNS服务器地址subnet 172.16.1.0 netmask 255.255.255.0 { #宣告的网段 range 172.16.1.20 172.16.1.101; #范围 option subnet-mask 255.255.255.0; # option routers 172.16.1.2;}
重启DHCP服务
systemctl restart dhcpdsystemctl enable dhcpd
在客户机上验证DHCP服务是否生效在验证之前先将虚拟机的DHCP关掉,如下:验证:客户机已成功获取到DHCP配置中分发范围中的地址,就说明DHCP服务配置已经没有问题了。如果想了解更多有关DHCP服务的内容,请参考:https://blog.csdn.net/weixin_42342456/article/details/85029090
2.配置后端web服务器
web_server1:安装nginx服务
yum -y install epel-release # 安装Nginx源yum -y install nginx #安装Nginx
启动Nginx服务
systemctl start nginx #启动服务systemctl enable 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 1111111 #测试页面内容
关闭防火墙和selinux(仅是为了方便实验验证,生产环境需要修改策略)
# 临时关闭systemctl stop firewalldsetenforce 0
测试web_sever1 Nginx服务web_server2的配置和web_server1的配置一样,只需将测试页面内容修改一下即可,这儿省去去配置过程,直接上测试结果图。出现上面的测试结果就说明web服务器配置的已经没有问题了。
3.配置前端keepalived+haproxy
安装keepalived和haproxy(在主从服务器上分别安装)
yum -y install keepalivedyum -y install haproxy
启动服务(在主从服务器上执行)
systemctl start keepalivedsystemctl start haproxysystemctl enable keepalivedsystemctl enable haproxy
关闭防火墙和selinux(在主从服务器上执行)
systemctl stop firewalldsetenforce 0
配置keepalived(在主从服务器上配置)主服务器的配置:
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak # 备份原配置文件vim /etc/keepalived/keepalived.confglobal_defs { router_id LVS_TEST}vrrp_instance VI_1 { state MASTER interface ens37 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_type 1234 } virtual_ipaddress { 172.16.1.100 }}
从服务器的配置:
mv /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak # 备份原配置文件vim /etc/keepalived/keepalived.confglobal_defs { router_id LVS_TEST}vrrp_instance VI_1 { state BACKUP interface ens37 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_type 1234 } virtual_ipaddress { 172.16.1.100 }}
说明: 虚拟IP要设置成ens37网卡同一网段的地址配置完保存后,重启keepalived服务(主从)
systemctl restart keepalived
验证keepalived的配置是否成功在主服务器上没有问题后,关掉主服务器上的keepalived服务,再在从服务器上查看
systemctl stop keepalived
通过查看发现虚拟IP成功的漂到从服务器上了,就说明keepalived服务的配置已经没有问题了。
配置haproxy配置主服务器:
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_bak #备份原配置文件vim /etc/haproxy/haproxy.cfgglobal log 127.0.0.1 local3 info chroot /var/lib/haproxy maxconn 4000 user haproxy group haproxy daemondefaults log global mode http option httplog retries 3 timeout connect 5000 timeout client 50000 timeout server 50000listen stats mode http bind 0.0.0.0:8080 stats enable stats uri /stats stats realm HaproxyStatistics stats auth admin:adminlisten nginxserver bind 172.16.1.100:80 #监听虚拟IP mode http default_backend nginxbackend 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
配置从服务器(有两种方法):方法1:
只需将监听的地址改为
bind *:80
,如果不设置成监听所有的话,配置完之后,从服务器上的haproxy服务无法启动,这是因为在主服务器keepalived服务运行的情况下,从服务器没有虚拟IP地址,而从服务器上的haproxy不知到这个虚拟IP地址,所以会出现无法启动的情况。
方法二:
将主服务器上haproxy的配置原封不动的复制过来,保存后,先将主服务器的keepalived服务关掉,再启用动从服务器上的haproxy服务,启动成功后,再将主服务器上的keepalived服务启动,这是因为主服务器上的keepalived运行时,从服务器上没有虚拟IP地址,从服务器上的haproxy服务监听的地址它不知道,所以会起不来,必须先让从服务器知道这个地址。)
配置完后,重启服务(主从)
systemctl restart haproxy
验证haproxy服务是否成功通过验证发现可以代理发送给后端完成响应的请求,说明haproxy配置成功了。
实验验证
在以上服务都配置没有问题后,在客户机上验证,如下:为了验证备份的是否成功,关掉主服务器上的keepalived服务,然后再验证:通过使用域名进行验证,发现可以成功的访问到后端web服务器上,就说明整个实验已经没有问题了。
以上就上有关Keepalived+Haproxy实现高可用负载综合实验的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。