• nginx负载均衡+keepalived高可用


    nginx负载均衡+keepalived高可用

    环境准备

    • 192.168.88.111:nginx + keepalived   MASTER
    • 192.168.88.112:nginx + keepalived   BACKUP
    • 192.168.88.113:JDK+Tomcat(运行Tomcat需要JDK),index.html内容“88.113”
    • 192.168.88.114:JDK+Tomcat(运行Tomcat需要JDK),index.html内容“88.114”
    • 192.168.88.115:vip

    上述机器要先行安装一些常用软件,如vim,lrzsz(rz在本地上传文件,sz下载文件到本地),gcc等等。

    Nginx、JDK和Tomcat均采用源码包(*.tar.gz)安装,最新的稳定版本到各自的官网下载。把软件包和安装脚本(脚本UTF8格式编写,上传到linux上记得要用vim编辑器:set ff=unix)放到机器指定的文件夹下方便寻找,如我的是:mkdir /root/install_packages。

    88.113-114安装JDK+Tomcat

    安装JDK

    #进入安装包所在目录
    cd /root/install_packages #编写安装jdk的脚本 vim install_java.sh #!/bin/bash #定义变量PKN,记录安装包名PKN=jdk-8u131-linux-x64.tar.gz #解压安装包到指定路径 tar -xf $PKN -C /usr/local/
    #在/etc/profile下追加全局变量JAVA_HOME=/usr/local/jdk1.8.0_131,并让改动立即生效 echo "export JAVA_HOME=/usr/local/jdk1.8.0_131" >> /etc/profile
    source
    /etc/profile #等待4秒后再往下执行脚本
    sleep 4
    #在/etc/profile中追加环境变量,并立即生效
    echo "export PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$JAVA_HOME/bin:$JAVA_HOME/db/bin:$JAVA_HOME/jre/bin" >> /etc/profile source /etc/profile
    #测试java是否安装成功,若成功则会显示版本信息 java
    -version sh install_java.sh #执行脚本,脚本要和安装包放在同一路径下 source /etc/profile #使得/etc/profile的改动立即生效,虽然脚本最后已经执行过,但确保改动能生效,这里再执行一次 java -version #测试jdk是否安装成功

     安装Tomcat(比较简单,解压了就能启动,不用刻意写成脚本)

    cd /root/install_packages
    #解压缩安装包到指定路径下
    tar xf apache-tomcat-8.5.43.tar.gz -C /usr/local/
    进入安装包解压路径,改个名字
    #cd /usr/local/
    mv apache-tomcat-8.5.43 tomcat8
    cd 
    #启动tomcat
    sh /usr/local/tomcat8/bin/startup.sh
    #分别在88.113和88.114编写两个index.html,放到网站根目录下
    echo "<h1>88.113</h1>" > /usr/local/tomcat8/webapps/ROOT/index.html
    echo "<h1>88.114</h1>" > /usr/local/tomcat8/webapps/ROOT/index.html

    88.111-88.112安装Nginx+keepalived

    安装Nginx(脚本有缺陷,重启机器后,nginx启动报找不到“/var/run/nginx/...”的错,但脚本中明明就已经创建了对应的路径,有待考究)。

    cd  /root/install_packages
    
    #编写安装nginx脚本 vim install_nginx.
    sh #定义变量,记录tomcat压缩包名 PKN=nginx-1.16.0.tar.gz #安装依赖包,创建用户和用户组 yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel groupadd -r nginx useradd -s /sbin/nologin -g nginx -r nginx #解压压缩包 tar xf $PKN cd nginx-1.16.0 mkdir /var/run/nginx/;chown nginx.nginx /var/run/nginx/ ./configure #生成makefile文件 --prefix=/usr/local #指定安装路径 --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf #指定主配置文件的路径 --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx/nginx.pid --user=nginx --group=nginx --with-http_ssl_module make && make install #编译,安装
    #启动nginx nginx

    nginx负载均衡配置(加粗字体即为负载均衡配置)

    worker_processes  1;    #nginx进程数,一般设置等于cpu核心数
    #工作模式及连接数上限 events { use epoll; #epoll工作模式比select好 worker_connections
    1024; #单个进程连接数上限 } http { include mime.types; default_type application/octet-stream; sendfile on; #开启高效文件传输模式 keepalive_timeout 65; #长连接超时时间,单位为秒 upstream tomcatserver{ #weight是权重,数值越大,轮询的几率越大。若服务器在fail_timeout时间内出现max_fails次连接失败,则nginx认为该服务器已挂掉,在fail_timeout时间内不再轮询该服务器 server 192.168.88.113:8080 weight=4 max_fails=3 fail_timeout=30s; server 192.168.88.114:8080 weight=2 max_fails=3 fail_timeout=30s; } server { listen 80; server_name www.kamin.com; #域名 location / { proxy_pass http://tomcatserver; #http后的名字要和upstream一样,且需要注意,名字不能带“_”号 } } }

     安装并配置keepalived

    yum install -y keepalived
    
    vim /etc/keepalived/keepalived.conf
      1 ! Configuration File for keepalived
      2 
      3 global_defs {
      4    notification_email {    #基本不用,一般使用zabbix监控
      5        747631184@qq.com
      6    }
      7    notification_email_from 747631184@qq.com
      8    smtp_server 192.168.200.1
      9    smtp_connect_timeout 30
     10    router_id nginx_master    #keepalived机器的id,不同机器要不同(114:nginx_backup)
     11 }
     12 
     13 vrrp_instance VI_1 {
     14     state MASTER    #一台MASTER主,一台BACKUP备(114:BACKUP),vip只会绑定在keepalived的其中一台,且总是绑在MASTER上
     15     interface ens32    #网卡名
     16     virtual_router_id 51    #同一组keepalived里的该参数必须相同
     17     priority 150    #优先级,数值越大, 优先级越大,优先获得资源(抢vip),BACKUP的优先级数值应比MASTER小
     18     advert_int 1    #心跳间隔
     19     authentication {    #两台机器之间的通讯密码
     20         auth_type PASS
     21         auth_pass 1111
     22     }
     23     virtual_ipaddress {    vip地址
     24         192.168.88.115/24
     25     }
     26 }

    装了keepalived的服务器切记要关闭防火墙什么的,保证它们互相之间能连通,不然容易发生裂脑状况。具体百度。

    测试

    1.访问192.168.88.115,正常情况下一定能通且流量一定是走MASTER机,因为vip总是会绑在keepalived服务没挂的MASTER机上;

    2.MASTER关,BACKUP开,正常情况下还是能访问192.168.88.115,因为keepalived检测到MASTER上的keepalived服务没有启动,因此vip转移到BACKUP上;

    有待考虑的问题

    1.keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉;

    2.宕机的机器重启后,要悉数重启nginx服务和keepalived服务,keepalived服务是通过yum安装的,可以设置开机自启动,nginx呢?

  • 相关阅读:
    C语言|作业07
    Cookie应用
    刷新页面,怎么做到不提示“不重新发送消息,则无法刷新页面”
    笔记
    笔记
    元素内部设定position
    企业微信正式发布 Tita 绩效宝,助力企业完成数字化绩效管理转型
    OKR实践:如何获得高层的理解与关注
    OKR:衡量结果和解决实际问题
    2022 年绩效评估,HR看这一篇就够了!
  • 原文地址:https://www.cnblogs.com/kaminwu/p/11351724.html
Copyright © 2020-2023  润新知