精华内容
下载资源
问答
  • 双机高可用完整方案

    2021-08-31 09:39:17
    高可用策略3.1 NMS Node3.1.1 简述3.1.2 keepalived策略3.2 Mariadb Node3.2.1 简述3.2.2 keepalived策略4. 文件同步4.1 简述4.2 解决方案(二)双机部署前言1. Mariadb Node1.1 keepalived配置1.2 shell脚本1.3 ...

    (一)双机方案

    1. 工作流程图

    2. 服务器环境

    简述:目前双机环境要求有四台服务器,并预分配两个虚拟ip地址

    服务器ip配置
    NMS VIP10.17.0.1
    NMS Node0110.17.0.2Cpu:4core Ram:8Gb Storage:256Gb
    NMS Node0210.17.0.3Cpu:4core Ram:8Gb Storage:256Gb
    Mariadb VIP10.17.0.5
    Mariadb Node0110.17.0.6Cpu:4core Ram:8Gb Storage:512Gb
    Mariadb Node0210.17.0.7Cpu:4core Ram:8Gb Storage:512Gb

    注:以上ip分配要求网络互通

    3. 高可用策略

    3.1 NMS Node

    3.1.1 简述

    在NMS Node01和NMS Node02上分别部署NMS应用,两个节点之间通过keepalived进行管理并向外暴露虚拟ip(10.17.0.1)进行程序访问。

    3.1.2 keepalived策略

    目前NMS Node提供以下两种故障转移策略,具体可参考客户意见

    主主模式:主主模式下不可抢占,假设一开始keepalived工作在10.17.0.2服务器上,当10.17.0.2服务器上的NMS中某个组件挂掉,会触发故障转移即10.17.0.2上的keepalived服务会被停止,资源程序会转移到10.17.0.3服务器,当10.17.0.2服务器恢复正常时,资源程序仍然由10.17.0.3管理,不会发生抢占被转移。

    主备模式:主备模式下会发生抢占,假设一开始keepalived工作在10.17.0.2服务器上,当10.17.0.2服务器上的NMS中某个组件挂掉,会触发故障转移即10.17.0.2上的keepalived服务会被停止,资源程序会转移到10.17.0.3服务器,当10.17.0.2服务器恢复正常时,资源程序不再由10.17.0.3管理,而是被10.17.0.2所抢占。

    3.2 Mariadb Node

    3.2.1 简述

    Mariadb Node01和MariadbNode02上分别部署Mariadb数据库服务,两台服务器间采用Mariadb自带主从机制进行双向主从配置实现数据库同步目的,通过keepalived管理虚拟ip(10.17.0.5)并向NMS Node节点提供数据库服务。

    3.2.2 keepalived策略

    主主模式:主主模式下不可抢占,假设一开始keepalived工作在10.17.0.6服务器上,当10.17.0.6服务器上的Mariadb服务出现异常或服务器宕机,会触发故障转移即10.17.0.6上的keepalived服务会被停止,资源程序会转移到10.17.0.7服务器,当10.17.0.6服务器恢复正常时,资源程序仍然由10.17.0.7管理,不会发生抢占被转移。

    4. 文件同步

    4.1 简述

    NMS程序会定时对数据库数据做备份操作,集群环境下,当一个分布式定时任务触发时,执行这个定时任务的实例是不确定的。假设Node01节点执行了这个备份任务后,文件只会被保存在当前Node01节点上,当发生故障转移,工作节点被Node02接管后,该文件在Node02上是不存在的。为了保证服务间的文件一致性,我们需要对文件进行同步操作。

    4.2 解决方案

    通过手写python脚本,指定对应目标服务器及文件夹完成文件夹定期同步。

    (二)双机部署

    前言

    从上述双机方案描述,双机环境建立在keepalived组建基础上,因此需要在每台服务器上都安装keepalived服务,具体安装视操作系统而定,以下步骤默认keepalived服务已经安装。

    Ubuntu安装keepalived:sudo apt-get install keepalived

    SuseLinux安装keepalived:sudo zypper in keepalived

    关于keepalived检验机制:keepalived工作节点以默认间隔1s的频率,给局域网中的其他节点以多播的形式发送VRRP通告,告知自己的优先级,其他节点只负责处理工作节点发出的多播包,当发现工作节点优先级没自己高,或者没收到工作节点的VRRP通告时,表示工作节点已经故障,自己将切换到工作节点状态,完成故障转移。所以我们需要做的就是控制工作节点什么时候去停止发送VRRP通告或者降低自身优先级以触发故障转移

    1. Mariadb Node

    1.1 keepalived配置

    路径:/etc/keepalived/

    路径下新建文件keepalived.conf,内容如下

    ! Configuration File for keepalived
    
    bal_defs {
       router_id db01
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 45
        priority 110
        advert_int 1
        nopreempt
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.17.0.5/24
        }
    }
    virtual_server 10.17.0.5 3306 {
        delay_loop 6
        persistence_timeout 50
        protocol TCP
        real_server 10.17.0.6 3306 { #根据当前实际宿主机IP进行配置
            notify_down /etc/keepalived/kill_keepalived.sh
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                connect_port 3306
                delay_before_retry 3
            }
        }
    }
    

    1.2 shell脚本

    路径:/etc/keepalived/

    keepalived服务停止脚本:kill_keepalived.sh

    #!/bin/bash
    kill -9 $(cat /var/run/keepalived.pid)
    

    1.3 keepalived启动

    kill_keepalived.sh权限赋予:

    chmod 777 /etc/keepalived/checkNms.sh

    keepalived启动:

    systemctl restart keepalived

    注:以上步骤需要在两台Mariadb Node上都做配置,对于keepalived.conf配置文件,属性real_server 10.17.0.6 3306需要根据当前实际宿主机IP进行配置,其他配置、脚本文件保存一致。

    2. Mariadb主从

    2.1 容器创建:

    两台Mariadb节点部署Mariadb容器

    docker run --name madb01 --restart=always -p 3306:3306 -v $HOME/docker/volumes/madb01:/var/lib/mysql -v /etc/localtime:/etc/localtime -e MYSQL_ROOT_PASSWORD=root_pwd -e MYSQL_USER=nms9000 -v MYSQL_PASSWORD=nms9000_pwd -d mariadb:10.5.8
    

    2.2 文件配置

    两台Mariadb节点都需要配置

    1.将容器内的配置文件拷贝出来

    docker cp madb01:/etc/mysql/mariadb.conf.d/50-server.cnf ./
    

    2.修改拷贝出来的文件:vim 50-server.cnf ,加入以下内容

    server-id              = 96 #两台服务设置成不同值
    log_bin                = /var/log/mysql/mysql-bin.log
    expire_logs_days        = 10
    #max_binlog_size        = 100M
    binlog-do-db=nms9000
    replicate-do-db=nms9000
    relay_log=mysql-relay-bin
    #gtid_mode=ON
    #enforce-gtid-consistency=true
    slave_skip_errors = 1062
    auto-increment-offset = 2
    

    3.将50-server.cnf文件拷贝回容器内

    docker cp 50-server.cnf madb01:/etc/mysql/mariadb.conf.d/
    

    4.重启容器

    systemctl restart madb01
    

    2.3 数据初始化

    两台Mariadb节点上的madb01容器都需要初始化

    将madb01容器进行数据库数据初始化操作,initDB.sql为数据库文件

    docker exec -i madb01 /usr/bin/mysql -uroot -p123456 < initDB.sql
    

    2.4 主从连接

    注:以下所有命令操作都是在madb01容器内的mysql服务执行

    #1.进入容器
    docker exec -it madb01 /bin/bash
    #2.进入mysql服务
    mysql -uroot -proot_pwd
    

    2.4.1 生成slave连接用户

    Mariadb Node01(10.17.0.6)

    #生成连接用户并授权
    create user 'slave02'@'10.17.0.7' identified by 's123456';
    grant replication slave on *.* to 'slave02'@'10.17.0.7';
    flush privileges;
    
    #停止数据更新操作
    flush tables with read lock;
    

    Mariadb Node02(10.17.0.7)

    #生成连接用户并授权
    create user 'slave01'@'10.17.0.6' identified by 's123456';
    grant replication slave on *.* to 'slave01'@'10.17.0.6';
    flush privileges;
    
    #停止数据更新操作
    flush tables with read lock;
    

    2.4.2 主从连接建立

    Node02连接Node01

    1.Node01上查看master状态

    #1.查看master状态
    show master status\G;
    
    #2.返回结果展示
    MariaDB [(none)]> show master status\G;
    *************************** 1. row ***************************
                File: mysql-bin.000001
            Position: 328
        Binlog_Do_DB: nms9000
    Binlog_Ignore_DB: 
    1 row in set (0.000 sec)
    
    ERROR: No query specified
    

    2.Node02建立连接

    注:MASTER_LOG_FILEMASTER_LOG_POS对应赋值来自上面master状态信息

    #1.主从连接建立
    CHANGE MASTER TO
    MASTER_HOST='10.17.0.6',
    MASTER_USER='slave02',
    MASTER_PASSWORD='s123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=328;
    
    #2.开启slave服务
    start slave;
    

    Node01连接Node02

    1.Node02上查看master状态

    #1.查看master状态
    show master status\G;
    
    #2.返回结果展示
    MariaDB [(none)]> show master status\G;
    *************************** 1. row ***************************
                File: mysql-bin.000001
            Position: 328
        Binlog_Do_DB: nms9000
    Binlog_Ignore_DB: 
    1 row in set (0.000 sec)
    
    ERROR: No query specified
    

    2.Node01建立连接

    注:MASTER_LOG_FILEMASTER_LOG_POS对应赋值来自上面master状态信息

    #1.主从连接建立
    CHANGE MASTER TO
    MASTER_HOST='10.17.0.7',
    MASTER_USER='slave01',
    MASTER_PASSWORD='s123456',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=328;
    
    #2.开启slave服务
    start slave;
    

    2.4.3 连接验证

    释放上述锁资源

    unlock tables;
    

    两台节点都需要进行验证,如下执行命令show slave status\G;返回结果中Slave_IO_Running和Slave_SQL_Running都为Yes即代表已经互联成功。

    MariaDB [(none)]> show slave status\G;
    *************************** 1. row ***************************
                    Slave_IO_State: Waiting for master to send event
                       Master_Host: 192.168.27.96
                       Master_User: slave01
                       Master_Port: 3306
                     Connect_Retry: 60
                   Master_Log_File: mysql-bin.000007
               Read_Master_Log_Pos: 342
                    Relay_Log_File: mysql-relay-bin.000005
                     Relay_Log_Pos: 641
             Relay_Master_Log_File: mysql-bin.000007
                  Slave_IO_Running: Yes
                 Slave_SQL_Running: Yes
                   Replicate_Do_DB: nms9000
    

    3. NMS Node

    触发故障转移点:通过shell脚本定期(每60s)去校验NMS相关组件服务,如果有一个组件挂了,就会主动将keepalived进程关闭,无法再发送VRRP通告以触发故障转移。

    3.1 keepalived配置

    路径:/etc/keepalived/

    路径下新建文件keepalived.conf,内容如下

    ! Configuration File for keepalived
    
    global_defs {
       router_id nms01
       #添加以下参数即可
       script_user root
       enable_script_security
    }
    
    vrrp_script check_run {
    script "/etc/keepalived/checkNms.sh"
    interval 60
    #weight 10
    #user root
    #pass nms1234
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface ens33 #根据自己的工作网卡决定
        virtual_router_id 41
        priority 110
        advert_int 1
        nopreempt
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
        check_run
        }
    
        virtual_ipaddress {
            10.17.0.1/24 #虚拟IP地址
        }
    }
    

    3.2 shell脚本

    路径:/etc/keepalived/

    服务校验脚本checkNms.sh

    #!/bin/bash
    
    curPath=$(readlink -f "$(dirname "$0")")
    #echo $curPath
    filePath=$curPath/nmssvc.txt
    echo $filePath
    
    cat $filePath | while read line
    do
      #pIDa=`lsof -i :$line | grep -v "PID" | awk '{print $1}'`
      cID=`docker ps | grep $line |awk -F' ' '{printf $1}'`
      if [ "$cID" == "" ];
      then 
         echo "port[ $line ] : false"
         kill -9 $(cat /var/run/keepalived.pid)
         exit 1
      fi
    done
    
    exit 0
    

    应用组件列表文件:nmssvc.txt

    server
    gateway
    system
    monitor
    otnservice
    adaptor
    redis-server
    

    3.3 keepalived启动

    checkNms.sh权限赋予:

    chmod 744 /etc/keepalived/checkNms.sh

    注:不能赋予777全权限,keepalived会认为这是不安全的行为

    keepalived启动:

    systemctl restart keepalived

    注:因为keepalived服务依赖于NMS程序,所以需要确保NMS程序已经成功启动,由于数据库单独维护,在上述Mariadb连接配置好之后,需要修改docker-compose.yml中数据库连接地址为Mariadb VIP(10.17.0.5)

    注:以上步骤需要在两台NMS Node上都做配置,对于keepalived.conf配置文件,属性priority 110需要根据ip地址来决定,其他脚本文件、服务列表文件保存一致。

    3.4 配置文件同步

    3.4.1 syncdir.py脚本

    syncdir.py通过配置本机源目录和目标服务器文件目录,定期执行将本机源目录同步至目标服务器文件目录。

    因此,两台服务器如果要保持文件夹文件一致,需要做双向同步。

    #!/usr/bin/python3 
    
    from datetime import datetime
    from apscheduler.schedulers.blocking import BlockingScheduler
    import time
    import paramiko
    import sys,os
    from scp import SCPClient
    
    server = ""
    port = 22
    user=""
    password=""
    sourceDir = "/home/nms/sunam/docker-volumes/malaysia/backup/database"
    absSourceFiles = []
    destDir = "/home/nms/sunam/docker-volumes/malaysia/backup/database"
    
    
    def createSSHClient(server, port, user, password):
        client = paramiko.SSHClient()
        client.load_system_host_keys()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(server, port, user, password)
        return client
    
    def getLocalFiles():
        sourceFiles=[]
        for root,dirs,files in os.walk(sourceDir):
            for file in files:
                sourceFiles.append(file)
        return sourceFiles
    
    def getUpdateFiles():
    
        pass
    
    
    def syncDir():
        ssh = createSSHClient(server, port, user, password)
        absSourceFiles = []
        scp = SCPClient(ssh.get_transport())
        localFiles = getLocalFiles()
    
        ftp = ssh.open_sftp()
        try:
            destFiles = ftp.listdir(destDir)
            for file in destFiles:
                if file in localFiles:
                    localFiles.remove(file)
    
            if len(localFiles)>0:
                for file in localFiles:
                    absSourceFiles.append(os.path.join(sourceDir,file))
    
            for file in absSourceFiles:
                scp.put(file,destDir)
        except:
            print("except...")
    
        scp.close()
        ssh.close()
    
        
    def dojob():
        #ssh = createSSHClient(server, port, user, password)
        #创建调度器:BlockingScheduler
        scheduler = BlockingScheduler()
        #添加任务,时间间隔10S
       # scheduler.add_job(syncDir, 'interval', seconds=30, id='test_job1',args=[ssh])
        scheduler.add_job(syncDir, 'interval', seconds=60, id='test_job1')
        scheduler.start()
    
    if __name__=='__main__':
        len_argv = len(sys.argv)
        if len_argv == 1:
            server = "192.168.27.51"
            user = "nms"
            password="nms1234"
        elif len_argv == 4:
            server = sys.argv[1]
            user = sys.argv[2]
            password=sys.argv[3]
        else:
            exit
    
        dojob()
        #syncDir()
    

    运行syncdir.py脚本

    sudo python3 syncdir.py

    注:执行syncdir.py 脚本需要python相关依赖环境,首次执行可根据报错提示进行依赖加载。

    3.4.2 自启配置

    将syncdir.py 脚本的执行作为linux服务加入到服务中,并配置为自启服务。

    /etc/systemd/system/路径下新建syncDir.service,配置以下内容

    [Unit]Description=<short description>[Service]Type=simpleExecStart=/home/nms/sunam/deploy/malaysia/output/syncdir/syncdir.py #脚本文件所在目录[Install]WantedBy=multi-user.target 
    

    设置自启

    #1.设置自启systemctl enable syncDir.service#2.以服务形式启动同步文件脚本systemctl start syncDir.service
    
    展开全文
  • 本片详细记录了Nginx+keepalived双机热备(主从模式)高可用集群方案-完整部署过程,讲解十分到位,可作为线上实操手册。特在此分享,希望能帮助到有用到的朋友。
  • 高可用集群_双机热备解决方案

    千次阅读 2011-09-29 14:47:17
    高可用集群_双机热备解决方案 一、Cluster集群概述  1、方案描述  现代IT技术认为,一个成功系统中数据及作业的重要性已远超过硬件设备本身,在一套完善的系统中对数据的安全及保障有着极的要求。双机容错系统...

    高可用集群_双机热备解决方案

    一、Cluster集群概述

      1、方案描述

      现代IT技术认为,一个成功系统中数据及作业的重要性已远超过硬件设备本身,在一套完善的系统中对数据的安全及保障有着极高的要求。双机容错系统是由HP公司提出的全套集群解决方案,结合HP服务器产品的安全可靠性和集群技术的优点,为用户提供一个完善的系统。

      2、工作原理

    惠普方案

      3、适用范围

      用户对系统的连续工作性和实时性要求较高,系统停机对系统的影响很大,造成很大的损失。

      4、现实方式及优点

      磁盘阵列备份方式—— 两台HP服务器通过HP MSA磁盘阵列连接起来,形成备份系统,系统易于安装,也相对稳定。

      磁盘阵列备份模式示意图

      

    二、惠普DL380G5+MSA2000 F200 双机高可用性集群解决方案

      1、F200双机方案硬件拓扑

    惠普方案

    F200双机方案硬件拓扑

      主机:采用2台双路四核Intel 至强处理器的HP DL380G5 高性能服务器;配置4GB以上 PC2-5300全缓冲DIMMs (DDR2-667)内存,最高支持32GB;Smart Array P400阵列控制器,256MB高速缓存,支持RAID 0/1/5,配置两块硬盘做RAID1(硬盘镜像模式,允许坏任意一块硬盘数据不受影响),本地安装操作系统和应用软件,数据存储SAN存储池;集成双NC373i多功能千兆网卡,带TCP/IP Offload引擎,非常适合应用于WEB应用;集成iLO 2远程管理,虚拟现场,可支持远程开关机和安装操作系统等;1个1000W热插拔电源,可选冗余电源,实现坏一个电源机器不受影响;标配满配6个热插拔冗余风扇;DVD/CD-RW Combo;2U高度机架式。两台服务器坏任何一台,整个业务系统不受影响。

      SAN环境:采用4块HBA卡,4条链路坏任意一条链路系统不受影响,真正实现无单点故障,利用MSA2000特性,为用户节省两个HP 4GB SAN光纤交换机的投资。

      磁盘阵列:采用HP MSA2000磁盘阵列, MSA2000所有配件均实现冗余,包括电源、风扇、阵列控制器、光纤接口等,比如坏一个电源MSA1000磁盘阵列不受影响;建议配置6块以上300G 15K SAS硬盘做RAID 6,实际可用容量为4*300=1200G,允许同时坏任何两块硬盘系统不受影响。

      2、方案优势

      技术是一种强大的资产,它不仅能够全面提高您企业的生产率、效率、可用性及性能,而且能引导您进入新市场、获得高收益。惠普为您提供久经考验的创新技术,帮助您的业务蓬勃发展。

    本方案优势主要体现在企业数据应用系统的高可用性、高安全性两个方面,并且具有安装部署简单、经济高效的特点:

      双机备份模式,双台服务器互为备份,当一台服务器出现问题停机时,另一台服务器能实时接管中断的工作,保证业务系统的正常运行。

      两路四核至强服务器和MSA2000具有高性能,都是企业产品中成功案例的佼佼者。

      服务器和MSA2000存储柜的磁盘具都有热插拔功能,具可以灵活组成RAID模式,当配置成RAID1+0时允许损坏一半数量的硬盘,业务数据不受影响,保证数据不丢失;当配置成RAID 5时,具有高性价比,允许坏任意一块硬盘,数据不受影响;当配置成RAID 6时 允许同时坏两块磁盘系统不受影响。并且可配置在线热备盘,现实在线升级RAID,在线扩容等等。

      集群具有一定的负载平衡功能,可将多个任务分摊到两台服务上运行,提高系统的整体性能。

      服务器和MSA2000都有内置的LED指示器,能够预先对故障、温度超标和其它异常发出警告,易于管理和维护。

      整个系统中所有部件单元都提供了冗余,避免单点故障。这样,无论系统中哪块硬件坏都不会影响客户企业的业务。并且热插拔能力使您可以在不打断重要计算服务的情况下对部件进行替换和升级。

      利用HP 服务器集成的WEB方式磁盘阵列管理方便快捷地管理MSA2000和其中的任何部件,拥有极佳的本地或远程管理能力,增强了您的使用方便性。例如,容量管理器提醒您注意当前和即将出现的性能瓶颈,帮您在整个系统生命期间跟上变化的数据存储需求。

      整个系统的扩展性能非常强大,使配置更加灵活,能够满足您企业的存储需求,并且在短短几年内都无须对系统进行烦琐的升级操作,帮助您企业获得总体拥有成本。

      为获得高性能和高容量,服务器和MSA2000都支持15,000rpm SAS硬盘和7200 rpm 大容量廉价SATA硬盘。这便于HDD的在大多数HP服务器和MSA HDD单元之间的转移。

      利用最新的数据传输带宽为4GB/S 光纤结构,将存储速度提升。

      最多可连接3个SCSI磁盘阵列盘柜,每个盘柜可以上12块SCSI硬盘,最多可以容纳48块300GB的SAS磁盘驱动器,达到最大容量14.4T,或者48块750G SATA达到36T,实现海量数据存储。

      MSA2000可以同时兼容SAS和SATA混插模式,可以利用这一特点,使用稳定快速的SAS硬盘存储生产数据,而可以使用廉价大容量的SATA硬盘存储备份数据的灵活解决方案。

      MSA2000通过可选的许可,实现基于控制器硬件的卷拷贝和卷克隆技术,通过这两个技术可以实现快速的数据备份和恢复,使得整个数据备份过程和恢复过程在几秒钟之内完成。  

      3、总体架构图

    惠普方案

    总体架构图

    展开全文
  • 一旦“心跳”信号表明主机系统发生故障,或者是备用系统无法收到主机系统的“心跳”信号,则系统的高可用性管理软件(双机软件)认为主机系统发生故障,立即令主机停止工作,并将系统资源转移到备用系统上,备用系统...
  • 采用Keepalived实现Redis双机高可用

    热门讨论 2013-01-09 22:13:17
    采用Keepalived实现Redis双机高可用,包括详细安装配置步骤和脚本等。
  • 官网推荐的集群方案如图: 这十分搞笑,VIP是啥?我暂时看来是个Nacos服务的请求转发工具吧,这用Nginx就很容易实现服务分发。上面的3台Nacos共享一个Mysql数据库。 问题: 1、MySQL宕机怎么办? 这在互联网特别是...

    1、Nacos支持单机服务器部署,可以用MYSQL数据库取代默认的嵌入式数据库Derby
    2、Nacos集群,集群的目的是为了高可用HA(High Availability),即服务注册发现和配置的获取能够顺利进行。官网推荐的集群方案如图:
    在这里插入图片描述
    这十分搞笑,VIP是啥?我暂时看来是个Nacos服务的请求转发工具吧,这用Nginx就很容易实现服务分发。上面的3台Nacos共享一个Mysql数据库。

    问题:
    1、MySQL宕机怎么办?
    这在互联网特别是阿里巴巴这些公司不可能是只有一台MySQL的,万一宕机了怎么办?这就需要实现Mysql高可用了,话不多说,叫老板给钱买服务器搭建集群,MySQL的集群方案有很多,至少也要2主2从,主从复制吧。

    2、那个VIP也就是nginx靠谱吗,万一那时候来个宕机又怎么办?放大招了。话不多说也整个Nginx高可用HA方案,生产上推荐Keepalived+双机热备。

    总结:
    分布式环境说是很复杂,但是只要有钱买机器,问题不大,随便来个集群高可用HA就解决了,这也是分布式环境的一个特点:高可用。还有高并发、高性能。高并发侧重于缓存的解决方案,高性能就涉及到程序的涉及和综合性能的参与了。

    我是帅佬,一个不喜欢写代码的人。

    展开全文
  • Jumpserver双机高可用环境部署笔记

    千次阅读 2018-01-17 19:00:00
    后面运行一段时间后,发现Jumpserver服务器的CPU负载使用率高达80%以上,主要是python程序对CPU的消耗比较大,由于是单机部署,处于安全考虑,急需要部署一套Jumpserver双机高可用环境,实现LB+HA的降低负载和故障...

     

    之前在IDC部署了Jumpserver堡垒机环境,作为登陆线上服务器的统一入口。后面运行一段时间后,发现Jumpserver服务器的CPU负载使用率高达80%以上,主要是python程序对CPU的消耗比较大,由于是单机部署,处于安全考虑,急需要部署一套Jumpserver双机高可用环境,实现LB+HA的降低负载和故障转移的目的。以下记录了环境部署的过程:

    如下进行调整后,之前的jumpserver用户名、秘钥、密码等信息都不会变,只需要将ssh连接的地址改为ssh端口负载均衡的vip地址即可!
    也就是说对于用户来说,只需要修改登录ip地址,其他的都不受影响!
       
    1)环境准备
    192.168.10.20   之前的单机版jumpserver,作为master主机
    192.168.10.21   新加的jumpserver,作为slave从机      
       
    jumpserver机器的ssh端口统一调整为8888
    web访问的80端口负载是7层负载,通过Nginx+keepalived实现,域名为jump.kevin-inc.com
    ssh端口的负载是4层负载,也可以通过nginx的stream实现,(我在线上用的nginx+keepalived负载层并没有安装stream模块,为了不影响线上业务,另配置了lvs+keepalived)
       
    2)部署jumpserver备机(192.168.10.21)的jumpserver环境
    参考:http://www.cnblogs.com/kevingrace/p/5570279.html
       
    3)配置jumpserver主机和备机的mysql主主同步环境(先将master主机的jumpserver库数据同步到slave主机的mysql里面)
    参考这篇文章中的mysql主主同步配置:http://www.cnblogs.com/kevingrace/p/6710136.html
       
    4)同步文件,使用rsync+inotify实时同步,或使用rsync+crontab短时间定时同步(需要提前做192.168.10.20和192.168.10.21两台机器的ssh无密码登陆的信任关系)
       同步系统文件/etc/passwd、/etc/shaow、/etc/group文件
       同步jumpserver相关用户以及key文件:jumpserver/keys
       同步用户家目录的home目录
    
    注意:为了防止文件被强行覆盖掉,这里只能做单方向的文件同步,不能做双向同步,否则会出现:在其中一台机器的jumpserver界面里创建好用户后,但是在jumpserver服务器上的
    /etc/passwd文件里却没有该用户信息,因为被对方机器的同步强行覆盖掉了。
    
    正确的做法:
    在192.168.10.20机器上做rsync+crontab同步(10秒同步一次),另一台机器192.168.10.21不做同步;
    登陆http://192.168.10.20的jumpserver界面创建用户,这样用户信息很快就会被同步到另一台机器上了(注意:创建用户要在http://192.168.10.20的jumpserver界面里创建)
    
    [root@jumpserver01 ~]# crontab -l
    .........
    
    * * * * * /usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/passwd root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 10;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/passwd root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 20;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/passwd root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 30;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/passwd root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 40;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/passwd root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 50;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/passwd root@192.168.10.21:/etc/ > /dev/null 2>&1
    
    * * * * * /usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/shadow root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 10;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/shadow root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 20;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/shadow root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 30;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/shadow root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 40;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/shadow root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 50;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/shadow root@192.168.10.21:/etc/ > /dev/null 2>&1
    
    * * * * * /usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/group root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 10;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/group root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 20;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/group root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 30;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/group root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 40;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/group root@192.168.10.21:/etc/ > /dev/null 2>&1
    * * * * * sleep 50;/usr/bin/rsync -e "ssh -p8888" -avpgolr /etc/group root@192.168.10.21:/etc/ > /dev/null 2>&1
    
    * * * * * /usr/bin/rsync -e "ssh -p8888" -avpgolr /data/jumpserver/keys/ 192.168.10.21:/data/jumpserver/keys/ > /dev/null 2>&1
    * * * * * sleep 10;/usr/bin/rsync -e "ssh -p8888" -avpgolr /data/jumpserver/keys/ 192.168.10.21:/data/jumpserver/keys/ > /dev/null 2>&1
    * * * * * sleep 20;/usr/bin/rsync -e "ssh -p8888" -avpgolr /data/jumpserver/keys/ 192.168.10.21:/data/jumpserver/keys/ > /dev/null 2>&1
    * * * * * sleep 30;/usr/bin/rsync -e "ssh -p8888" -avpgolr /data/jumpserver/keys/ 192.168.10.21:/data/jumpserver/keys/ > /dev/null 2>&1
    * * * * * sleep 40;/usr/bin/rsync -e "ssh -p8888" -avpgolr /data/jumpserver/keys/ 192.168.10.21:/data/jumpserver/keys/ > /dev/null 2>&1
    * * * * * sleep 50;/usr/bin/rsync -e "ssh -p8888" -avpgolr /data/jumpserver/keys/ 192.168.10.21:/data/jumpserver/keys/ > /dev/null 2>&1
    
    * * * * * /usr/bin/rsync -e "ssh -p8888" -avpgolr /home/ 192.168.10.21:/home/ > /dev/null 2>&1
    * * * * * sleep 10;/usr/bin/rsync -e "ssh -p8888" -avpgolr /home/ 192.168.10.21:/home/ > /dev/null 2>&1
    * * * * * sleep 20;/usr/bin/rsync -e "ssh -p8888" -avpgolr /home/ 192.168.10.21:/home/ > /dev/null 2>&1
    * * * * * sleep 30;/usr/bin/rsync -e "ssh -p8888" -avpgolr /home/ 192.168.10.21:/home/ > /dev/null 2>&1
    * * * * * sleep 40;/usr/bin/rsync -e "ssh -p8888" -avpgolr /home/ 192.168.10.21:/home/ > /dev/null 2>&1
    * * * * * sleep 50;/usr/bin/rsync -e "ssh -p8888" -avpgolr /home/ 192.168.10.21:/home/ > /dev/null 2>&1
    
    然后重启两台机器的jumpserver服务。
    
    5)web访问的80端口负载均衡配置。访问地址是http://jump.kevin-inc.com
    参考:http://www.cnblogs.com/kevingrace/p/6138185.html
       
    [root@inner-lb01 ~]# cat /data/nginx/conf/vhosts/jump.kevin-inc.com.conf
    upstream jump-inc {
          server 192.168.10.20:80 max_fails=3 fail_timeout=10s;
          server 192.168.10.21:80 max_fails=3 fail_timeout=10s;
    }
                 
      server {
          listen      80;
          server_name jump.kevin-inc.com;
           
          access_log  /data/nginx/logs/jump.kevin-inc.com-access.log main;
          error_log  /data/nginx/logs/jump.kevin-inc.com-error.log;
           
     location / {
             proxy_pass http://jump-inc;
             proxy_redirect off ;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header REMOTE-HOST $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             proxy_connect_timeout 300;
             proxy_send_timeout 300;
             proxy_read_timeout 600;
             proxy_buffer_size 256k;
             proxy_buffers 4 256k;
             proxy_busy_buffers_size 256k;
             proxy_temp_file_write_size 256k;
             proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
             proxy_max_temp_file_size 128m;
             #proxy_cache mycache;
             #proxy_cache_valid 200 302 1h;
             #proxy_cache_valid 301 1d;
             #proxy_cache_valid any 1m;
            }
    }
       
       
    6)ssh登陆的8888端口的负载均衡配置
    lvs+keepalived的配置参考:http://www.cnblogs.com/kevingrace/p/5570500.html
       
    两台lvs配置如下(vip为10.0.8.24)
    [root@jump-lvs01 ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
          
    global_defs {
       router_id LVS_Master
    }
          
    vrrp_instance VI_1 {
        state MASTER            
        interface eth0         
        virtual_router_id 51    
        priority 100           
        advert_int 1            
        authentication {
            auth_type PASS      
            auth_pass 1111      
        }
        virtual_ipaddress {
            192.168.10.24     
        }
    }
          
    virtual_server 192.168.10.24 8888 {
        delay_loop 6            
        lb_algo wrr             
        lb_kind DR              
        #nat_mask 255.255.255.0
        persistence_timeout 600  
        protocol TCP           
          
        real_server 192.168.10.20 8888 {
            weight 3
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8888
            }
        }
        real_server 192.168.10.21 8888 {
            weight 3
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8888
            }
        }
    }
       
       
       
    [root@jump-lvs02 ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
          
    global_defs {
       router_id LVS_Backup
    }
          
    vrrp_instance VI_1 {
        state BACKUP            
        interface eth0         
        virtual_router_id 51    
        priority 90           
        advert_int 1            
        authentication {
            auth_type PASS      
            auth_pass 1111      
        }
        virtual_ipaddress {
            192.168.10.24     
        }
    }
          
    virtual_server 192.168.10.24 8888 {
        delay_loop 6            
        lb_algo wrr             
        lb_kind DR              
        #nat_mask 255.255.255.0
        persistence_timeout 600  
        protocol TCP           
          
        real_server 192.168.10.20 8888 {
            weight 3
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8888
            }
        }
       
        real_server 192.168.10.21 8888 {
            weight 3
            TCP_CHECK {
                connect_timeout 3
                nb_get_retry 3
                delay_before_retry 3
                connect_port 8888
            }
        }
    }
    
    在xshell客户端登陆堡垒机,堡垒机的地址可以是192.168.10.20、192.168.10.21、192.168.10.24,三个地址都可以。
    展开全文
  • mysql高可用集群部署方案(mha+atlas+keepalived)

    万次阅读 多人点赞 2018-09-13 11:44:06
    一、mysql高可用前提  在许多比较重要的系统中,基本上都是24h*365d不间断运行的。   对于应用程序来讲,可以做haproxy+app 或 nginx+app的集群。好,问题来了,当应用程序的性能调优后,那么瓶颈就卡在...
  • Nginx配置——搭建 Nginx 高可用集群双机热备) ...dist_request_id=1328642.50401.16157691702382
  • 现代IT技术认为,一个成功系统中数据及作业的重要性已远超过硬件设备本身,在一套完善的...双机容错系统是由HP公司提出的全套集群解决方案,结合HP服务器产品的安全可靠性和集群技术的优点,为用户提供一个完善的系统。
  • linux高可用集群(HA)原理详解

    万次阅读 2018-05-02 10:39:32
    高可用集群一、什么是高可用集群 高可用集群就是当某一个节点或服务器发生故障时,另一个节点能够自动且立即向外提供服务,即将有故障节点上的资源转移到另一个节点上去,这样另一个节点有了资源既可以向外提供服务...
  • 双机热备与集群间的关系

    千次阅读 2015-03-19 10:21:49
    一、首先什么是高可用集群 ? 可用性集群,英文原文为High Availability Cluster, 简称HA Cluster,是指以减少服务中断(宕机)时间为目的的服务器集群技术。简单的说,集群(cluster)就是一组计算机,它们...
  • 一般拿 Timer 和 Quartz 相比较的,简直就是对 Quartz 的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的集群机制,可以采用基于sqlserver,...
  • Keepalived + Nginx 搭建高可用双机主备集群环境准备,编写Nginx自动重启脚本修改keepalived.conf 配置文件开启服务并测试1. 测试主备切换2. 测试Nginx自动重启配置nginx-tomcat服务集群 在通过 Nginx 构建 服务集群...
  • Redis的几种高可用集群方式

    千次阅读 2019-11-04 11:52:38
    Redis Sentinel 是社区版本推出的原生高可用解决方案,其部署架构主要包括两部分:Redis Sentinel 集群和 Redis 数据集群。 其中 Redis Sentinel 集群是由若干 Sentinel 节点组成的分布式集群,可以实现故障发现...
  • mongodb高可用集群方案

    2017-08-31 17:03:20
    一、高可用集群的解决方案 可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。 计算机系统的可用在...
  • PostgreSQL高可用环境说明 操作系统centos7: [root@10 ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [root@10 ~]# uname -a Linux 10.16.93.179 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb ...
  • 本篇文章详细记录了Linux下FastDFS分布式存储高可用集群-总结及部署过程,讲解到位,可用作线上实操手册。特在此分享,希望能帮助到有用到的朋友。
  • HAproxy+Mycat +MySQL主从集群高可用方案 1. HAproxy高可用方案: haproxy+keepalived,利用keepalived的VIP浮动能力,(多台haproxy对应同一个虚拟IP)实现haproxy集群高可用。 2. Mycat高可用...
  • 简介Red Hat 公司在2007年发布Red Hat Enterprise Linux 5 时就将原本是作为独立软件发售的用于构建企业级集群集群套件redhat cluster suite(RHCS,红帽集群套件)集成到了...红帽的企业集群解决方案(RHCS)是全球领先
  • 双机热备、集群高可用性入门 什么是双机热备? 双机热备这一概念包括了广义与狭义两种意义。 从广义上讲,就是对于重要的服务,使用两台服务器,互相备份,共同执行同一服务。当一台服务器出现故障时,可以由另一...
  • 大话Oracle RAC 集群 高可用性 备份与恢复 完整度:完整 清晰度:清晰 格式:PDF 内容简介  本书以Oracle 10g为基础,对Oracle RAC进行了全面的介绍和分析。全书分为两个部分,共14章,第一部分是集群理论篇,这部分...
  • 但是绝对不是没有,任何事都不是绝对,所谓的高可用架构就是体现在容灾机制上,如果主机宕机我们必须要做预案,万无一失才叫高可用架构,这里我们使用docker-compose来部署nginx-keepalived双机热备机制,...
  •  EXPRESSCLUSTER支持虚拟集群,它既可以做虚拟机层级的高可用集群解决方案,也可以针对虚拟机上的业务构建高可用集群。    当虚拟计算机上运行业务发生故障时, EXPRESSCLUSTER可以将其切换到另外一个虚拟计算机...
  • 双机热备与集群简介

    千次阅读 2014-04-21 11:13:54
    问:能解释一下什么是双机热备吗?   答:所谓双机热备,就是将中心服务器安装成互为备份的两台服务器,并且在同一时间内只有一台服务器运行。当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器会...
  • anp | grep dhcp 监听dhcp 的端口 Ps -e | grep dhcpd Ps -u | grep dhcpd 8)开启dhcp 服务 systemctl restart dhcpd.service 9)查看客户端获取信息日志 Dhclient cat /var/log/messages 10)测试高可用,停止一台...
  • 高可用集群

    2021-07-31 05:48:29
    高可用集群是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度。高可用集群的应用系统有多样化发展趋势,用途...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,706
精华内容 3,082
关键字:

双机高可用集群方案