设为首页 收藏本站
查看: 1198|回复: 0

[经验分享] Lvs + Ngnix + Haproxy + Keepalived + Tomcat 实现三种HA软负载均衡和Tomcat Session共享

[复制链接]

尚未签到

发表于 2015-11-20 09:29:50 | 显示全部楼层 |阅读模式
环境准备:



一、11台测试机器
    hostname:v1 ~ v10   (10台测试机)

    ip:192.168.33.81(v1) ~ 192.168.33.90(v101)

    由于在内网测试,需要搭建个内网yum源,方便安装软件。yum所在机器为192.168.33.101



二、待实现功能
    下面分别使用haproxy/nginx/lvs实现HA + 负载均衡,软件环境如下:


        v1:33.81 nginx


        v2:33.82 nginx   

       v3:33.83 tomcat


        v4:33.84 tomcat

        v5:33.85 tomcat

        v6:33.86 tomcat

       v7:33.87 haproxy


        v8:33.88 haproxy

        v9:33.89 lvs


        v10:33.90 lvs







  
1. 安装依赖包

yum -y install pcre-devel yum -y install openssl-devel yum -y install gcc yum -y install lrzsz yum -y install openssh-clients


2. 安装nginx

2.1. 上传、解压、重命名nginx
  su - root
  1cd /usr/local
  2rz -y
  3tar -xzvf nginx-1.7.7.tar.gz
  4mv nginx-1.7.

1进入解压后的目录,指定安装路径, 注:不指定prefix,则可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc cd /usr/local/nginx ./configure --prefix=/usr/local/nginx --conf-path=/usr/local/nginx/nginx.conf 2编译: make 3安装: make install 4启动 /usr/local/nginx/sbin/nginx 5查看 http://192.168.xx.xxx 出现:welcome Nginx,就安装ok了。 6停止 /usr/local/nginx/sbin/nginx s stop


2.2. 安装nginx
  



2.3. 安装jdk

1su - root 用户 2、进入usr目录 cd /usr 3、在usr目录下建立java安装目录 mkdir m 755 java 4、将jdk-6u24-linux-i586.bin拷贝到java目录下 rz -y 4、安装jdk cd /usr/java chmod 755 jdk-6u24-linux-i586.bin ./jdk-6u24-linux-i586.bin 注意:如果出现/lib/ld-linux.so.2: bad ELF interpreter:No such file or directory,安装下glic即可: yum install glibc.i686 5、安装完毕为他建立一个链接以节省目录长度 ln -s /usr/java/jdk1.6.0_24//usr/jdk 6、配置环境变量 vim /etc/profile 添加内容: vi /etc/profile export JAVA_HOME=/usr/jdk export PATH=$PATH:$JAVA_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_HOME PATH CLASSPATH 7、执行下命令(source命令也称为“点命令”,也就是一个点符号(.)。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。) source /etc/profile


2.4. 安装tomcat

1上传、解压: rz -y tar -zxvf apache-tomcat-6.0.37.tar.gz 2、重命名: mv apache-tomcat-6.0.37 tomcat

  

2.5. 重新配置nginx

1cd /usr/local/nginx   2vi /usr/local/nginx/nginx.conf

  添加:

user  nobody nobody;#定义Nginx运行的用户和用户组 worker_processes  4;#nginx进程数,建议设置为等于CPU总核心数。 error_log  logs/error.loginfo;#全局错误日志定义类型,[ debug | info | notice | warn | error | crit ] worker_rlimit_nofile 1024;#一个nginx进程打开的最多文件描述符数目,所以建议与ulimit -n的值保持一致。 pidlogs/nginx.pid;#进程文件  #工作模式及连接数上限 events { use epoll;#参考事件模型,use [ kqueue | rtsig | epoll |/dev/poll | select | poll ]; epoll模型是Linux2.6以上版本内核中的高性能网络I/O模型     worker_connections  1024;#单个进程最大连接数(最大连接数=连接数*进程数) }  #设定http服务器,利用它的反向代理功能提供负载均衡支持 http {     include       mime.types;#文件扩展名与文件类型映射表     default_type  application/octet-stream;#默认文件类型 #设定负载均衡的服务器列表 upstream  tomcatxxxcom  {      server   192.168.56.200:8080;      server   192.168.56.201:8080; } #设定日志格式     log_format  www_xy_com  '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';      sendfile        on;#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常把这个改成off     keepalive_timeout  65;#长连接超时时间,单位是秒  #gzip  on; #设定虚拟主机,默认为监听80端口     server {         listen       80;         server_name  tomcat.xxx.com;#域名可以有多个,用空格隔开  #charset koi8-r; #设定本虚拟主机的访问日志         access_log  /data/logs/access.log  www_xy_com; #对 "/" 启用反向代理    location /{    proxy_pass        http://tomcatxxxcom;                proxy_set_header   Host             $host;                proxy_set_header   X-Real-IP        $remote_addr;                proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for; }  #error_page   500 502 503 504  /50x.html;         location =/50x.html {             root   html; } } }

  3、创建logs所需要的文件夹/data /logs/

cd / mkdir m 755 data cd data mkdir m 755 logs

  
  4、启动tomcatnginx

/usr/local/tomcat/bin/startup.sh /usr/local/nginx/sbin/nginx

  5、修改hosts,加入
  192.168.56.99 tomcat.xxx.com
  
  6、访问http://redis.xxy.com




  


  上面部分安装,我是用脚本装的。没按照上面来,使用上面配置时,启动nginx时,提示我&quot;[emerg] 7458#0: unknown directive &quot;<feff>user&quot; in /usr/local/nginx/nginx.conf:1&quot;,
  于是,我就直接拿着nginx.conf.default修改了,改改也能用。下面是我修改后的配置(v1下:/usr/local/nginx/nginx.conf):

worker_processes  1;error_log  logs/error.log  info;pid        logs/nginx.pid; events {    use epoll;    worker_connections  1024;} http {    include       mime.types;    default_type  application/octet-stream;# 配置需要代理的服务器列表    upstream servers {       server v3:8080;       server v4:8080;}     log_format  main  '$remote_addr - $remote_user [$time_local] &quot;$request&quot; ''$status $body_bytes_sent &quot;$http_referer&quot; ''&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;';     access_log  logs/access.log  main;     sendfile        on;     keepalive_timeout  65;     server {        listen       80;        server_name  localhost;         access_log  logs/host.access.log  main;         location /{#引用上面的配置            proxy_pass http://servers;            proxy_set_header Host $host;            proxy_set_header X-Real_IP $remote_addr;            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;            root   html;            index  index.html index.htm;}         error_page   500502503504/50x.html;        location =/50x.html {            root   html;}} }
访问v1:80,使用rr策略自动轮巡v3,v4效果图:
   











对了,上面那句v3,v4的提示语,是我echo一句话把tomcat默认的ROOT/index.jsp 给覆盖了,用作测试




    1.首先使用keepalived &#43; nginx &#43; tomcat 实现






测试过程中发现,我收到将nginx kill之后keepalived居然ip不飘,检查了配置也没发现问题。唯一能让keepavlied执行notify.sh脚本时候就是在启动kp时,
会检查nginx是否存活,不存活则启动。 现在已经实现了


于是又加了个脚本单独去监控kp ,脚本名称为:monitor.sh,代码在下边
v1的keepalived脚本:
   

!ConfigurationFilefor keepalived global_defs {} vrrp_script chk_nginx {        script &quot;killall -0 nginx&quot;        interval 1        weight -2} vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 1    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111}     track_script {        chk_nginx}     virtual_ipaddress {192.168.33.181/24}     notify_master &quot;/etc/keepalived/notify.sh master&quot;    notify_backup &quot;/etc/keepalived/notify.sh backup&quot;    notify_fault &quot;/etc/keepalived/notify.sh fault&quot;} vrrp_instance VI_2 {    state BACKUP     interface eth0    virtual_router_id 2    priority 98    advert_int 1    authentication {        auth_type PASS        auth_pass 1111}     track_script {        chk_nginx}     virtual_ipaddress {192.168.33.182/24}     notify_master &quot;/etc/keepalived/notify.sh master&quot;    notify_backup &quot;/etc/keepalived/notify.sh backup&quot;    notify_fault &quot;/etc/keepalived/notify.sh fault&quot;}


v2的keepalived脚本:
!ConfigurationFilefor keepalived global_defs {} vrrp_script chk_nginx {        script &quot;killall -0 nginx&quot;        interval 1        weight -2}  vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 1    priority 98    advert_int 1    authentication {        auth_type PASS        auth_pass 1111}     track_script {        chk_nginx}     virtual_ipaddress {192.168.33.181/24}     notify_master &quot;/etc/keepalived/notify.sh master&quot;    notify_backup &quot;/etc/keepalived/notify.sh backup&quot;    notify_fault &quot;/etc/keepalived/notify.sh fault&quot;}  vrrp_instance VI_2 {    state MASTER     interface eth0    virtual_router_id 2    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 1111}     track_script {        chk_nginx}     virtual_ipaddress {192.168.33.182/24}     notify_master &quot;/etc/keepalived/notify.sh master&quot;    notify_backup &quot;/etc/keepalived/notify.sh backup&quot;    notify_fault &quot;/etc/keepalived/notify.sh fault&quot;}


v1,v2共同脚本:
monitor.sh:
#!/bin/bashwhile true;do        A=`ps -ef|grep nginx |wc -l`        B=`ps -ef|grep keepalived |wc -l`if[ $A -eq 1];then             echo 'restart nginx!!!!'/usr/local/nginx/sbin/nginxif[ $A -eq 1];thenif[ $B -gt 1];then                           killall keepalived                           service keepalived start &fififi if[ $B -eq 1];then                service keepalived start &fi         sleep 5done


notify.sh
#!/bin/bash# keepalived notify scriptcontact='root@localhost'notify(){            mailsubject=&quot;`hostname` to be $1: vip floating&quot;                mailbody=&quot;`date '&#43;%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1&quot;                    echo $mailbody | mail -s &quot;$mailsubject&quot; $contact} case&quot;$1&quot;in        master)                notify master                echo &quot;变成主了,触发master!&quot;>>/root/k_tips.log/usr/local/nginx/sbin/nginx                exit 0;;        backup)                notify backup                echo &quot;变成从了,触发backup事件!&quot;>>/root/k_tips.log/usr/local/nginx/sbin/nginx                exit 0;;         fault)                notify fault                echo &quot;脑列了,触发fault事件!&quot;>>/root/k_tips.log/usr/local/nginx/sbin/nginx -s stop                exit 0;;*)               echo 'Usage: notify.sh {master|backup|fault}'               exit 1;;esac





    2.使用keepalived &#43; haproxy &#43; tomcat 实现


        2.1 安装haproxy


            yum -y install haproxy

        2.2 修改配置

            

    # to have these messages end up in /var/log/haproxy.log you will# need to:#   # 1) configure syslog to accept network log events.  This is done#    by adding the '-r' option to the SYSLOGD_OPTIONS in#    /etc/sysconfig/syslog#   # 2) configure local2 events to go to the /var/log/haproxy.log#   file. A line like the following can be added to#   /etc/sysconfig/syslog#   #    local2.*                       /var/log/haproxy.log#   # 上面说我们要把日志写到/var/log/haproxy.log需要修改以下两个地方:1./etc/sysconfig/syslog , 这个我现在用的centos6.6已经没有了,取代它的是同目录下的rsyslogvi /etc/sysconfig/rsyslog这里对它做了以下更改:修改前:SYSLOGD_OPTIONS=&quot;-c 5&quot;修改后:SYSLOGD_OPTIONS=&quot;-c 2 -r&quot;
2. /etc/rsyslog.conf 修改日志存放位置vi /etc/rsyslog.conf
我在local7.*下面加了一行,修改后是这样的:# Save boot messages also to boot.loglocal7.*                                                /var/log/boot.loglocal2.*                                                /var/log/haproxy.log
好了,基本的配置可以了。
下面开始修改/etc/haproxy/haproxy.cfg


   


    3.使用keepalived &#43; lvs &#43; tomcat 实现




未完待续。。。

运维网声明 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-141363-1-1.html 上篇帖子: redis+Keepalived主从热备秒级切换 下篇帖子: LVS+Keepalived实现负载均衡和双机热备
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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