Keepalived+Haproxy实现高可用负载综合实验

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.zone
vim 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 named
systemctl enable named
验证:
[root@localhost ~]# nslookup
> www.test.com
Server:		172.16.1.10
Address:	172.16.1.10#53

Name:	www.test.com
Address: 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.conf
ddns-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 dhcpd
systemctl 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 firewalld
setenforce 0

测试web_sever1 Nginx服务
在这里插入图片描述
web_server2的配置和web_server1的配置一样,只需将测试页面内容修改一下即可,这儿省去去配置过程,直接上测试结果图。
在这里插入图片描述
出现上面的测试结果就说明web服务器配置的已经没有问题了。


3.配置前端keepalived+haproxy

安装keepalived和haproxy(在主从服务器上分别安装)

yum -y install keepalived
yum -y install haproxy

启动服务(在主从服务器上执行)

systemctl start keepalived
systemctl start haproxy
systemctl enable keepalived
systemctl enable haproxy

关闭防火墙和selinux(在主从服务器上执行)

systemctl stop firewalld
setenforce 0

配置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 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.conf
global_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.cfg
global
    log 127.0.0.1 local3 info
    chroot /var/lib/haproxy
    maxconn 4000
    user haproxy
    group haproxy
    daemon

defaults
    log global
    mode http
    option httplog
    retries 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 Haproxy\Statistics
    stats auth admin:admin

listen nginxserver
    bind 172.16.1.100:80    #监听虚拟IP
    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

配置从服务器(有两种方法):
方法1:

只需将监听的地址改为bind *:80,如果不设置成监听所有的话,配置完之后,从服务器上的haproxy服务无法启动,这是因为在主服务器keepalived服务运行的情况下,从服务器没有虚拟IP地址,而从服务器上的haproxy不知到这个虚拟IP地址,所以会出现无法启动的情况。

方法二:

将主服务器上haproxy的配置原封不动的复制过来,保存后,先将主服务器的keepalived服务关掉,再启用动从服务器上的haproxy服务,启动成功后,再将主服务器上的keepalived服务启动,这是因为主服务器上的keepalived运行时,从服务器上没有虚拟IP地址,从服务器上的haproxy服务监听的地址它不知道,所以会起不来,必须先让从服务器知道这个地址。)

配置完后,重启服务(主从)

systemctl restart haproxy

验证haproxy服务是否成功
在这里插入图片描述
在这里插入图片描述
通过验证发现可以代理发送给后端完成响应的请求,说明haproxy配置成功了。


实验验证

在以上服务都配置没有问题后,在客户机上验证,如下:
在这里插入图片描述
为了验证备份的是否成功,关掉主服务器上的keepalived服务,然后再验证:
在这里插入图片描述
通过使用域名进行验证,发现可以成功的访问到后端web服务器上,就说明整个实验已经没有问题了。

猜你喜欢

转载自blog.csdn.net/weixin_42342456/article/details/86483871
今日推荐