Keepalived+Nginx+Memcached构架高可用

假设场景:

web应用服务器1 : 192.168.21.21:8001

web应用服务器2 : 192.168.21.22:8001

需要虚拟出IP:192.168.21.201:8805

解决方案:

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

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

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

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

实际路由:

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

安装nginx

nginx依赖openssl、pcre、zlib。

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

安装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

配置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

    }

}

配置nginx

两台服务器的nginx配置一样

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

检验keepalived和nginx

  • 启动keepalived和nginx:
    service keepalived start
     /usr/loca/nginx/sbin/nginx
     /var/log/messages
  • 在web1主机上输入:ip a,查看ip绑定状态:
master

说明虚拟IP配置成功

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

没有虚拟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的高可用。

配置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

拷贝memcached的jar包

  • 将jar包拷入tomcat/lib/目录下
image.png

最近在把之前写在印象笔记里的一些压箱底的资料发布出来,这一篇是16年时候写的。。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容