- 环境配置
虚拟机A: centos7-192.168.11.10(安装Nginx+keepalived)
虚拟机B: centos7-192.168.11.11(安装Nginx+keepalived)
虚拟机C: centos7-192.168.11.12(运行的web项目)
ps: ubuntu就是个坑,md
- 然后A,B的配置文件
A服务器的Nginx.conf(关键位置已用*作注释)
user Nginx;
worker_processes 1;
error_log /var/log/Nginx/error.log warn;
pid /var/run/Nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/Nginx/mime.types; #文件扩展名与类型映射表
default_type application/octet-stream; #默认文件类型
#日志模式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/Nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on; #压缩功能
include /etc/Nginx/conf.d/*.conf;
upstream slow{ #** 负载均衡
server 192.168.11.12:8082 max_fails=2 fail_timeout=5s;
server 192.168.11.12:8083 max_fails=2 fail_timeout=5s;
}
server{
listen 80;
server_name www.nxslow.cn; # * 域名访问
root /usr/share/Nginx/html;
location / {
proxy_redirect off;
proxy_pass http://slow/; #* 负载均衡选择
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
}
error_page 404 /404.html;
}
}
A服务器的Nginx的index.html页面内修改,为了测试
<h1>Welcome Nginx!!This is master</h1>
A服务器的keepliaved.conf配置
global_defs {
router_id ngx_master #在一个网络应该是唯一的
}
vrrp_script chk_Nginx {
script "/etc/keepalived/Nginx_pid.sh" #* 检查Nginx状态的脚本
interval 2
weight 3
}
vrrp_instance VI_1 {
state MASTER #* 备份服务器上将MASTER改为BACKUP
interface ens33 #* 这里是机器对外的访问ip 接口网卡 可以用ip addr或者ifconfig 查看自己的接口网卡名称
virtual_router_id 51 #* 这里master和slave要保持一致
priority 100 #备份服务上将100改为小于100,可配置成90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #* 局域网内需要在同一ip段内,坑
192.168.11.242 #有多个vip可在下面继续增加
}
track_script {
chk_Nginx
}
}
virtual_server 192.168.11.242 80{ #* 对应上述的vip
delay_loop 6
lb_algo rr
lb_kind NAT #* 因为虚拟机,选择了nat
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.11.10 80{#* A服务器的真实ip
weight 1
}
}
- B服务器上的配置
B机器的Nginx配置与A的配置一样,可以直接复制粘贴,keepalived不同
B机器的keepalived.conf
global_defs {
router_id ngx_slave #在一个网络应该是唯一的
}
vrrp_script chk_Nginx {
script "/etc/keepalived/Nginx_pid.sh" #* 检查Nginx状态的脚本
interval 2
weight 3
}
vrrp_instance VI_1 {
state BACKUP #* 备份服务器为BACKUP
interface ens33 #* 这里是机器对外的访问ip 接口网卡 可以用ip addr或者ifconfig 查看自己的接口网卡名称
virtual_router_id 51 #* 这里master和slave要保持一致
priority 90 #备份服务权重应小于master100,可配置成90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { #* 局域网内需要在同一ip段内,坑
192.168.11.242 #有多个vip可在下面继续增加
}
track_script {
chk_Nginx
}
}
virtual_server 192.168.11.242 80{ #* 对应上述的vip
delay_loop 6
lb_algo rr
lb_kind NAT #* 因为虚拟机,选择了nat
nat_mask 255.255.255.0
protocol TCP
real_server 192.168.11.10 80{#* A服务器的真实ip
weight 1
}
}
- keepalived.conf中的/etc/keepalived/Nginx_pid.sh
#!/bin/bash
#version 0.0.1
#
A=`ps -C Nginx --no-header |wc -l`
if [ $A -eq 0 ];then
docker restart docker_Nginx #(是用docker安装的Nginx,这里可替换Nginx启动命令即可)
sleep 3
if [ `ps -C Nginx --no-header |wc -l` -eq 0 ];then
/etc/init.d/keepalived stop #(同样替换为自己的keepalived启动命令即可)
fi
fi
- 启动前需注意
1.防火墙关闭
2.selinux设置为permissive或者disable
A里面会出你网卡接口对应的名字ens33多了192.168.11.242这个虚拟ip
B里没出现11.242这个ip
任意AB下curl 192.168.11.242这个命令会看到welcom Nginx-This is master这个页面代码,测试关闭A服务器的keepalived
curl 192.168.11.242会看到welcom Nginx,表明此时是B的Nginx在运行
以上均已测试运行正常用,遇到的坑
1. 主从服务器AB都绑定了VIP
2. AB服务器内测试正常,但在虚拟机的宿主机访问不到192.168.11.242
原理:
选择A作Nginx的主服务器master, B是backup。搭建keepalived的Nginx运行原理是keepalived会不停的访问路由组内的AB服务器,默认会将请求转发给A去处理,当A宕机后(keepalived发现A的Nginx访问不到时), keepalived会将请求自动转发给B去处理,也就是backup充当主服务器了。当A恢复正常后,再访问时keepalived仍然会将请求发给A,因为
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。