Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统

Nginx反向代理,负载均衡,redis session共享,keepalived高可用-搭建千万级系统架构

1、安装Nginx

安装机器IP地址为:

192.168.91.129 ()

192.168.91.130()

192.168.91.199(虚拟IP

1.1首先Nginx需要gcc,pcre,zlib,openssl 第三方库支持主,备服务器都安装NginxKeepalived

首先使用yum安装依赖的第三方库

yum install -y gcc  

yum install -y pcre pcre-devel  

yum install -y zlib zlib-devel  

yum install -y openssl openssl-develplain

 

1.2 下载Nginix安装包(我这边下载的是nginx-1.8.1.tar.gz

下载地址:http://nginx.org/en/download.html

 

1.3 编译安装Nginx

在根目录新建目录/soft ,并且在此目录下解压nginx-1.8.1.tar.gz

解压命令:

tar -zxvf nginx-1.8.1.tar.gz

编译安装Nginx:

cd /soft/nginx-1.8.1

./configure

make

make install

 

此时Nginx安装完毕,安装目录为/usr/local/nginx/

cd /usr/local/nginx/

启动Nginx服务

./sbin/nginx

关闭Nginx服务

./sbin/nginx -s stop

此时访问默认端口为80,http://192.168.91.129/

此时可以看到Nginx欢迎页面

 

有些童鞋可能访问不到,这时候你必须查看你的防火墙是否开启,开启你需要打开关闭防火墙,或者添加防火墙规则

第一种方案关闭防火墙(不建议):

查看防火墙状态

service iptables status

关闭防火墙

service iptables stop

第二种方案增加防火墙规则(建议):

这里的80nginx默认端口

iptables -A INPUT -p tcp --dport 80   -j ACCEPT

service iptables save

service iptables restart

 

 

2、安装Keepalived

首先画一下流程图,帮助大家更好的理解Keepalived的作用。

2.1如图主机正常情况。

 Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统

2.2如图主机宕机情况,备机接管服务。

 ·Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统

正常情况下,主nginx作为反向代理服务器即可,假设nginx服务器挂了的话,能够立即切换到备份机上,保证用户可以访问,然后运维人员把主nginx服务器故障修好之后,又能够自动切换到主nginx提供服务。通过keepalived来监测两台服务器,正常情况时,将nginx主服务器ip(192.168.91.129)绑定到keepalived定义的一个虚拟ip(我设置为192.168.91.199)上,通过这个虚拟IP可以访问nginx,然后备机(192.168.91.130)啥事不干,就是每隔一小段时间(设置为1秒)keepalived会告诉备机,你不用管,我还活着呢,如果突然主机死了,那么就会超过一秒备机没有收到主机或者的消息,那么备机马上接管主机,keeplived将虚拟ip绑定到备机身上,网站继续提供服务。

突然主机又复活了(运维人员排除故障了),那么备机又将收到主机的活着的消息,于是将管理权交回给主机,虚拟ip又绑到主机上,大概就是这么个过程,个人理解。

 

首先在两台Nginx上安装Keepalived,我们这里选用rpm安装方式,当然你可以选择其他的安装方式。只要配置文件更改就可以了。

下载 keepalived-1.2.13-5.el6_6.x86_64.rpm

keepalived依赖openssl上述我们已经使用yum安装完毕,如果上述未安装openssl请自行下载

keepalived-1.2.7-3.el6.x86_64.rpm

并且现行安装,命令如下:

rpm –Uvh --nodeps ./openssl-1.0.1e-30.el6_6.4.x86_64.rpm

 

接下来安装keepalived,命令如下:

rpm –Uvh --nodeps ./keepalived-1.2.13-5.el6_6.x86_64.rpm

 

安装完毕以后在/etc/keepalived/会出现keepalived.conf配置文件

更改其中两段配置,其他的不用管暂时用不到,192.168.91.129()的配置文件如下:

global_defs {  

notification_email {

#这里指定,遇到故障发送邮件的

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

#主机是MASTER,备机是BACKUP

state MASTER

#这里绑定网卡一般为网卡0

interface eth0

#同一实例下,virtual_router_id必须相同

virtual_router_id 51

#这里表示权重,主机为100,备机最高为99

priority 100

#主备机相互检测的时间间隔,单位为秒,这里设置一秒钟

advert_int 1

#认证设置

authentication {

#主从服务器验证方式,这里PASS为明文

        auth_type PASS

    #密码

        auth_pass 1111

    }

virtual_ipaddress {

#这里为虚拟IP

        192.168.91.199

    }

}

 

更改其中两段配置,其他的不用管暂时用不到,192.168.91.130()的配置文件如下:

global_defs {

   notification_email {

     [email protected]

   }

   notification_email_from [email protected]

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 99

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

       192.168.91.199

    }

}

 

配置完Keepalived,这里启动Keepalived

启动

service keepalived start

关闭

service keepalived stop

 

这里两台机器启动Keepalived

查看一下两台机器信息,主服务器如下:

[[email protected] keepalived]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:20:29:a1 brd ff:ff:ff:ff:ff:ff

    inet 192.168.91.129/24 brd 192.168.91.255 scope global eth0

    inet 192.168.91.199/32 scope global eth0

    inet6 fe80::20c:29ff:fe20:29a1/64 scope link

       valid_lft forever preferred_lft forever

3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN

    link/ether be:0d:e9:32:77:00 brd ff:ff:ff:ff:ff:ff

 

备用服务器

[[email protected] keepalived]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:e8:b5:e2 brd ff:ff:ff:ff:ff:ff

    inet 192.168.91.130/24 brd 192.168.91.255 scope global eth0

    inet6 fe80::20c:29ff:fee8:b5e2/64 scope link

       valid_lft forever preferred_lft forever

3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN

link/ether c2:ee:84:44:8d:48 brd ff:ff:ff:ff:ff:ff

 

 

这里我们可以看到,主服务器上面 inet 192.168.91.199/32 scope global eth0这里显示我们的虚拟ip绑定成功,而备用服务器没有绑定虚拟IP。我们通过访问虚拟IP访问我们后端的服务。

 Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统

上面显示one,访问的是我们的主服务器192.168.91.129

 

我们这边测试Keepalived是否生效,我们关闭主服务器的Keepalived,或者关闭服务器。

 Nginx反向代理,负载均衡,Redis集群 Twemproxy,redis session共享,keepalived高可用-搭建千万级网站系统

这里瞬间跟改为two,访问的是我们备机。我们看看备机的网卡信息

[[email protected] keepalived]# ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:e8:b5:e2 brd ff:ff:ff:ff:ff:ff

    inet 192.168.91.130/24 brd 192.168.91.255 scope global eth0

    inet 192.168.91.199/32 scope global eth0

    inet6 fe80::20c:29ff:fee8:b5e2/64 scope link

       valid_lft forever preferred_lft forever

3: pan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN

    link/ether c2:ee:84:44:8d:48 brd ff:ff:ff:ff:ff:ff

 

这里备机已经获取到虚拟IP地址

 

 

当然实践过程我们会遇到脑裂等问题,这些问题不在这节讨论范围内后续补充。

然后我们后续做的操作就是要保证NginxKeepalived要保持共存亡的,这些可以写shell脚本,相互扫描。

 

 

这里的tomcat安装,与通过nginx访问tomcat不叙述。

通过nginx访问多台tomcat会遇到session共享的问题,请参考

http://blog.csdn.net/u013381397/article/details/51565288这篇文章。

Redis集群Twemproxy请参考另外一篇文章 http://blog.csdn.net/u013381397/article/details/72472521