|NO.Z.00010|——————————|^^ 构建 ^^|——|HAC构建.V1|——|5台server|

一、高可用集群说明
### --- 高可用集群说明

### --- NAT模式:
~~~     LVS充当真实服务器和客户端之间的一个节点。

### --- 三节点:
~~~     若Apache宕机,访问会终端,若采用轮询算法的情况下,访问会终端LVS做不到检测功能。
~~~     正常的负载均衡会加入自动检测功能,若是判断后端的服务终端。
~~~     会自动把它提出出去。普通LVS是做不到。若想用LVS做的情况下,可以使用脚本来实现。

### --- 在使用LVS-NAT+LVS健康检查脚本:
~~~     时间Apache服务器任何一台宕机不会引发集群的完整性。
~~~     若是LVS自身宕机了,下面的Apache服务再健康,集群是没有任何意义的。
~~~     LVS集群中LVS本身的高可用是非常重要的。
### --- 高可用集群说明

~~~     利用高可用技术,把LVS做替换或者做一个副本。LVS与LVS副本之间使用高可用的原理做心跳检测
~~~     正常情况下LVS负载会加载到主上,在负载到LVS集群下RS主机上。
~~~     若是LVS主宕掉,从LVS会接替,客户端的访问会转移到从LVS上代理到不同节点。
~~~     以上就是负载均衡+高可用的实现方案。
### --- 高可用集群的必要性:
### --- 高可用主要目的:尽可能的提高服务的可用性

~~~     99:         用户连接数        软件可以实现
~~~     999:        用户连接数        软件可以实现;中性公司倾向的方案
~~~     9999:       用户连接数        需要硬件设备的参与
~~~     99999:      用户连接数        理论上的概念,需要IDC/网络供应商的配合/集群配和/开发配置/
~~~     9越高,      消耗的资源会跟大。
~~~     适合自己的才是好集群,没有所谓的标准集群模式。
### --- 高可用集群的实现原理:心跳检测。
~~~     高可用也是有不同分类的。不是软件上的分类,而是实现原理的分类:

### --- 服务:有状态:MySQL:
~~~     若是RS服务断掉,业务数据会缺少一部分;造成服务终端或者错误。难实现高可用的

### --- 服务:无状态:Apache:http   LVS:
~~~     若是RS服务断掉,过段时间再加进来,业务数据不会发生任何变化。
~~~     没有任何影响。较容易实现高可用的。
二、LVS-NAT脚本方式实现服务宕机剔除集群
### --- LVS-NAT脚本方式实现服务宕机剔除集群
### --- 第一张图配置说明

### --- 重新启动ipvsadm,恢复之前状态
[root@server11 ~]# service ipvsadm restart
ipvsadm: Clearing the current IPVS table:                  [  OK  ]
ipvsadm: Unloading modules:                                [  OK  ]
ipvsadm: Clearing the current IPVS table:                  [  OK  ]
ipvsadm: Applying IPVS configuration:                      [  OK  ]
### --- 查看集群配置

[root@server11 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  20.20.20.11:80 rr
  -> 10.10.10.12:80               Masq    1      0          0         
  -> 10.10.10.13:8080             Masq    1      0          0  
### --- 查看才持久化连接已经不存在

[root@server11 ~]# ipvsadm -Ln --persistent-conn
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port            Weight    PersistConn ActiveConn InActConn 
  -> RemoteAddress:Port
TCP  20.20.20.11:80 rr
  -> 10.10.10.12:80               1         0           0          0         
  -> 10.10.10.13:8080             1         0           0          0
### --- 停止RS1服务的Apache服务

[root@server12 ~]# service httpd stop                                       // httpd服务停掉之后,LVS-NAT集群还是存在。
Stopping httpd:   
 [  OK  ]
### --- 查看到RS1集群配置还是存在

[root@server11 ~]# ipvsadm -Ln --persistent-conn                            // 发现12节点再集群中还是存在/我们可以通过脚本的方式在服务宕机之后把它从集群中剔除出去。      
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port            Weight    PersistConn ActiveConn InActConn 
  -> RemoteAddress:Port
TCP  20.20.20.11:80 rr
  -> 10.10.10.12:80               1         0           0          5         
  -> 10.10.10.13:8080             1         0           0          6  
三、配置脚本文件LVS-NAT+脚本进行集群宕机节点剔除和恢复。
### --- 配置自定义脚本
### --- 配置脚本文件LVS-NAT+脚本进行集群宕机节点剔除和恢复。

[root@server11 ~]# mkdir /usr/local/script                                  // 没有特殊含义,个人习惯把脚本放在该目录下
[root@server11 ~]# cd !$                                                    // 执行上一条命令的最后一个参数
cd /usr/local/script
### --- 创建脚本文件

[root@server11 script]# vim check_lvs_real.sh                               
#!/bin/bash
        #
        VIP=20.20.20.11                                                     # 集群虚拟IP
        CPORT=80                                                            # 定义集群端口
        FAIL_BACK=127.0.0.1                                                 # 本机回环地址
        RS=("10.10.10.12" "10.10.10.13")                                    # 编写集群地址
        declare -a RSSTATUS                                                 # 变量RSSTATUS定义为数组态
        RW=("2" "1")
        RPORT=80                                                            # 定义集群端口
        TYPE=m                                                              # 制定LVS工作模式:g=DR m=NAT
        CHKLOOP=3
        LOG=/var/log/ipvsmonitor.log
        addrs() {
          ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
          [ $? -eq 0 ] && return 0 || return 1
        }
        delrs() {
          ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
          [ $? -eq 0 ] && return 0 || return 1
        }
        checkrs() {
          local I=1
          while [ $I -le $CHKLOOP ]; do
            if curl --connect-timeout 1 http://$1 &> /dev/null; then
              return 0
            fi
            let I++
          done
          return 1
        }
        initstatus() {  
          local I
          local COUNT=0;
          for I in ${RS[*]}; do
            if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
              RSSTATUS[$COUNT]=1
            else
              RSSTATUS[$COUNT]=0
            fi
          let COUNT++
          done
        }
        initstatus
        while :; do
          let COUNT=0
          for I in ${RS[*]}; do
            if checkrs $I; then
              if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
                 addrs $I ${RW[$COUNT]}
                 [ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
              fi
            else
              if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
                 delrs $I
                 [ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
              fi
            fi
            let COUNT++
          done
          sleep 5
        done
### --- 授予脚本权限

[root@server11 script]# chmod a+x check_lvs_real.sh 
[root@server11 script]# bash check_lvs_real.sh                              // 它会占用我们前台守护进程的,占用前台窗口
  -> 10.10.10.12:80               Masq    1      0          0         
  -> 10.10.10.13:8080             Masq    1      0          0         
No such destination 
### --- 停止RS1的Apache服务,检测LVS-NAT集群下10.10.10.12已被剔除
### --- 理论上我们监控服务器会发生告警。

[root@server12 ~]# service httpd start
[root@server11 ~]# ipvsadm -Ln                                              // 发现10.10.10.12RS2已经不在了。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  20.20.20.11:80 rr
  -> 10.10.10.13:8080             Masq    1      0          0  
### --- 重新启动RS1的Apache服务,检测LVS-NAT集群下10.10.10.12重新恢复。

[root@server12 ~]# service httpd start                                      // 启动RS2Apache服务
[root@server12 ~]# curl localhost
11111111111
[root@server11 ~]# ipvsadm -Ln                                              // RS2服务重新启动12集群配置又恢复。
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  20.20.20.11:80 rr
  -> 10.10.10.12:80               Masq    2      0          0         
  -> 10.10.10.13:8080             Masq    1      0          0  

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(29)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示