Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9258780
  • 博文数量: 1669
  • 博客积分: 16831
  • 博客等级: 上将
  • 技术积分: 12594
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-25 07:23
个人简介

柔中带刚,刚中带柔,淫荡中富含柔和,刚猛中荡漾风骚,无坚不摧,无孔不入!

文章分类

全部博文(1669)

文章存档

2023年(4)

2022年(1)

2021年(10)

2020年(24)

2019年(4)

2018年(19)

2017年(66)

2016年(60)

2015年(49)

2014年(201)

2013年(221)

2012年(638)

2011年(372)

分类: 系统运维

2017-04-13 03:51:59

常见问题
yum -y install gcc cc openssl-devel
yum update glib*

搭建准备:

机器两台 ip分别为192.168.100.128 192.168.100.129(可以用虚拟机测试,虚拟机网络模式为NET模式,且为静态ip)

准备一个虚拟ip对外提供服务,即通过ip访问web程序。(keepalive会将虚拟ip绑定到两台机器上)keepalived的核心原理是vrrp协议,英文好可以查看最新协议RFC3768。

1.nginx安装
两台机器都需要安装,可以参考我的上篇博文 Linux tar包安装Nginx http://blog.csdn.net/caicongyang/article/details/46388845

2.安装keepalived (两台机器都要安装,并且都要做如下操作!)

下载最新版本的keepalived-1.2.17.tar.gz 下载地址:

将文件上传到/usr/local/目录下

#tar -zxvf keepalived-1.2.17.tar.gz

将解压出来的文件夹重命名

#mv keepalived-1.2.17 keeplived

进入文件夹,编译安装

#cd keepalived
#./configure
#make && make install

修改配置文件 /usr/local/keepalived/etc/keepalived/keepalived.conf

主机器配置文件如下:

global_defs {
notification_email {
linuxidc@qq.com              #接收警报的email地址,可以添加多个
}
notification_email_from admin@caicongyang.com  ###发件人地址
smtp_server 127.0.0.1          ###发送邮件的服务器
smtp_connect_timeout 30      ###超时时间
router_id LVS_DEVEL      ####load balancer 的标识 ID,用于email警报
}
vrrp_script chk_http_port {
script “/opt/nginx_pid.sh” ####检测nginx状态的脚本路径
interval 2
weight 2
}
vrrp_instance VI_1 {
state MASTER ############ 辅机为 BACKUP
interface eth0 ####HA 监测网络接口  此项默认为eth0,因为本人在虚拟机下做测试所以将其改为eth2,可以用ifconfing
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同
mcast_src_ip 192.168.100.128 ###本机IP地址
priority 100 ########### 权值要比 back 高
advert_int 1 #主备之间的通告间隔秒数
authentication {
auth_type PASS ###默认配置 主备切换时的验证 
auth_pass 1111
}
track_script {
chk_http_port ### 执行监控的服务
}
virtual_ipaddress {
192.168.100.133 ####虚拟ip,vip的地址
}
}


backup机器配置文件

global_defs {
notification_email {
linuxidc@qq.com              #接收警报的email地址,可以添加多个
}
notification_email_from admin@caicongyang.com  ###发件人地址
smtp_server 127.0.0.1          ###发送邮件的服务器
smtp_connect_timeout 30      ###超时时间
router_id LVS_DEVEL      ####load balancer 的标识 ID,用于email警报
}
vrrp_script chk_http_port {
script “/opt/nginx_pid.sh” ####检测nginx状态的脚本路径
interval 2
weight 2
}
vrrp_instance VI_1 {
state BACKUP ############ 辅机为 BACKUP
interface eth2 ####HA 监测网络接口 注意,此项默认为eth0,因为本人在虚拟机下做测试所以将其改为eth2,可以先查看自己的网络端口
virtual_router_id 51 #主、备机的 virtual_router_id 必须相同
mcast_src_ip 192.168.100.129 ###本机IP地址
priority 90 ########### 权值要比 back 高
advert_int 1 #主备之间的通告间隔秒数
authentication {
auth_type PASS ###主备切换时的验证
auth_pass 1111
}
track_script {
chk_http_port ### 执行监控的服务
}
virtual_ipaddress {
192.168.100.133 ####虚拟ip,vip的地址
}
}

将keepalived安装成Linux系统服务


#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/

#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

#mkdir /etc/keepalived

#cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/

设置开机启动服务

# chkconfig --level 2345 keepalived on

在/opt/下编写校验脚本,/opt/nginx_pid.sh(已配置在keepalived.conf中)

nginx_pid.sh :如果nginx停止运行,尝试启动,如果无法启动杀死本机keepalived进程,keepalied将虚拟ip绑定到备用机器上

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx ##这个地方写你nginx启动命令的路径
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi

测试:

分别启动两台机器上nginx 和 keepalived

利用命令查看虚拟ip是否绑定成功

#ip a

主机的结果是

1: lo: mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
      valid_lft forever preferred_lft forever
2: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ff:ca:24 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.128/24 brd 192.168.100.255 scope global eth1
    inet 192.168.100.133/32 scope global eth1
    inet6 fe80::20c:29ff:feff:ca24/64 scope link 
      valid_lft forever preferred_lft forever

可以看到 虚拟IP 192.168.100.133已经绑定到128的机器上了

另外可以利用杀死主服务的nginx进程,访问192.168.100.133是否依然能够访问web页面,再次利用#ip a 命令查看备用机器虚拟ip是否绑定成功!


后记:双机热备模式虽然可用性高,但是有一台机器处于被分在状态,资源有点浪费。楼主将在下篇文章配置双机互为双主的模式。

 6.3下Haproxy+Keepalived+Apache配置笔记 

Haproxy + KeepAlived 实现WEB群集 on CentOS 6 

Keepalived+Haproxy配置高可用负载均衡 

Haproxy+Keepalived构建高可用负载均衡 

CentOS 7 上配置LVS + Keepalived + ipvsadm 

Keepalived高可用集群搭建 

Keepalived 的详细介绍
Keepalived 的下载地址请点这里


该脚本检测ngnix的运行状态,并在nginx进程不存在时尝试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。


/etc/keepalived/check_nginx.sh :


#!/bin/bash
counter=$(ps -C nginx --no-heading|wc -l)
if [ "${counter}" = "0" ]; then
    /usr/local/bin/nginx
    sleep 2
    counter=$(ps -C nginx --no-heading|wc -l)
    if [ "${counter}" = "0" ]; then
        /etc/init.d/keepalived stop
    fi
fi
你也可以根据自己的业务需求,总结出在什么情形下关闭keepalived,如 curl 主页连续2个5s没有响应则切换:


#!/bin/bash
# curl -IL
# curl --data "memberName=fengkan&password=22"


count = 0
for (( k=0; k<2; k++ )) 
do 
    check_code=$( curl --connect-timeout 3 -sL -w "%{http_code}\\n" -o /dev/null )
    if [ "$check_code" != "200" ]; then
        count = count +1
        continue
    else
        count = 0
        break
    fi
done
if [ "$count" != "0" ]; then
#   /etc/init.d/keepalived stop
    exit 1
else
    exit 0
fi
2.3 keepalived.conf



阅读(6418) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~