Linux架构 Nginx负载均衡实现高可用

Nginx负载均衡实现高可用

dns的作用

正向解析;将域名解析成IP地址
反向解析:将IP地址解析成域名

keepalived高可用软件

nginx+keepalived实现负载均衡高可用

单点+keepalived(keepalived专门制作高可用)

高可用硬件

  • F5(硬件)
  • keepalived(软件)
  • heartbeat(软件)

keepalived实现高可用的原理

协议        端口
ssh://      22
ftp://      21
rsync://    873
telnet://   23
http://     80
https://    443
tcp/ip
icmp://                  命令:ping

Mysql       3306
redis       6379

## web服务   http:// http://
nginx
apache
tomcat
weblogic
IIS

keepalived高可用协议:VRRP协议

keepalived软件是基于VRRP协议实现的,VRRP虚拟路由冗余协议,主要用于解决单点故障问题

# arp映射表 
一个ip映射一个物理地址(mac地址)

img

keepalived部署

环境准备

主机名 WanIP LanIP 应用 角色
web01 10.0.0.7 172.16.1.7 nginx+php web
web02 10.0.0.8 172.16.1.8 nginx+php web
lb01 10.0.0.5 172.16.1.5 nginx+keepalived 负载均衡、master
lb02 10.0.0.6 172.16.1.6 nginx+keepalived 负载均衡、backup

keepalived核心概念

1.投票选举方式(优先级)

2.抢占式、非抢占式

3.如果两台服务器都有vip都认为自己是master(脑裂)

web配置(web01-02)

# 编写配置文件
vim /etc/nginx/conf.d/keep.conf
server{
        listen 80;
        server_name _;

        location / {
                root /code/web;
                index index.html;
        }
}

# 检测语法
nginx -t

# 创建站点目录
mkdir -p /code/web

# 部署代码
vim /code/web/index.html
abc

# 重启nginx
systemctl restart nginx

部署负载均衡(lb01)

# 编写nginx配置文件
vim /etc/nginx/conf.d/lb.conf
upstream keeps {
        server 10.0.0.7;
        server 10.0.0.8;
}

server{
        listen 80;
        server_name xxx.keeps.com;

        location / {
                proxy_pass http://keeps;
                include /etc/nginx/proxy_param;
        }
}

# 编写代理文件
vim /etc/nginx/proxy_param 
# 在代理服务器的请求头中,加上域名,携带域名去访问后端的web
proxy_set_header Host $host;
# 在代理服务器的请求头重,透传用户的真实IP给web01
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# lb01链接web01的超时时间(代理服务器链接后端服务的超时时间)
proxy_connect_timeout 30;
# 后端服务器回传代理服务器的超时时间
proxy_send_timeout 60;
# lb01代理服务器读取web01返回数据的超时时间
proxy_read_timeout 60;
# 开启代理服务器的缓冲区
proxy_buffering on;
# 开启存放头部信息的缓冲区大小 32k
proxy_buffer_size 32k;
# 开启4个128k存放数据主体的缓冲区
proxy_buffers 4 128k;

# 检测语法
nginx -t

# 域名解析
10.0.0.5 xxx.keeps.com

部署keepalived(lb01-02)

# 安装keepalived
yum install -y keepalived

# 修改keepalived配置文件
### 主节点配置文件
vim /etc/keepalived/keepalived.conf
global_defs {
    router_id lb01
}

vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

### 备节点配置文件
vim /etc/keepalived/keepalived.conf 
global_defs {
    router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    nopreempt
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

配置文件区别

Keepalived配置区别 Master节点配置 Backup节点配置
route_id(唯一标识) router_id:lb01 router_id:lb02
state(角色状态) state MASTER state BACKUP
priority(竞选优先级) priority 150 priority 100
## 查看VIP
ip a
 eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:78:c4:6e brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.5/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever

----inet 10.0.0.3/32 scope global eth0
       valid_lft forever preferred_lft forever---------------

    inet6 fe80::20c:29ff:fe78:c46e/64 scope link 
       valid_lft forever preferred_lft forever

keepalived非抢占式

###前提
1.两边的角色都必须是BACKUP
2.两个节点都必须加上配置 nopreempt
3.其中一个节点的优先级必须要高于另外一个节点的优先级。

### 主节点配置
vim /etc/keepalived/keepalived.conf
global_defs {
    router_id lb01
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
    track_script {
        ljy
    }
}

### 备节点配置
vim /etc/keepalived/keepalived.conf
global_defs {
    router_id lb02
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
}

# 重启keepalived
systemctl restart keepalived

img

VIP漂移原因:keepalived服务停止,导致VIP漂移

关联nginx和keepalived

检测nginx状态,如果nginx停止了,就把keepalived停掉

注意:如果想要检测某个服务是否存活,脚本名,一定不要带服务名

# 编写nginx进程监测脚本
vim check_web.sh
#!/bin/bash

nginx_status=`ps -ef|grep [n]ginx|wc -l`

if [ $nginx_status -eq 0 ];then
        systemctl stop keepalived
fi

# 配置keepalived自动执行检测nginx脚本(lb01)
vim /etc/keepalived/keepalived.conf
global_defs {
    router_id lb01
}
vrrp_script ljy {
        script "/root/check_web.sh"
        interval 1
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 50
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
    track_script {
        ljy
    }
}

# 授权执行脚本
chmod +x /root/check_web.sh

# 重启keepalived.
systemctl restart keepalived

VIP漂移实践

1.尝试keepalived是不是只能在两台机器之间漂移

不是

2.如果不是,怎么配置在3台机器之间漂移VIP

global_defs {
    router_id lb03
}
vrrp_script ljy {
        script "/root/check_web.sh"
        interval 1
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
    track_script {
        ljy
    }
}
global_defs {
    router_id {{ ansible_hostname }}
}
vrrp_script check_web {
        script "/root/check_web.sh"
        interval 1
}
vrrp_instance VI_1 {
{% if ansible_hostname == 'lb01' %}
    state MASTER
    priority 150
{% else %}
    state BACKUP
    priority 100
{% endif %}
    nopreempt
    interface eth0
    virtual_router_id 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        10.0.0.3
    }
    track_script {
        check_web
    }
}
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇