Keepalived+Nginx+Memcached构架高可用

假设场景:css

web应用服务器1 : 192.168.21.21:8001java

web应用服务器2 : 192.168.21.22:8001nginx

须要虚拟出IP:192.168.21.201:8805web

 

解决方案:vim

在web1和web2上部署一样的两套应用程序,端口号都为8001.tomcat

在web1和web2上部署nginx,nginx使用集群方式,将请求到的8805端口分发到集群服务器上。服务器

在web1和web2上部署keepalived,keepalived配置虚拟ip:192.168.21.201session

在web1和web2上部署Memcached,进行session复制。并发

 

实际路由:tcp

外部访问192.168.21.201:8805,keepalived监听到后,确认分发到哪一台nginx。nginx经过箭筒8805端口,使用集群策略,再分发到具体服务器。

 

1.安装nginx

nginx依赖openssl、pcre、zlib。

nginx具体安装方案查看:  Linux系统 - 源码编译安装Nginx

 

2.安装keepalived

# yum install -y keepalived
# keepalived -v

或者经过源码编译方式:

wget http://www.keepalived.org/software/keepalived-1.2.15.tar.gz

tar xzf keepalived-1.2.15.tar.gz

cd keepalived-1.2.15

./configure

make && make install

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

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

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

 

mkdir /etc/keepalived

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

chkconfig keepalived on

 

3.配置keepalived

假设web1为主机,web2为备份机。

编辑web1的keepalived的配置文件:

vim /etc/keepalived/keepalived.conf

 

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   #notification_email_from Alexandre.Cassen@firewall.loc
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL
}
 

vrrp_script chk_http_port {

    script "</dev/tcp/127.0.0.1/8801"   #监听nginx状态

    interval 1
    weight -2

}

vrrp_instance VI_1 {

    state MASTER     #主机设置为MASTER

    interface eth0     #使用ifconfig,查看当前网卡名称

    virtual_router_id 51   #主机ID
    priority 100         #主机优先级
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.21.201    #监听的虚拟IP
    }
    track_script {
        chk_http_port
    }

}

 

编辑web2的keepalived的配置文件:

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   #notification_email_from Alexandre.Cassen@firewall.loc
   #smtp_server 192.168.200.1
   #smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_http_port {
    script "</dev/tcp/127.0.0.1/8801"
    interval 1
    weight -2

}

vrrp_instance VI_1 {
    state BACKUP     #备份机
    interface eth0     #备份机ifconfig的网卡
    virtual_router_id 51   #必须与主机相同
    priority 99           #必须小于主机
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.21.201
    }
    track_script {
        chk_http_port
    }

}

 

4. 配置nginx

两台服务器的nginx配置同样

     vim /usr/local/nginx/conf/nginx.conf

 

5.检验keepalived和nginx

     启动keepalived和nginx:

          service keepalived start

          /usr/loca/nginx/sbin/nginx

 

     /var/log/messages

 

     在web1主机上输入:ip a,查看ip绑定状态:

   

    说明虚拟IP配置成功

     

     在web2备份机上输入:ip a,查看IP绑定状态:

     

    没有虚拟IP地址,说明主机良好的状态下,备份机没有接管。

 

     ① 模拟服务器宕机情况(服务器关机、keepalived宕机)

          手动关掉主机keepalived:

               killall keepalived

          查看主机的ip a,发现虚拟主机已没有;查看备份机的ip a,发现已经绑定虚拟主机。

          手动启动主机的keepalived:

               service keepalived start

          再次查看主机的ip a,发现虚拟主机又一次绑定。

          

          说明keepalived能够瞬时切换,运行正常。

 

     ②模拟nginx挂掉

         手动关掉主机的nginx:

               ps -ef|grep nginx

               kill -9 pid

          继续①中的验证,keepalived将虚拟主机转到备份机。

 

     以上验证说明keepalived能够保障nginx的高可用。

 

6.配置Memcached

     在两台服务器上都装上Memcached。

     memcached须要依赖libevent:

tar xf libevent-2.0.22-stable.tar.gz

cd libevent-2.0.22-stable

./configure --prefix=/usr/local/libevent

make && make install

echo "/usr/local/libevent/lib" > /etc/ld.so.conf.d/libevent.conf

ldconfig

     安装memcached:

tar xf memcached-1.4.24.tar.tar
cd memcached-1.4.24
./configure --prefix=/usr/local/memcached --with-libevent=/usr/local/libevent

make && make install

 

     启动memcached:

/usr/local/bin/memcached -d -m 1024 -u root  -p 11211 -c 1024

     启动参数说明:

  • -d 选项是启动一个守护进程,
  • -m 是分配给Memcache使用的内存数量,单位是MB,默认64MB 
  • -M return error on memory exhausted (rather than removing items)
  • -u 是运行Memcache的用户,若是当前为root 的话,须要使用此参数指定用户。
  • -l 是监听的服务器IP地址,默认为全部网卡。
  • -p 是设置Memcache的TCP监听的端口,最好是1024以上的端口
  • -c 选项是最大运行的并发链接数,默认是1024
  • -P 是设置保存Memcache的pid文件 

 

     配置tomcat下的conf/context.xml

     

<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"

                memcachedNodes="n1:192.168.21.21:11211,n2:192.168.21.22:11211"

                sticky="false"

                sessionBackupAsync="false"

                lockingMode="auto"

                requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"                  transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"

        />

 

 

     其中n1和n2 即须要负载的机器上所装memcached的ip和端口。如家政的iFly-Housekeep项目须要

     192.168.21.21和192.168.21.22两台机器,这两台上都须要安装memcached,端口都为11211

 

7.拷贝memcached的jar包

     将jar包拷入tomcat/lib/目录下

     

相关文章
相关标签/搜索