之前做过一个keepalived+Haproxy实现高可用负载的实验,只是在同一局域网下做的,这次是在之前的基础上加了一个外网,客户机利用DHCP服务获取地址,用DNS服务器用来做域名解析,最后实现外网客户机通过域名访问远端web服务器。如果想了解单独的keepalived+Haproxy的实验可参考https://blog.csdn.net/weixin_42342456/article/details/86356310
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
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服务器配置的已经没有问题了。
安装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服务器上,就说明整个实验已经没有问题了。