nginx keepalived apache构建高可用集群www.2003.com

2019-12-05 作者:计算机教程   |   浏览(169)

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

实验目的:使用keepalived实现Nginx的双主高可用负载均衡集群。

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

实验环境:两台Nginx proxy(双主Nginx,各需要两块网卡,eth0连接内网,eth1连接外网)、两台web server(请求的负载均衡)、一台client用于验证结果。

 

www.2003.com 1

www.2003.com 2 

注意:为了不影响实验结果,在实验开始前先关闭iptables和selinux

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 

一、配置IP

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

1.配置A主机的IP

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

# ip addr add dev eth0 192.168.10.2/24

#tar xvf keepalived-1.2.7.tar.gz  #cd keepalived-1.2.7  #./configure --prefix=/usr/local/keepalived  ##指定keepalived的安装目录  #make && make install 

2.配置B主机的IP

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

# ip addr add dev eth0 192.168.10.23/24

#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.配置C主机的IP

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

# ip addr add dev eth0 192.168.10.3/24

! Configuration File for keepalived   global_defs {     notification_email {       [email protected]       [email protected]       [email protected]  ##这三个都是邮箱地址,意思是当发生故障时向这三个邮箱发送邮件     }     notification_email_from [email protected]    ##以哪个邮箱向上边定义的三个邮箱发送邮件     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.配置D主机的IP

<4>在另一台同样的方法配置;只要将priority 100 改为80即可只要小于主定义的100即可);
 两台服务器上都启动keepalived服务:service keepalived start
 
<5>测试keepalived的效果
 在nginx1上执行如下命令:

# ip addr add dev eth0 192.168.10.33/24

[[email protected] ~]# 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 命令,看到如下结果:      [[email protected] ~]# 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的高可用就成功了。。 

二、配置web服务(C和D主机都做同样配置,只需修改默认主页中的IP地址为本机的IP即可,以示区别)

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

1.安装apache

#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 

# yum -y install apache

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

2.创建默认主页

# 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 

# vim /var/www/html/index.html

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

<h1>192.168.10.3</h1>

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

3.启动apache

本文出自 “当了灵魂的躯体” 博客,请务必保留此出处http://19920601.blog.51cto.com/6110108/1154392

# service httpd start

http://www.bkjia.com/windows/613174.htmlwww.bkjia.comtruehttp://www.bkjia.com/windows/613174.htmlTechArticle本文描述:nginx基于keepalived实现高可用,基于自身的proxy功能代理web服务器,并实现负载均衡。 实验环境:redhat5.8 实验拓扑结构:nginx ke...

三、配置sorry_server(此服务配置于Nginx proxy主机上,两台Nginx proxy都做同样配置,只需修改默认主页中的IP地址为本机的IP即可,以示区别)

1.安装apache

# yum -y install apache

2.创建默认主页

# vim /var/www/html/index.html

<h1>sorry_server:192.168.10.2</h1>

3.修改监听端口为8080,以免与nginx所监听的端口冲突

# vim /etc/httpd/conf/httpd.conf

Listen 8080

4.启动apache服务

四、配置代理(两台Nginx proxy都做同样配置)

1.安装nginx

# yum -y install nginx

2.定义upstream集群组,在http{}段中定义;

# vim /etc/nginx/nginx.conf

        http {

            upstream websrvs {

                server 192.168.10.3:80;

                server 192.168.10.33:80;

                server 127.0.0.1:8080 backup;

            }

        }

3.调用定义的集群组,在server{}段的location{}段中调用;

# vim /etc/nginx/conf.d/default.conf

        server {

            location / {

                proxy_pass http://wersrvs;

                index index.html;

            }

        }

4.启动服务

# service nginx start

五、配置keepalived

A主机上操作

1.安装keepalived

# yum -y install keepalived

2.编辑A主机的配置文件/etc/keepalived/keepalived.conf,作如下配置:

! Configuration File for keepalived

    global_defs {

    notification_email {

        root@localhost

    }

    notification_email_from keepalived@localhost

    smtp_server 127.0.0.1

    smtp_connect_timeout 30

    router_id CentOS6

    vrrp_mcast_group4 224.0.100.39

    }

    vrrp_script chk_down {

        script “[[ -f /etc/keepalived/down ]] && exit 1 || exit 0”

        interval 1

www.2003.com,        weight -5

    }

    vrrp_script chk_nginx {

本文由www.2003.com发布于计算机教程,转载请注明出处:nginx keepalived apache构建高可用集群www.2003.com

关键词: