一、实施过程
1、选择两台nginx服务器作为代理服务器。
2、给两台代理服务器安装keepalived制作高可用生成VIP
3、配置nginx的负载均衡 以上两台nginx服务器配置文件一致 根据站点分区进行调度
配置upstream文件
[root@master ~]# cd /etc/nginx/conf.d/
[root@master conf.d]# ls
default.conf
[root@master conf.d]# vim upstream.conf
upstream index {
server 192.168.188.131:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.188.130:80 weight=1 max_fails=2 fail_timeout=2;
}
upstream images{
server 192.168.188.129:80 weight=1 max_fails=2 fail_timeout=2;
server 192.168.188.135:80 weight=1 max_fails=2 fail_timeout=2;
}
配置server
[root@master conf.d]# cp default.conf default.conf.bak
[root@master conf.d]# ls
default.conf default.conf.bak
[root@master conf.d]# vim default.conf
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://index;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~* \.(png|gif|jpg)$ {
proxy_pass http://images;
proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
[root@master conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@master conf.d]# nginx -s reload
将nginx的配置文件拷贝到另一台代理服务器中:
[root@master conf.d]# scp upstream.conf 192.168.188.128:/etc/nginx/conf.d/
The authenticity of host '192.168.188.128 (192.168.188.128)' can't be established.
ECDSA key fingerprint is SHA256:/ju7ydJfE+eQXpeptAQziEUNJ+/auM7DhgsWHtym6Zk.
ECDSA key fingerprint is MD5:db:7e:19:49:48:d0:36:4f:99:6c:ee:47:5a:58:34:c8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.188.128' (ECDSA) to the list of known hosts.
root@192.168.188.128's password:
upstream.conf 100% 306 239.3KB/s 00:00
[root@master conf.d]# scp default.conf 192.168.188.128:/etc/nginx/conf.d/
root@192.168.188.128's password:
default.conf 100% 736 1.0MB/s 00:00
二、Keepalived实现调度器HA
注:主/备调度器均能够实现正常调度
1. 主/备调度器安装软件
[root@master conf.d]# yum install -y keepalived
[root@master ~]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
[root@master ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.110/24
}
}
[root@backup conf.d]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id BACKUP
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
nopreempt
virtual_router_id 80
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.110/24
}
}
2. 启动KeepAlived(主备均启动)
[root@master ~]# systemctl start keepalived
[root@master ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:e2:d8:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.188.136/24 brd 192.168.188.255 scope global dynamic ens33
valid_lft 1172sec preferred_lft 1172sec
inet 192.168.188.110/32 scope global ens33
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fee2:d8e4/64 scope link
valid_lft forever preferred_lft forever
到此: 可以解决心跳故障keepalived 不能解决Nginx服务故障
扩展对调度器Nginx健康检查(可选)两台都设置
思路: 让Keepalived以一定时间间隔执行一个外部脚本,脚本的功能是当Nginx失败,则关闭本机的Keepalived
(1) script
[root@master keepalived]# vim check_nginx_status.sh
#!/bin/bash
/usr/bin/curl -I http://localhost &>/dev/null
if [ $? -ne 0 ];then
systemctl stop keepalived
fi
(2). keepalived使用script
[root@master keepalived]# vim keepalived.conf
! Configuration File for keepalived
global_defs {
router_id master
}
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx_status.sh"
interval 5
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 80
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.188.110/24
}
track_script {
check_nginx
}
}
注:必须先启动nginx,再启动keepalived
网友评论