设为首页 收藏本站
查看: 2007|回复: 6

[经验分享] nginx+keepalived+apache构建高可用集群

[复制链接]

尚未签到

发表于 2013-3-15 09:14:39 | 显示全部楼层 |阅读模式

本文描述:nginx基于keepalived实现高可用,基于自身的proxy功能代理web服务器,并实现负载均衡。

实验环境:redhat5.8
实验拓扑结构:nginx+keepalived服务器2台,apache服务器2台,构建简单的高可用集群


174325671.jpg

ip分配:

  • nginx1.weiyang.org 192.168.3.22  nginx1  
  • nginx2.weiyang.org 192.168.3.33  nginx2  
  • apache1.weiyang.org 192.168.3.205   apache205  
  • apache2.weiyang.org 192.168.3.206   apache206

一、实验环境安装和配置
nginx和apache的安装配置这里就不细说了,我采用的是编译安装;需要注意的是两台apache的网页文件目录下的index.html中内容分别是:it works from 205 和 it works from 206;便于我们来区分是否实现了负载均衡的效果(注:这里只是虚拟机中的简单实验,实际生产环境中文件必须保持一致)

二、在前端两台nginx上安装keepalived
keepalived的下载地址:http://www.keepalived.org/download.html;这里我使用最新的1.2.7版本。
注:事先yum安装开发包组“Development Tools” “Development Libraries” 已事先安装完毕
<1>下载完成后解压安装:

  • [Shell] 纯文本查看 复制代码
    #tar xvf keepalived-1.2.7.tar.gz  
    #cd keepalived-1.2.7  
    #./configure --prefix=/usr/local/keepalived  ##指定keepalived的安装目录  
    #make && make install 

<2>安装完成后,为keepalived提供配置文件和服务脚本

  • [Shell] 纯文本查看 复制代码
    #mkdir /etc/keepalived  ##为keepalived创建配置文件目录,默认配置文件从/etc/keepalived下读取  
    #cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ ##复制keepalived的二进制命令   
    #cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/  ##提供启动脚本  
    #cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ ##keepalived的主配置文件 

<3>编辑/etc/keepalived/keepalived.conf文件,修改内容如下:

  • [Shell] 纯文本查看 复制代码
    ! Configuration File for keepalived  
     
    global_defs {  
       notification_email {  
         [email]acassen@firewall.loc[/email]  
         [email]failover@firewall.loc[/email]  
         [email]sysadmin@firewall.loc[/email]  ##这三个都是邮箱地址,意思是当发生故障时向这三个邮箱发送邮件  
       }  
       notification_email_from [email]Alexandre.Cassen@firewall.loc[/email]    ##以哪个邮箱向上边定义的三个邮箱发送邮件  
       smtp_server 127.0.0.1  
       smtp_connect_timeout 30 ##smtp连接超时时间  
       router_id LVS_DEVEL  ##服务器标识符  
    }  
     
    vrrp_instance VI_1 {  
        state MASTER ##主服务器,从服务器设置为BACKUP;当master发生故障时,会自动转移到从上作为主,当主恢复工作时,再自动转移到定义的主上  
        interface eth0 ##指定从哪个网卡发送VRRP信息的  
        virtual_router_id 51 ##虚拟路由的组id,主和从必须在同一个组  
        priority 100 ##优先权,从的设置为80  
        advert_int 1   
        authentication {  
            auth_type PASS ##认证方式  
            auth_pass 1111  ##认证的密钥  
        }  
        virtual_ipaddress {  
            192.168.3.18    ##VRRP的ip,也就是向客户端开放的ip,即vip  
        }  
    }  
     配置到这里就可结束了,之下的这里用不到; 

<4>在另一台同样的方法配置;只要将priority 100 改为80即可(只要小于主定义的100即可);
两台服务器上都启动keepalived服务:service keepalived start

<5>测试keepalived的效果
在nginx1上执行如下命令:

  • [Shell] 纯文本查看 复制代码
    [iyunv@nginx1 ~]# ip addr  
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue   
            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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000  
            link/ether 00:0c:29:e7:cb:a0 brd ff:ff:ff:ff:ff:ff  
            inet 192.168.3.22/24 brd 192.168.2.255 scope global eth0  
            inet 192.168.3.18/32 scope global eth0  
            inet6 fe80::20c:29ff:fee7:cba0/64 scope link   
                valid_lft forever preferred_lft forever  
        3: sit0: <NOARP> mtu 1480 qdisc noop   
            link/sit 0.0.0.0 brd 0.0.0.0  
        ###vip绑定在nginx1上,现在我们停掉nginx1上的keepalived  
          
        #service keepalived stop    
        ###在nginx2上执行ip addr 命令,看到如下结果:  
        [iyunv@nginx2 ~]# ip addr  
        1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue   
            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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000  
            link/ether 00:0c:29:4f:9a:9d brd ff:ff:ff:ff:ff:ff  
            inet 192.168.3.33/24 brd 192.168.2.255 scope global eth0  
            inet 192.168.3.18/32 scope global eth0  
            inet6 fe80::20c:29ff:fe4f:9a9d/64 scope link   
                valid_lft forever preferred_lft forever  
        3: sit0: <NOARP> mtu 1480 qdisc noop   
            link/sit 0.0.0.0 brd 0.0.0.0  
              
    到此为止,基于keepalived实现nginx的高可用就成功了。。 

三、下面来做nginx的反向代理,构建简单的高可用负载均衡集群:
在前端两台nginx服务器上做同样的修改:
编辑nginx的配置文件:

  • [Shell] 纯文本查看 复制代码
    #vim /etc/nginx/nginx.conf  
        user nginx nginx; ##以哪个用户和用户组运行nginx;安装nginx之前要先创建这个组和用户  
        worker_processes  2;    ##开启几个进程  
        events {  
        use epoll;              ##nginx的工作机制  
        worker_connections  1024;   ##单进程最大啊连接数,这是默认值,可修改为65535  
        }  
     
     
        http {  
            include       mime.types;  
            default_type  application/octet-stream;  
        sendfile        on;  
        #tcp_nopush     on;  
     
        #keepalive_timeout  0;  
        keepalive_timeout  65;  ##nginx长连接时长  
     
        #gzip  on;  
        upstream weiyang {      ##定义后端web服务器的cluster  
            server 192.168.3.205:80 max_fails=3 fail_timeout=10s;   ##后端服务器的ip,以及最大错误数和超时时长  
            server 192.168.3.206:80 max_fails=3 fail_timeout=10s;  
        }  
     
     
        server {  
            listen       80;  
            server_name  192.168.3.18;    ##vrrp的ip地址  
            location / {  
                    root   html;  
                    index  index.html index.html;  
                    proxy_pass http://weiyang/;     ##为哪个backend做反向代理  
                    proxy_redirect off;  
                    proxy_set_header X-Real-IP $remote_addr;  
                    proxy_set_header X-Forwarded-For Proxy_add_x_forwarded_for;  
            }  
            location /nginx {       ##nginx的状态页面  
                    access_log off;  
                    stub_status on;  
            }  
     
            #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服务,同时开启后端两台web服务器的httpd服务  
     
    #service nginx restart  
    #service httpd start 

四、实现nginx+keepalived+apache构建高可用集群,我们还要修改如下信息:
试想,如果nginx1服务器上的nginx服务故障了,但keepalived服务运行正常,照样会形成单点故障;
为了实时的检测nginx服务的运行是否正常,这里写一个小脚本,来检测它的运行情况。
脚本实现思想:当nginx服务故障时,我们就直接杀掉keepalived的进程,来实现故障转移:
脚本如下:

  • [Shell] 纯文本查看 复制代码
    # vim ngpid.sh  
    #!/bin/bash    
    N='ps -C nginx --no-header |wc -l'                ## 查看是否有nginx进程,并对其做行计算,把计算值赋给变量N    
    if [ $N -eq 0 ];then                              ## if语句进行判断,若N不为0,此脚本执行结束;若N为0,试着重启nginx服务,睡2秒,   
             service nginx start  
             sleep 2                  
             if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then   ##再次判断,若依然为0,  
             killall keepalived                                   ##则直接杀掉keepalived的所有进程,实现故障转移     
             fi   
    fi   
    # chmod +x ng_pid.sh  
     
    将此脚本放在/root/bash/下,并写入任务计划,每一小时执行一次,如下所示  
    echo -e '* 1 * * * /root/bash/ngpid.sh' >> /etc/crontab 

五、访问测试
在本地主机浏览器中输入如下地址:
http://192.168.3.18  查看页面显示结果是否轮询,
这时nginx1为高可用的主:将nginx服务停掉,稍等3秒。。
再次访问http://192.168.3.18  查看页面显示是否依然正常轮询

基于nginx的高可用负载均衡到此配置成功,新手一个,大家多多指教。。



运维网声明 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.yunweiku.com/thread-3964-1-1.html 上篇帖子: Nginx+Keepalived高可用架构平台 下篇帖子: nginx+keepalived构建高可用web服务器 apache
0

尚未签到

发表于 2013-3-18 12:22:23 | 显示全部楼层
生我之前谁是我,生我之后我是谁?

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

尚未签到

发表于 2013-5-17 08:59:14 | 显示全部楼层
关羽五绺长髯,风度翩翩,手提青龙偃月刀,江湖人送绰号——刀郎。

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

尚未签到

发表于 2013-5-19 17:02:34 | 显示全部楼层

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

尚未签到

发表于 2013-5-22 07:55:52 | 显示全部楼层
没看完~~~~~~ 先顶,好同志

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

发表于 2013-5-26 12:34:22 | 显示全部楼层
爱——不是想出来的,爱——是做出来的!!

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

尚未签到

发表于 2013-5-30 21:22:12 | 显示全部楼层
不错不错,楼主您辛苦了。。。

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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