实验拓扑图:
实验环境:
两台upstream server用于配置httpd服务,两台nginx反向代理服务器,同时将keepalived服务安装在两台反向代理服务器上面,用于实现高可用性
基础环境的准备:
关闭四台主机的防火墙及selinux,同时在两台upstream server主机上配置httpd服务并准备测试页面
systemctl stop firewalld
systemctl disable firewalld
vim /etc/selinux/config
selinux=disabled
四台主机做同样的设置
yum install -y httpd
systemctl start httpd
systemctl enable httpd
vim /var/www/html/index.html
<h1>This httpd-1 Page</h1>
另一台upstream server主机做同样配置
在两台负载均衡服务器上面安装nginx服务,在nginx配置文件的http字段中定义upstream,并且在location字段中调用,重新启动服务
yum install -y nginx //注意nginx的rpm包是在epel源中提供的
vim /etc/nginx/nginx.conf //编辑配置文件
upstream webservs { //在http字段中定义
server 192.168.153.7:80 weight=1;
server 192.168.153.8:80 weight=1;
}
location / { //在location中调用定义的upstream名称
proxy_pass http://webservs/;
}
systemctl start nginx
systemctl enable nginx
备注:nginx根据版本不同有时候就只有一个nginx.conf的主配置文件,有时候除了主配置文件还会存在/etc/nginx/conf.d/default.conf的附加配置文件。如果nginx安装完成后既有主配置文件又有附加配置文件,此时关于server字段以及location字段需要定义default.conf的附加配置文件中
使用netstat -tnlp查看确保80端口被nginx的master进程监听
使用客户端验证一下nginx的反向代理功能
将配置文件复制到第二个反向代理服务器节点,并进行测试
接下来配置keepalived的高可用性,这里我们先配置一组主备模式
对于keepalived来说通过判定nginx服务的在线状态的结果来判断这个主机是否可以成为主节点
yum install -y keepalived //在反向代理服务器上安装keepalived,并设置开机自启
systemctl start keepalived
systemctl enable keepalived
编辑keepalived,设置检测nginx是否在线的脚本
! Configuration File for keepalived
global_defs {
notification_email {
root@locahost
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script chk_nginx {
script "/etc/keepalived/chk_file.sh" //定义脚本
interval 1 //判断命令返回结果
weight -10 //权重减10
}
vrrp_instance VI_1 {
state MASTER //主节点
interface ens33 //VIP配置到哪个接口的别名上
virtual_router_id 43 //虚拟路由ID
priority 100 //设置权重
advert_int 1
authentication {
auth_type PASS
auth_pass poiu
}
virtual_ipaddress {
192.168.153.200/32 dev ens33 label ens33:0 //设置VIP地址,配置的ens33网卡的第一个别名上
}
track_script {
chk_nginx //调用脚本
}
}
配置完毕后重新启动服务并将配置文件复制到第二个节点上面
同时修改第二个节点上面的配置文件 state 改成BACKUP,priority改成99
创建检测脚本
在/etc/keepalived目录下创建chk_file.sh文件
内容为killall -0 nginx &> /dev/null,并更改文件为可执行状态
然后查看主节点的IP地址信息
使用客户端请求
现在我们手动停止主节点的nginx服务,然后查看备用节点的IP地址信息
此时访问正常,重新启动主节点的nginx服务后,VIP被重新争抢回主节点
接下来配置keepalived的双主模型实现nginx反向代理的高可用性
在主节点的keepalived的配置文件中添加以下配置信息
vrrp_instance VI_2 { //instance名称更改为2
state BACKUP //模式改为备用
interface ens33
virtual_router_id 34 //虚拟路由ID任意更改,不能跟上面的VI_1一样
priority 99 //权重设置为99
advert_int 1
authentication {
auth_type PASS
auth_pass poiuytre
}
virtual_ipaddress {
192.168.153.201/32 dev ens33 label ens33:1 //将VIP192.168.153.201配置到ens33网卡的第二个别名上面
}
track_script {
chk_nginx
}
}
将新添加的配置信息复制到备用节点,并作相应的修改state更改成MSASTER,priority改成100
查看两台主机的ip地址信息
第一主节点IP信息为:
第二主节点IP信息为:
使用客户端进行访问验证第二个主节点是否正常运行
手动停止第一台高可用服务器的nginx服务,查看第二台高可用服务器的IP信息用来验证双主模型是否成功
此时基于keepalived的双主模型实现nginx反向代理的高可用性配置完毕,在实际生产环境中可以将两个VIP地址配置在DNS服务器中,在DNS服务器的配置文件中做两条A记录指向,即可实现请求的负载均衡
转载于:https://blog.51cto.com/11970509/2346743