Dubbo-Keepalived + Nginx 实现高可用web负载均衡

     首先我们先来了解解决Nginx的高可用集群的问题,可以通过下面三种方式。

     1、阿里云:SLB;2、硬件负载均衡器(如:F5、Radware);3、软件方式实现高可用或负载均衡keepalive、lvs

一、今天我们来介绍第三种方式 Keepalived 

      Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。Keepalived 以 VRRP 协议为实现基础,用 VRRP 协议来实现高可用性(HA)。VRRP(Virtual RouterRedundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER, 或者是通过算法选举产生, MASTER 实现针对虚拟路由器 IP 的各种网络功能,ARP 请求,ICMP,以及数据的转发等;其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。。。。

二、方案规划

vipip主机名Nginx默认主从
192.168.1.50192.168.1.51edu-proxy-0188MASTER
 192.168.1.52edu-proxy-0288BACKUP

        虚拟机centos7.0x64

     keepalived-1.2.18.tar.gz
     Nginx-1.6.2.tar.gz


三、安装Nginx1、安装编译 Nginx 所需的依赖包


# yum install gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel

openssl openssl-devel

2、上传 Nginx(nginx-1.6.2.tar.gz)到 /usr/local/src 目录

3、编译安装 Nginx

# cd /usr/local/src/

# tar -zxvf nginx-1.6.2.tar.gz

# cd nginx-1.6.2

# ./configure --prefix=/usr/local/nginx

# make && make install

4、配置 Nginx

# vi /usr/local/nginx/conf/nginx.conf

user root;

worker_processes 1;

#error_log logs/error.log;

#error_log logs/error.log notice;

#error_log logs/error.log info;

#pid logs/nginx.pid;

events {

worker_connections 1024;

}

http {

include 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 logs/access.log main;

sendfile on;

#tcp_nopush on;

#keepalive_timeout 0;

keepalive_timeout 65;

#gzip on;


server {
listen 88;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
修改 Nginx 欢迎首页内容(用于后面测试,用于区分两个节点的 Nginx) :
# vi /usr/local/nginx/html/index.html
192.168.1.51 中的标题加 1
<h1>Welcome to nginx! 1</h1>
192.168.1.52 中的标题加 2
<h1>Welcome to nginx! 2</h1>

5、启动Nginx

# /usr/local/nginx/sbin/nginx

6、访问测试




四、安装Keepalived


1、上传或下载 keepalived(keepalived-1.2.18.tar.gz)到 /usr/local/src 目录
2、解压安装
# cd /usr/local/src
# tar -zxvf keepalived-1.2.18.tar.gz
# cd keepalived-1.2.18
# ./configure --prefix=/usr/local/keepalived
# make && make install
3、将 keepalived 安装成 Linux 系统服务:
因为没有使用 keepalived 的默认路径安装(默认是/usr/local),安装完成之后,需要做一些工作,复制默认配置文件到默认路径
# mkdir /etc/keepalived
# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
复制 keepalived 服务脚本到默认的地址
# cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
# cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# ln -s /usr/local/sbin/keepalived /usr/sbin/
# ln -s /usr/local/keepalived/sbin/keepalived /sbin/
设置 keepalived 服务开机启动
# chkconfig keepalived on

4、修改Keepalived配置文件

(1) MASTER 节点配置文件(192.168.1.51)

# vi /etc/keepalived/keepalived.conf

以为配置文件篇幅偏大,我就不全部粘贴了。

global_defs {

## keepalived 自带的邮件提醒需要开启 sendmail 服务。建议用独立的监控或第三方 SMTP

router_id edu-proxy-01  ## 标识本节点的字条串,通常为 hostname

}

        keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0, 并且 weight 配置的值大于 0, 则优先级相应的增加。 如果脚本执行结果非 0, 并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。

vrrp_instance VI_1 {

state MASTER  ## 主节点为 MASTER,对应的备份节点为 BACKUP

interface eth1 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同,我的是 eth1

virtual_router_id 51  ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相

同的 VRID 为一个组,他将决定多播的 MAC 地址

mcast_src_ip 192.168.1.51  ## 本机 IP 地址

priority 100  ## 节点优先级,值范围 0-254,MASTER 要比 BACKUP 高

nopreempt ## 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题

advert_int 1  ## 组播信息发送间隔,两个节点设置必须一样,默认 1s

## 设置验证信息,两个节点必须一致

authentication {

auth_type PASS

auth_pass 1111 ## 真实生产,按需求对应该过来

}

(2)BACKUP 节点配置文件(192.168.1.52)

vi /etc/keepalived/keepalived.conf

global_defs {

router_id edu-proxy-02

}

vrrp_instance VI_1 {

state BACKUP

interface eth1

virtual_router_id 51

mcast_src_ip 192.168.1.52

priority 90

advert_int 1

authentication {

auth_type PASS

auth_pass 1111

}

track_script {

chk_nginx

}

virtual_ipaddress {

192.168.1.50

}

}

5、编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 keepalived.conf 中配置)

        脚本要求: 如果 nginx 停止运行, 尝试启动, 如果无法启动则杀死本机的 keepalived 进程, keepalied将虚拟 ip 绑定到 BACKUP 机器上。内容如下:

# vi /etc/keepalived/nginx_check.sh

#!/bin/bash

A=`ps -C nginx –no-header |wc -l`

if [ $A -eq 0 ];then

/usr/local/nginx/sbin/nginx

sleep 2

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

killall keepalived

fi

fi

6、启动 Keepalived
# service keepalived start
Starting keepalived: [ OK ]

7、测试高可用性


我们在访问50端口的时候,会随机访问Nginx1和Nginx2.如果我们随便关闭一个节点,则会自动连接到另一个节点上面了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值