Keepalived+Haproxy实现高可用负载综合实验
实验拓扑:
实验要求:
- 客户机从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
验证:
[[email protected] ~]# 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.****.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.****.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 ens33
virtual_router_id 51
priority 101
advert_int 1
authentication {
auth_type PASS
auth_type 1234
}
virtual_ipaddress {
172.161.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 {
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
配置从服务器(配置跟主服务器的配置几乎一模一样,只需将监听的地址改为bind *:80
,如果不设置成监听所有的话,配置完之后,haproxy服务无法启动)
配置完后,重启服务(主从)
systemctl restart haproxy
验证haproxy服务是否成功
通过验证发现可以代理发送给后端完成响应的请求,说明haproxy配置成功了。
实验验证
在以上服务都配置没有问题后,在客户机上验证,如下:
为了验证备份的是否成功,关掉主服务器上的keepalived服务,然后再验证:
通过使用域名进行验证,发现可以成功的访问到后端web服务器上,就说明整个实验已经没有问题了。