OpenShift集群资源列表

主机名 类型 IP
相关节点IP
master0 master 192.168.0.2
master1 master 192.168.0.3
master2 master 192.168.0.4
infra0 infra 192.168.0.5
infra1 infra 192.168.0.6
vip地址分配
master-vip vip 192.168.0.250
infra-vip vip 192.168.0.251

部署Master API负载均衡器作为集群内外访问的入口

  1. 在三个Master节点安装KeepAlived与LVS
    1
    2
    $ ansible masters -m package -a 'name=keepalived state=present'
    $ ansible masters -m package -a 'name=ipvsadm state=present'
  2. 选择master0作为VIP的Master节点
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    $ cat /etc/keepalived/keepalived.conf
    global_defs {
    #指定keepalived在发生切换时需要发送email到的对象
    notification_email {
    receiver@example.com #邮件接收者
    }
    notification_email_from sender@example.com #邮件发送者
    smtp_server 127.0.0.1 #邮件服务器地址,如未安装,使用本地
    smtp_connect_timeout 30
    router_id LVS_DEVEL
    }

    #IP漂移协议
    vrrp_instance VI_1 {
    state MASTER #指定A节点为主节点 备分机上设置为BACKUP即可
    interface eth0 #绑定IP漂移的网络接口,在该接口上绑定VIP
    virtual_router_id 51 #VRRP组名,三个节点的设置必须一样
    priority 100 #优先级,同一个 vrrp_instance 的 MASTER 优先级必须比 BACKUP 高
    advert_int 1 #MASTER 与 BACKUP 负载均衡器之间同步检查的时间间隔,单位为秒
    authentication { # 设置认证
    auth_type PASS #认证方式,支持 PASS 和 HA
    auth_pass 1111 #证密码为明文,同一 vrrp 实例 MASTER 与 BACKUP 使用相同的密码才能正常通信
    }
    virtual_ipaddress { #虚拟IP地址(VIP),可以有多个地址,每个地址占一行
    192.168.0.250 #绑定VIP
    }
    }

    #只接收8443端口过来的请求
    virtual_server 192.168.232.206 8443 {
    delay_loop 6 # 服务健康检查周期,6秒
    lb_algo wlc # 负载均衡调度算法,一般用wrr、rr、wlc
    lb_kind DR # 负载均衡转发规则。一般包括DR,NAT,TUN 3种
    nat_mask 255.255.255.0
    persistence_timeout 50 #会话保持时间。把用户请求请求间隔在未超过保持时间时,一直分发到某个服务节点
    protocol TCP

    #RS服务器1
    real_server 192.168.0.2 8443 {
    weight 1
    #健康检查
    TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
    connect_timeout 10 # 连接超时时间
    nb_get_retry 3 # 重连次数
    delay_before_retry 3 # 重连时间间隔
    connect_port 8443 # 检测端口
    }
    }

    #RS服务器2
    real_server 192.168.0.3 8443 {
    weight 1
    #健康检查
    TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
    connect_timeout 10 # 连接超时时间
    nb_get_retry 3 # 重连次数
    delay_before_retry 3 # 重连时间间隔
    connect_port 8443 # 检测端口
    }
    }
    #RS服务器2
    real_server 192.168.0.4 8443 {
    weight 1
    #健康检查
    TCP_CHECK { # 通过TcpCheck判断RealServer的健康状态
    connect_timeout 10 # 连接超时时间
    nb_get_retry 3 # 重连次数
    delay_before_retry 3 # 重连时间间隔
    connect_port 8443 # 检测端口
    }
    }
    }
    KeepAlive健康检查类型有五种:TCP_CHECK/HTTP_GET/SSL_GET/MISC_CHECK/SMTP_CHECK
  3. TCP_CHECK:TCP端口是否能通
    1
    2
    3
    4
    5
    6
    TCP_CHECK {     # 通过TcpCheck判断RealServer的健康状态
    connect_timeout 10 # 连接超时时间
    nb_get_retry 3 # 重连次数
    delay_before_retry 3 # 重连时间间隔
    connect_port 6500 # 检测端口
    }
  4. HTTP_GET:请求HTTP URL的Code是否为200
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HTTP_GET {
    url {
    path /
    status_code 200
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  5. SSL_GET:请求HTTPS URL的Code是否为200
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SSL_GET {
    url {
    path /
    status_code 200
    }
    connect_timeout 3
    nb_get_retry 3
    delay_before_retry 3
    }
  6. MISC_CHECK:脚本运行的返回码是否为0
    1
    2
    3
    4
    5
    MISC_CHECK {
    misc_path "/etc/keepalived/misc_check.sh https://192.168.0.2:6500/check_status" # 外部程序或者脚本的路径和参数
    misc_timeout 10 # 脚本执行的超时时间
    misc_dynamic #动态权重标志。脚本返回0则检测成功权重不变,返回1表示失败权重设置为0
    }
  7. SMTP_CHECK:SMTP健康检查器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SMTP_CHECK
    {
    # 用于smtp HELO请求的可选字符串
    helo_name hello
    host {
    # 默认值为真实服务器的IP
    connect_ip 192.168.0.3
    # 默认值为25
    connect_port 25
    }
    # 连接超时时间
    connect_timeout 5
    # 重试失败检查的次数
    retry 3
    # 重试前延迟秒
    delay_before_retry <INTEGER>
    }