• keepalived+lvs


    今天这里来实现keepalived加lvs的dr模式,实现高可用。

    keepalived用来管理lvs。

    环境:

    主机名 IP 系统 角色
    tiandong63 192.168.199.3 rhel6.5、ipvsadm、keepalived lvs server1(MASTER)
    tiandong64 192.168.199.4 rhel6.5、ipvsadm、keepalived lvs server2(BACKUP)
    tiandong65

    rip:192.168.199.5 DG:192.168.199.1

    vip:192.168.199.111

    rhel7.4 realserver1
    tiandong66

    rip:192.168.199.6 DG:192.168.199.1

    vip:192.168.199.111

    rhel7.3 realserver2

    实战:

    lvs server配置

    [root@tiandong63 ~]# yum install ipvsadm keepalived -y
    [root@tiandong64 ~]# yum install ipvsadm keepalived -y

    [root@tiandong63 ~]# /etc/init.d/keepalived start
    [root@tiandong64 ~]# /etc/init.d/keepalived start
    [root@tiandong63 ~]# rpm -ql keepalived    #查看keepalived的安装路径
    [root@tiandong63 ~]# vim /etc/keepalived/keepalived.conf
    1 ! Configuration File for keepalived
      2
      3 global_defs {     #全局定义
      4    notification_email {    #定义邮件
      5    root@localhost        #定义邮件地址
      6    }
      7    notification_email_from root@localhost     #定义邮件地址
      8    smtp_server localhost                   #邮件服务器
      9    smtp_connect_timeout 30            #邮件超时时间
     10    router_id tiandong63   #router_id可以自己定义,但是必须唯一
     11 }
     12
     13 vrrp_instance apache {      #定义vrr组
     14     state MASTER      #vrrp实例的角色,MASTER必须大写
     15     interface eth0         #对外访问的网络接口,和自己的一致
     16     virtual_router_id 51    #虚拟路由器id必须和从的一致
     17     priority 100              #主从优先级,主的要高于从
     18     advert_int 1    #广播周期秒数
     19     authentication {
     20         auth_type PASS
     21         auth_pass 1111
     22     }
     23     virtual_ipaddress {
     24         192.168.199.111    #vip地址,真实环境这里应该是公网ip
     25     }
     26 }
     27
     28 virtual_server 192.168.199.111 80 {      #:虚拟VIP地址 与 端口,DR架构WEB端口要和虚拟端口监听一致。否则将无法访问
     29     delay_loop 6                    #健康检查时间间隔,单位是秒
     30     lb_algo rr        #lvs算法
     31     lb_kind DR     #lvs的模式
     32     nat_mask 255.255.255.0
     33     protocol TCP       #使用TCP协议
     34     real_server 192.168.199.5 80 {       #真实的ip

    35         weight 1
     36         TCP_CHECK {
     37                 connect_timeout 10     #连接超时时间
     38                 nb_get_retry 3
     39                 delay_before_retry 3
     40                 connect_port 80   #连接端口为80,要和上面的保持一致
     41         }
     42     }
     43     real_server 192.168.199.6 80 {    #真实的ip
     44         weight 1
     45         TCP_CHECK {
     46                 connect_timeout 10
     47                 nb_get_retry 3
     48                 delay_before_retry 3
     49                 connect_port 80
     50         }
     51     }
     52 }
    标红的就是配置文件需要修改的地方,在从上必须修改以下几个位置,其他配置一样,把配置文件拷贝到从上,然后修改:

     10    router_id tiandong64
     14     state BACKUP
     17     priority 90

    realserver配置(1和2上面都得配置,直接执行脚本就可以了。)

    [root@tiandong65 ~]# more lvsdr.sh
    #!/bin/bash
    VIP=192.168.199.111
    source /etc/init.d/functions
    case $1 in
    start)
        echo 'start LVS of RealServer DR'
        /sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
        /sbin/route add -host $VIP dev lo:1
        echo '1' > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo '2' > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo '1' > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo '2' > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    stop)
        /sbin/ifconfig lo:1 down
        echo 'Close LVS of RealServer DR'
        echo '0' > /proc/sys/net/ipv4/conf/lo/arp_ignore
        echo '0' > /proc/sys/net/ipv4/conf/lo/arp_announce
        echo '0' > /proc/sys/net/ipv4/conf/all/arp_ignore
        echo '0' > /proc/sys/net/ipv4/conf/all/arp_announce
        ;;
    *)
        echo "Usage:$0 (start|stop)"
    exit 1
    esac

    [root@tiandong65 ~]# ./lvsdr.sh start

    测试:

    此时lvs server的主为192.168.199.3,192.168.199.4是闲置的

    可以在从上面测试:

    [root@tiandong64 ~]# curl 192.168.199.111
    this is 192.168.199.6
    [root@tiandong64 ~]# curl 192.168.199.111
    this is 192.168.199.5
    [root@tiandong64 ~]# curl 192.168.199.111
    this is 192.168.199.6
    [root@tiandong64 ~]# curl 192.168.199.111
    this is 192.168.199.5

    在主上查看连接状态:
    [root@tiandong63 ~]# ipvsadm -ln --stats
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
      -> RemoteAddress:Port
    TCP  192.168.199.111:80                  4       23        0     1908        0
      -> 192.168.199.5:80                    2       11        0      928        0
      -> 192.168.199.6:80                    2       12        0      980        0
    测试lvs server是否会负载:

    停了主(192.168.199.3)上面的keepalived,看一下从(192.168.199.4)上面的是否会开启,是否会正常转发:

    [root@tiandong63 ~]# /etc/init.d/keepalived stop   停止主上面的keepalived
    Stopping keepalived:                                       [  OK  ]
    [root@tiandong64 ~]# ip a    在192.168.199.4上面查看
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:c7:20:71 brd ff:ff:ff:ff:ff:ff
        inet 192.168.199.4/24 brd 192.168.199.255 scope global eth0
        inet 192.168.199.111/32 scope global eth0      #vip已经飘过来了
        inet6 fe80::20c:29ff:fec7:2071/64 scope link
           valid_lft forever preferred_lft forever

    在192.168.199.3上面测试:(此时该主机为从)

    [root@tiandong63 ~]# curl 192.168.199.111
    this is 192.168.199.5
    [root@tiandong63 ~]# curl 192.168.199.111
    this is 192.168.199.6
    [root@tiandong63 ~]# curl 192.168.199.111
    this is 192.168.199.5
    [root@tiandong63 ~]# curl 192.168.199.111
    this is 192.168.199.6

    在192.168.199.4上面查看连接状态:
    [root@tiandong64 ~]# ipvsadm -ln --stats
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
      -> RemoteAddress:Port
    TCP  192.168.199.111:80                  4       22        0     1848        0
      -> 192.168.199.5:80                    2       10        0      872        0
      -> 192.168.199.6:80                    2       12        0      976        0

    当主上的keepalived恢复的话看一下状态:

    当主恢复了之后,vip有飘到了192.168.199.3上面,因为优先级比较高。

    [root@tiandong63 ~]# /etc/init.d/keepalived start
    [root@tiandong63 ~]# ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 00:0c:29:38:0b:14 brd ff:ff:ff:ff:ff:ff
        inet 192.168.199.3/24 brd 192.168.199.255 scope global eth0
        inet 192.168.199.111/32 scope global eth0
        inet6 fe80::20c:29ff:fe38:b14/64 scope link
           valid_lft forever preferred_lft forever

    测试realserver出现故障的现象:

    当一台realserver的Apache服务出现故障时,是否会充lvs中剔除,

    [root@tiandong63 ~]# ipvsadm -ln     正常情况下的状态。
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.199.111:80 rr
      -> 192.168.199.5:80             Route   1      0          0         
      -> 192.168.199.6:80             Route   1      0          0

    当有一台realserver出现故障:

    [root@tiandong66 ~]# systemctl stop httpd    一台服务器的Apache服务故障了

    [root@tiandong63 ~]# ipvsadm -ln      此时查看只有一台realsever了。
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.199.111:80 rr
      -> 192.168.199.5:80             Route   1      0          0

    可以查看lvs server上的日志:

    [root@tiandong63 ~]# tail -f /var/log/messages     把故障的主机移除了。
    Dec 16 12:52:50 tiandong63 Keepalived_vrrp[3571]: VRRP_Instance(apache) Received lower prio advert, forcing new election
    Dec 16 12:52:51 tiandong63 Keepalived_vrrp[3571]: VRRP_Instance(apache) Entering MASTER STATE
    Dec 16 12:52:51 tiandong63 Keepalived_vrrp[3571]: VRRP_Instance(apache) setting protocol VIPs.
    Dec 16 12:52:51 tiandong63 Keepalived_vrrp[3571]: VRRP_Instance(apache) Sending gratuitous ARPs on eth0 for 192.168.199.111
    Dec 16 12:52:51 tiandong63 Keepalived_healthcheckers[3570]: Netlink reflector reports IP 192.168.199.111 added
    Dec 16 12:52:56 tiandong63 Keepalived_vrrp[3571]: VRRP_Instance(apache) Sending gratuitous ARPs on eth0 for 192.168.199.111
    Dec 16 12:58:35 tiandong63 Keepalived_healthcheckers[3570]: TCP connection to [192.168.199.6]:80 failed !!!
    Dec 16 12:58:35 tiandong63 Keepalived_healthcheckers[3570]: Removing service [192.168.199.6]:80 from VS [192.168.199.111]:80
    Dec 16 12:58:35 tiandong63 Keepalived_healthcheckers[3570]: Remote SMTP server [0.0.0.0]:25 connected.
    Dec 16 12:58:35 tiandong63 Keepalived_healthcheckers[3570]: SMTP alert successfully sent.

    当real server恢复之后:

    [root@tiandong66 ~]# systemctl start httpd   恢复Apache服务
    [root@tiandong63 ~]# tail -f /var/log/messages   查看日志,把机器加入到lvs中了
    Dec 16 12:58:35 tiandong63 Keepalived_healthcheckers[3570]: SMTP alert successfully sent.
    Dec 16 13:01:35 tiandong63 Keepalived_healthcheckers[3570]: TCP connection to [192.168.199.6]:80 success.
    Dec 16 13:01:35 tiandong63 Keepalived_healthcheckers[3570]: Adding service [192.168.199.6]:80 to VS [192.168.199.111]:80
    Dec 16 13:01:35 tiandong63 Keepalived_healthcheckers[3570]: Remote SMTP server [0.0.0.0]:25 connected.
    Dec 16 13:01:35 tiandong63 Keepalived_healthcheckers[3570]: SMTP alert successfully sent.
    ^C
    [root@tiandong63 ~]# ipvsadm -ln     #查看
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.199.111:80 rr
      -> 192.168.199.5:80             Route   1      0          0         
      -> 192.168.199.6:80             Route   1      0          0 

    OK了,有什么问题随时欢迎讨论指教!!!!!

    QQ:1127000383

    192.168.199.7

  • 相关阅读:
    GoldenGate V11.1数据复制限制
    OGG切换步骤
    GoldenGate 1403错误解决方法
    logsource and ALO
    使用HANDLECOLLISIONS的几个场景
    Goldengate参数规范
    GoldenGate 进程
    Goldengate进程的合并与拆分规范
    url的组成结构信息
    Python中容器指的是什么?
  • 原文地址:https://www.cnblogs.com/winter1519/p/10126019.html
Copyright © 2020-2023  润新知