keepalived + nginx 实现高可用之远程面签项目

面签系统部署文档

1. 准备工作

1.1 前提

  • 运维应确保各个系统网络策略已经开通并验证通过
  • 运维需提供安装系统的DVD光盘或镜像
  • 云屋视频模块由云屋工程师负责部署安装
  • 客服系统由客服系统工程师负责部署安装
  • 面签系统由面签系统工程师负责部署安装

    1.2 开始准备工作

    //创建用户
    useradd sunyard
    passwd sunyard
    //授权
    chmod -v u+w /etc/sudoers? ?(增加 sudoers 文件的写的权限,默认为只读)
    vi /etc/sudoers (修改 sudoers)
    ----------------------------------
    root? ? ALL=(ALL)? ? ? ?ALL
    sunyard ? ALL=(ALL)? ? ? ?ALL (添加这一行)
    ----------------------------------
    //保存,退出
    chmod -v u-w /etc/sudoers (删除 sudoers 的写的权限)

    //挂载U盘
    mkdir /mnt/usb_disk
    mount /dev/sda /mnt/usb_disk
    //拷贝文件
    cp /mnt/usb_disk/soft /home/sunyard/soft

2. 安装nginx(使用root用户)

2.1 安装(正则匹配)模块

tar -zxvf pcre-8.42.tar.gz
./configure
make && make install

2.2 安装nginx

./configure --prefix=/usr/local/nginx
make && make install

2.3 配置nginx

修改nginx.conf文件
vi /usr/local/nginx/conf/nginx.conf
添加如下内容
upstream gzb{
  server 180.1.36.104:7001;
  server 180.1.36.105:7001;
}
server {
    listen       7001;
    server_name  localhost;

    location / {
        proxy_pass http://gzb;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Real-PORT $remote_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

检查nignx配置文件正确性
/usr/local/nginx/sbin/nginx -t    

3. 安装keepalived

3.1 解压安装keepalived

   tar -xzvf keepalived-2.0.7.tar.gz
   cd keepalived-2.0.7
   ./configure --prefix=/usr/local/keepalived
   make && make install

3.2 配置keepalived

a. 在ngx-master,和ngx-backup主机上执行
    ln -s /usr/local/keepalived/etc/keepalived /etc/keepalived
    ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived
    ln -s /usr/local/keepalived/sbin/keepalived /usr/bin/keepalived
    复制脚本到
    cp /home/sunyard/soft/keepalived-2.0.7/keepalived/etc/init.d/keepalived /etc/init.d/

    chkconfig keepalived on  //设置开机启动
b. 修改ngx-master机子上的keepalived.conf
    vi /etc/keepalived/keepalived.conf
    覆盖文件
c. 修改ngx-backup机子上的keepalived.conf
    覆盖文件
d. 写入脚本文件
    vi /usr/local/keepalived/sbin/check_nginx.sh
    写入
    #!/bin/bash
    if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
        #echo 1
        /usr/local/nginx/sbin/nginx
        sleep 5
        if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
            /etc/init.d/keepalived stop
            #echo 2
        fi
    fi

e. 脚本加上可执行权限
    chmod +x /usr/local/keepalived/sbin/check_nginx.sh
f. 验证
    service keepalived start  #启动Nginx-Master
    service keepalived start  #启动Nginx-Backup
    ip addr  #2台服务器分别执行,绑定虚拟IP在Nginx-Master
    service keepalived stop  #停止Nginx-Backup
    ip addr  #2台服务器分别执行,绑定虚拟IP在Nginx-Backup
    service keepalived start  #再启动Nginx-Backup
    ip addr  #2台服务器分别执行,绑定虚拟IP在Nginx-Master

4. 安装应用(面签系统)

4.1 安装JDK

a. 用root用户登录到linux 应用服务器
b. 在usr目录下建立java安装目录
    cd /usr
    mkdir java
c. 将jdk安装包拷贝到java目录下
    cp /home/sunyard/soft/jdk-8u181-linux-x64.tar.gz /usr/java/
d. 解压jdk到当前目录
    tar -zxvf jdk-8u181-linux-x64.tar.gz
e.配置环境变量(新的启动脚本指定jdk路径,不做环境变量配置)
    vim /etc/profile
    在文件中添加如下内容
    export JAVA_HOME=/usr/java/jdk1.8.0_181
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
f. 让环境变量生效
    source /etc/profile
g. 查看安装情况
    java -version

4.2 面签系统应用安装

a. 将软件安装包拷贝到sunyard 目录中
   cp /xxx/gzb-0.0.1-SNAOSHOT.jar /home/sunyard/
b. 执行shell脚本启动jar包
   chmod +x gzbservice.sh
   ./gzbservice.sh start

5. 设置共享存储

a. 在master机启动NFS
   service rpcbind start
   service nfs start
b. 在设置共享目录,把该目录开放给180.1.36.105,编辑/etc/exports,增加一行
   /home/sunyard/video_pic 180.1.36.105(rw,no_root_squash,no_all_squash,sync)
c. 使配置生效,输入命令:exportfs -r

d. 关闭防火墙 systemctl stop firewalld
   开机禁用防火墙 systemctl disable firewalld
e. 在backup机具上mount
   mount -t nfs 180.1.36.104:/home/sunyard/video_pic /home/sunyard/video_pic

6. 数据初始化

6.1 数据库脚本初始化

面签系统和客服系统公用一个oracle数据库实例,直接创建用户即可
以下内容均在plsql中执行

  1. 创建表空间
    create tablespace mq_data datafile ‘+DATA/xyktelbank/datafile/mq_data.dbf‘ size 30G;
  2. 创建VIDEO 用户
    create user video identified by video;
  3. 授权角色
    grant connect, resource, dba to video;
  4. 使用video用户登录,创建table
    打开命令窗口执行1.table.sql
  5. 创建sequence
    打开命令窗口执行2.sequence.sql
  6. 创建synonym
    打开命令窗口执行3.synonym.sql
  7. 创建trigger
    打开命令窗口执行4.trigger.sql
  8. 导入初始化数据
    打开命令窗口执行5.startdata.sql

    6.2 加入话术模版

    在远程面签应用>话术配置中,加入话术模版远程面签话术模板1.0.txt

    7. 安装问题汇总

    7.1 error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory

    如果是32位系统
    ln -s /usr/local/lib/libpcre.so.1 /lib
    如果是64位系统
    ln -s /usr/local/lib/libpcre.so.1 /lib64
    然后在启动nginx就OK了

    7.2 设置本地yum源

    a. 如果使用虚拟机,那么就在虚拟机中挂载DVD的iso文件。
    b. 使用如下命令新建一个挂载点并挂载修改yum源配置
    mkdir /media/CentOS
    mount -t auto /dev/cdrom /media/CentOS

    c. 修改yum源配置,把CentOS-Base.repo文件备份
    cd /etc/yum.repos.d/
    mv CentOS-Base.repo CentOS-Base.repo.bak
    vi CentOS-Media.repo
    设置 CentOS-Media.repo 中 enabled=1
    yum clean all

    7.3 安装gcc

    yum install gcc
    yum install gcc-c++

    7.4 安装OpenSSL

    yum -y install openssl-devel

    7.5 WARNING - this build will not support IPVS with IPv6. Please install libnl/libnl-3 dev libraries to support IPv6 with IPVS.

    yum -y install libnl libnl-devel libnfnetlink-devel

    离线安装
    rpm -ivh libnl-devel-1.1.4-3.el7.x86_64.rpm

    7.6 configure: error: libnfnetlink headers missing

    rpm -ivh libnfnetlink-devel-1.0.1-4.el7.x86_64.rpm

8 应用部署环境

  • 应用服务器
    180.1.36.104
    180.1.36.105
  • nginx服务器
    180.1.36.101 master
    180.1.36.102 backup
    180.1.36.103 VIP
  • 云屋服务器
    180.1.36.98 master
    180.1.36.99 backup
    180.1.36.100 VIP

9 高可用验证方案

使用 Keepalived 实现nginx 主从热备,nginx实现面签应用的负载均衡。
启动 180.1.36.104 和 180.1.36.105 应用
输入ps-ef | grep gzb 查看应用进程是否存在

  1. 停止180.1.36.104 上的应用
    ./gzbservice.sh stop
  2. 查看请求是否能正常返回
    curl http://180.1.36.103/VTA-GZB/
  3. 启动180.1.36.104 上的应用,停止180.1.36.105上的应用.
  4. 查看请求是否能正常返回
    curl http://180.1.36.103/VTA-GZB/
  5. 杀死180.1.36.101上的nginx进程
  6. 查看请求是否能正常返回
    curl http://180.1.36.103/VTA-GZB/
  7. 等待片刻,查看nginx进程是否存在
    ps -ef | grep nginx
  8. 杀死180.1.36.102上的nginx进程
  9. 查看请求是否能正常返回
    curl http://180.1.36.103/VTA-GZB/
  10. 等待片刻,查看nginx进程是否存在

10 云屋高可用验证

云屋视频录像存储使用fastdfs自动同步,无需手动同步,
启动180.1.36.98, 启动180.1.36.99云屋视频服务

  1. 停止180.1.36.98 云屋服务
    opt/cloudroom/scripts/cloudroom-services.sh stop
  2. 查看请求是否正常返回
    curl http://180.1.36.100:2727/
  3. 验证录像同步
    分别登录 http://180.1.36.98:2727/和http://180.1.36.99:2727/后台管理系统查看,播放录像。

11 keepalived ip 漂移验证

  1. 启动 先后在主,从服务器上启动 keepalived服务,ip addr查看主服务器上网卡是否绑定虚拟IP
  2. 停止 主服务器上 keepalived 查看从服务器网卡是否绑定虚拟IP

附件

应用启动脚本 gzbservice.sh

#!/bin/bash
#JDK所在路径
JAVA_HOME="/usr/java/jdk1.8.0_181"
#java虚拟机启动参数
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
#这里可替换为你自己的执行程序,其他代码无需更改
APP_NAME=gzb-0.0.1-SNAPSHOT.jar
#app启动参数
APP_OPTS="--spring.profiles.active=test"
#使用说明,用来提示输入参数
usage() {
    echo "Usage: sh 执行脚本.sh [start|stop|restart|status]"
    exit 1
}

#检查程序是否在运行
is_exist(){
  pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
  #如果不存在返回1,存在返回0
  if [ -z "${pid}" ]; then
   return 1
  else
    return 0
  fi
}

#启动方法
start(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is already running. pid=${pid} ."
  else
    nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar lib/$APP_NAME $APP_OPTS > start.log 2>&1 &
  fi
}

#停止方法
stop(){
  is_exist
  if [ $? -eq "0" ]; then
    kill -9 $pid
  else
    echo "${APP_NAME} is not running"
  fi
}

#输出运行状态
status(){
  is_exist
  if [ $? -eq "0" ]; then
    echo "${APP_NAME} is running. Pid is ${pid}"
  else
    echo "${APP_NAME} is NOT running."
  fi
}

#重启
restart(){
  stop
  start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
  "start")
    start
    ;;
  "stop")
    stop
    ;;
  "status")
    status
    ;;
  "restart")
    restart
    ;;
  *)
    usage
    ;;
esac

检测nginx是否存活 check_nginx.sh

#!/bin/bash
if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
    #echo 1
    /usr/local/nginx/sbin/nginx
    sleep 5
    if [ "$(ps -ef | grep "nginx: master process"| grep -v grep )" == "" ];then
        /etc/init.d/keepalived stop
        #echo 2
    fi
fi

ngx_master keepalived.conf 配置

! Configuration File for keepalived
global_defs {
   notification_email {
       [email protected]     #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
   }
   notification_email_from [email protected]  #设置邮件的发送地址
   smtp_server 127.0.0.1      #设置smtp server地址
   smtp_connect_timeout 30    #设置连接smtp server的超时时间
   router_id LVS_DEVEL        #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
vrrp_script chk_nginx {
    script "/usr/local/keepalived/sbin/check_nginx.sh"   #该脚本检测ngnix的运行状态,并在nginx进程不存在时尝试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。
    interval 2              #每2s检测一次
    weight 2                #检测失败(脚本返回非0)则优先级2
}
vrrp_instance VI_1 {
    state MASTER            #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    interface ens33         #指定HA监测网络的接口
    virtual_router_id 55    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    priority 100            #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    advert_int 1            #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {        #设置验证类型和密码
        auth_type PASS      #设置验证类型,主要有PASS和AH两种
        auth_pass linuxeye  #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {     #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        180.1.36.103
    }
    track_script {
        chk_nginx           #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    }
}

ngx_backup keepalived.conf 配置

! Configuration File for keepalived
global_defs {
   notification_email {
       [email protected]     #设置报警邮件地址,可以设置多个,每行一个。 需开启本机的sendmail服务
   }
   notification_email_from [email protected]  #设置邮件的发送地址
   smtp_server 127.0.0.1      #设置smtp server地址
   smtp_connect_timeout 30    #设置连接smtp server的超时时间
   router_id LVS_DEVEL        #表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
vrrp_script chk_nginx {
    script "/usr/local/keepalived/sbin/check_nginx.sh"   #该脚本检测ngnix的运行状态,并在nginx进程不存在时尝试重新启动ngnix,如果启动失败则停止keepalived,准备让其它机器接管。
    interval 2              #每2s检测一次
    weight 2                #检测失败(脚本返回非0)则优先级2
}
vrrp_instance VI_1 {
    state BACKUP            #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备用服务器
    interface ens33         #指定HA监测网络的接口
    virtual_router_id 55    #虚拟路由标识,这个标识是一个数字,同一个vrrp实例使用唯一的标识。即同一vrrp_instance下,MASTER和BACKUP必须是一致的
    priority 50             #定义优先级,数字越大,优先级越高,在同一个vrrp_instance下,MASTER的优先级必须大于BACKUP的优先级
    advert_int 1            #设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    nopreempt               #设置nopreempt防止抢占资源,只生效BACKUP节点
    authentication {        #设置验证类型和密码
        auth_type PASS      #设置验证类型,主要有PASS和AH两种
        auth_pass linuxeye  #设置验证密码,在同一个vrrp_instance下,MASTER与BACKUP必须使用相同的密码才能正常通信
    }
    virtual_ipaddress {     #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个
        180.1.36.103
    }
    track_script {
        chk_nginx           #引用VRRP脚本,即在 vrrp_script 部分指定的名字。定期运行它们来改变优先级,并最终引发主备切换。
    }
}

Author by wubenhui
2018/11/16 17:28:24

原文地址:https://www.cnblogs.com/wubenhui/p/10176706.html

时间: 2024-08-06 16:34:59

keepalived + nginx 实现高可用之远程面签项目的相关文章

keepalived+nginx实现高可用and负载均衡集群

keepalived+nginx实现高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都 由主进程发出,Slave(work

keepalived+nginx搭建高可用and负载均衡集群

keepalived+nginx搭建高可用and负载均衡集群 前言 因生产环境需要,现需要搭建一个前端为nginx的HA双向互备.后端为nginx代理的loadbalance负载均衡集群.nginx进程基于于Master+Slave(worker)多进程模型,自身具有非常稳定的子进程管理功能.在Master进程分配模式下,Master进程永远不进行业务处理,只是进行任务分发,从而达到Master进程的存活高可靠性,Slave(worker)进程所有的业务信号都由主进程发出,Slave(worke

keepalived + nginx 实现高可用集群方案

keepalived + nginx 实现高可用集群方案 一.使用场景介绍: nginx做负载均衡,来达到分发请求的目的,但是不能很好的避免单点故障,假如nginx服务器挂点了,那么所有的服务也会跟着瘫痪 .keepalived+nginx,就能很好的解决这一问题. 二.原理介绍: Keepalived 是一种高性能的服务器高可用或热备解决方案,Keepalived 可以用来防止服务器单点故 障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用. Keepalived 以 VRRP

LVS+Keepalived+Nginx+Tomcat高可用集群搭建(转)

LVS+Keepalived+Nginx+Tomcat高可用集群搭建 最近公司重整架构,十几台服务器而且还要尽可能节约成本.我就谷歌了一下在几种集群之前进行比较最终采用了Keepalived+Nginx做负债均衡高可用.虽然之前也研究过集群,看过很多集群方面的原理和架构,但毕竟没有真正操作过以下案例是在虚拟机中完成实验其实对于高可用搭建来说只用给出Keepalived和Nginx的配置即可后面的一些安装搭建完全是本人项目需要可以不用理睬仅供参考. 本文只是实验搭建记录方便以后在服务器中实施搭建.

keepAlived+nginx实现高可用双主模型LVS

实验目的: 利用keepalived实现高可用反向代理的nginx.以及双主模型的ipvs 实验环境: node1:在nginx做代理时做反向代理节点,在keepalived实现LVS时做Director.VIP1:172.16.18.22 VIP2:172.16.18.23 node2:在nginx做代理时做反向代理节点,在keepalived实现LVS时做Director.VIP1:172.16.18.22 VIP2:172.16.18.23 node3:在nginx做代理时做web服务器.

keepalived + nginx实现高可用

1. Keepalived介绍 Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat.corosync.pacemaker.但是它一般不会单独出现,而是与其它负载均衡技术(如lvs.haproxy.nginx)一起工作来达到集群的高可用. 1.1 VRRP协议 VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议.可以认为它是实现路由器高可用的容错协议,即将N台提供相同

Keepalived+Nginx实现高可用负载均衡集群

一 环境介绍 1.操作系统CentOS Linux release 7.2.1511 (Core) 2.服务keepalived+lvs双主高可用负载均衡集群及LAMP应用keepalived-1.2.13-7.el7.x86_64nginx-1.10.2-1.el7.x86_64httpd-2.4.6-45.el7.centos.x86_64 二 原理及拓扑图 1.vrrp协议在现实的网络环境中,两台需要通信的主机大多数情况下并没有直接的物理连接.对于这样的情况,它们之间路由怎样选择?主机如何

keepalived + nginx组建高可用负载平衡Web server集群

1 nginx负载均衡高可用 1.1 什么是负载均衡高可用 nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重. 为了屏蔽负载均衡服务器的宕机,需要建立一个备份机.主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如"I am alive"这样的信息来监控对方的运行状况.当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负

lvs + keepalived + nginx + tomcat高可用负载反向代理服务器配置(一) 简介

一. 为什么这样构架 1. 系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后 很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的 配置文件,并能实现无缝配置变更!nginx提供反向代理,而tomcat则提供web服务. 二.LVS LVS是Linux Virtual Server的简写,意即Linux虚拟