设为首页 收藏本站
查看: 772|回复: 0

[经验分享] nginx+keepalived实现双机热切的高可用

[复制链接]

尚未签到

发表于 2016-12-26 11:30:53 | 显示全部楼层 |阅读模式
Nginx+keepalived热切换高可用

一 keepalived简介
keepalived是一个类似于layer3, 4 & 7交换机制的软件,也就是我们平时说的第3层、第4层和第7层交换
Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
为了方便测试清关闭防火墙 service iptables stop 
二 安装
1,本次采用的是centos5.10 两台机器 (master_slave)架构master 192.168.235.101,
slave 192.168.235.102
2,准备编译环境 yum -y install gcc gcc+ gcc-c++ openssl openssl-devel pcre pcre-devel
3,下载软件源代码包
Nginx1.7.0 最新版
wget http://nginx.org/download/nginx-1.7.0.tar.gz
keepalived 1.2.12最新版
wget http://www.keepalived.org/software/keepalived-1.2.12.tar.gz
4,编译安装源代码
a. Nginx的安装(两台机器进行相同的安装即可)
解压nginx
tar xf nginx-1.7.0
cd nginx1.7.0
./configure
make && make install
如果没有报错证明安装成功
测试
/usr/local/nginx/sbin/nginx t
[iyunv@keepMaster opt]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
表示成功
b. keepalived安装
tar xf keepalived-1.2.12.tar.gz
cd keepalived-1.2.12
./configure
make && make install
cp /usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
chmod +x /etc/init.d/keepalived
chkconfig add keepalived
chkconfig keepalived on
mkdir /etc/keepalived
ln s /usr/local/sbin/keepalived /usr/sbin
三 配置
Keepalived的配置
amaster机器(192.168.235.101中的配置)
vi /etc/keepalived/ keepalived.config //这个文件默认是不存在的
使用vi 加入以下的配置
global_defs {
   notification_email {
     admin@centos.bz
   }
   notification_email_from keepalived@domain.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_http_port {
                script "/opt/nginx_pid.sh" ############该脚本我们在后面书写
                interval 2
                weight 2
}
vrrp_instance VI_1 {
    state MASTER        ############ 辅机为 BACKUP
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.235.101
    priority 102                  ########### 权值要比 back 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script { 
        chk_http_port ### 执行监控的服务 
        }
    virtual_ipaddress {
      192.168.235.100 ############ 此处的虚拟IP 地址即 我们web                                                      ####要访问的IP地址  必须在同一网段
    }
}
 
 
b 配置slave(192.168.235.102)
vi /etc/keepalived/ keepalived.config //这个文件默认是不存在的
使用vi 加入以下的配置
 
global_defs {
   notification_email {
     admin@centos.bz
   }
   notification_email_from keepalived@domain.com
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_http_port {
                script "/opt/nginx_pid.sh" ############该脚本我们在后####面书写
                interval 2
                weight 2
}
vrrp_instance VI_1 {
    state BACKUP  
    interface eth0
    virtual_router_id 51
    mcast_src_ip 192.168.235.102
    priority 102                  ########### 权值要比 back 
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script { 
        chk_http_port ### 执行监控的服务 
        }
    virtual_ipaddress {
      192.168.235.100 ############ 此处的虚拟IP 地址即 我们web                                                      ####要访问的IP地址  必须在同一网段
    }
}
 
分别在master slave上建立nginx的监控脚本文件
vi /opt/nginx_pid.sh
 
输入以下配置
#!/bin/bash
A=`ps C nginx no-header |wc -l`
if [$A eq 0];then
/usr/local/nginx/sbin/nginx
sleep 3
if[`ps C nginx no-header |wc -l` -eq 0];then
killall keepalived
fi
fi
四 测试
<!--[if !supportLists]-->1. <!--[endif]-->分别在msterslave上启动nginx  /usr/local/nginx/sbin/nginx
<!--[if !supportLists]-->2. <!--[endif]-->先启动master(101)上的 keepalived  service keepalived start 再启动slave(102)
<!--[if !supportLists]-->3. <!--[endif]-->master上敲入 ip a
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
   link/ether 00:0c:29:c2:74:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.235.101/24 brd 192.168.235.255 scope global eth0
    inet 192.168.235.110/32 scope global eth0 //虚拟IP成功了 使用该地址访问 
   inet6 fe80::20c:29ff:fec2:7415/64 scope link
       valid_lft forever preferred_lft forever
此时在slave输入ip a 是看不到虚拟ip
<!--[if !supportLists]-->4. <!--[endif]-->master上关闭nginx  /usr/local/nginx/sbin/nginx s stop 输入ip a 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
   link/ether 00:0c:29:c2:74:15 brd ff:ff:ff:ff:ff:ff
    inet 192.168.235.101/24 brd 192.168.235.255 scope global eth0 
   inet6 fe80::20c:29ff:fec2:7415/64 scope link
       valid_lft forever preferred_lft forever
虚拟IP地址没有了
此时在slave下输入ip a 
看到inet 192.168.235.110/32 scope global eth0 说明成功了
下面是我测试机器
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:0c:29:e3:a2:2b brd ff:ff:ff:ff:ff:ff
    inet 192.168.235.102/24 brd 192.168.235.255 scope global eth0
    inet 192.168.235.110/32 scope global eth0 //看到这个 表示切换成功 秒级别
    inet6 fe80::20c:29ff:fee3:a22b/64 scope link
       valid_lft forever preferred_lft forever
<!--[if !supportLists]-->5. <!--[endif]-->重新启动master 上的nginxkeepalived会自动切换到master 
<!--[if !supportLists]-->6. <!--[endif]-->经测试在master意外断电的情况下任然不影响切换,并在master成功修复,重新启动成功之后,slave会自动切换到master
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-319683-1-1.html 上篇帖子: nginx漏洞上传图片可入侵100万服务器 nginx+php的注意了 下篇帖子: Nginx和LVS集群负载均衡的比较
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表