微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

虚拟机搭建nginx+keeliaved高可用

  1. 环境配置
虚拟机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
  1. 然后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
    }
}

  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
    }
}
  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. 启动前需注意
1.防火墙关闭
2.selinux设置为permissive或者disable 
  1. 启动A的Nginx和keepalived, 启动B的Nginx和keepalived
  2. 分别查看AB机器的ip addr
    正常下
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] 举报,一经查实,本站将立刻删除。

相关推荐