Centos7.2高可用集群keepalived + LVS(DR模式)

拓扑图

环境概述

      机器作用                IP地址
lvs1+keepalived Master   192.168.42.150
lvs2+keepalived Backup   192.168.42.149
web1                     192.168.42.148
web2                     192.168.42.147
VIP                      192.168.42.180

注意事项:
第一:确保client能够直接访问web服务器。因为在LVS-DR模式下web服务器回复client的时候,是直接回复给client的,不需要经过LVS,所以web服务器必须能够和client的网络互通。
第二,lvs服务器和web-server他们必须在同一个网段内,因为LVS转发包的时候,是直接修改了包目标的MAC地址,直接扔给了rs,基于MAC地址的修改是活动在OSI二层数据链路层的,工作在数据链路层的网络设备就是交换机了,所以必须在一个交换机下面,也就是一个局域网内。
第三,为啥抑制real-server的ARP,是这样的,我们在DR模式要更改web-server的ARP的模式,arp_ignore为1是说只回答目标IP地址是来访网络接口本地地址的ARP查询请求,我们都在回环接口上配置了一个VIP,当arp模式更改以后,那么如果有谁在请求VIP的mac地址时,那么那些web-server就会回答arp广播报文了,只有lvs才会,如果没有更改arp模式,那么大家都喊我是VIP,这就乱套了。

安装部署

LVS配置

#打开路由转发功能
[root@node1 ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf
#使上述的配置文件生效
[root@node1 ~]# sysctl -p
net.ipv4.ip_forward = 1
#查看selinux是否关闭,未关闭则关闭
[root@node1 ~]# getenforce
Disabled
#关闭防火墙
[root@node1 ~]# systemctl stop firewalld
#安装ipvsadm以及keepalived
yum install -y ipvsadm  keepalived
#配置keepalived.conf文件
[root@node1 keepalived]# vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {            # 全局设置
   notification_email {    # 设置报警邮件地址
        test@sina.cn
   }
   notification_email_from Alexandre.Cassen@firewall.loc   # 设置邮件的发送地址
   router_id MASTER       # 表示该台服务的ID,备用节点修改为BACKUP
}

vrrp_instance VI_1 {               # vrrp 实例
    state MASTER                   # 当前节点的角色,备用节点为BACKUP
    interface ens33
    virtual_router_id 51           # master和backup的id一致
    priority 100                   #备用节点修改为90
    advert_int 1                   # master和backup之间的检测时间
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.42.180/32 dev ens33          # 设置虚拟IP
    }
}

virtual_server 192.168.42.180 80 {    # 设置虚拟服务器,ip端口以及花边号用逗号隔开
    delay_loop 5         # 设置运行情况检查时间,单位是秒
    lb_algo rr           # 负载算法,这里是rr表示轮询
    lb_kind DR           # LVS工作机制,这里是DR模式
#    persistence_timeout 50    # 会话保持时间,单位是秒,这个选项对动态网页非常有帮助,为集群系统中的session共享提供了一个很好的解决方案,有了这个会话>保持功能,用户的请求会被一直分发到某个服务节点,知道超过这个会话的保持时间,需要注意的是,这个会话保持时间是最大无响应的超时时间,in other words,用户>在动态页面50秒以内没有执行任何操作,那么接下来的操作会重新调度到另一个节点上。如果一直在操作则不会影响
    protocol TCP   # 有TCP,UDP,好像还有哦http。

    real_server 192.168.42.148 80  {     #设定真实服务器地址以及端口,
        weight 1         # 设置权重,数字越低,调度的比例越小。
        HTTP_GET {      #以http模式检查该服务器监控状态
            url {    
              path /      # 检测的网页路径
              digest 699d00db64614eb287931b977d5c047f      # 采用genhash命令获取
            }
            connect_timeout 1   # 连接超时时间,
            connect_port 80      #连接的端口,
            nb_get_retry 3        # 表示重试次数,
            delay_before_retry 1   # 表示重试间隔。
        }
    }

    real_server 192.168.42.147 80  {
        weight 1
        HTTP_GET {
            url {
              path /
              digest 66ee606d5019d75f83836eeb295c6b6f
            }
            connect_timeout 2
            connect_port 80
            nb_get_retry 3
            delay_before_retry 1
        }
    }
}


#使用genhash获取web服务的url的校验码
[root@node1 keepalived]# genhash -s 192.168.42.147 -p 80 -u /
MD5SUM = 66ee606d5019d75f83836eeb295c6b6f
[root@node1 keepalived]# genhash -s 192.168.42.148 -p 80 -u /
MD5SUM = 699d00db64614eb287931b977d5c047f

RealServer节点配置

#设置相关的抑制广播通告的配置信息
[root@localhost ~]# cat /etc/sysctl.conf 
# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2


#使得上面的配置生效
[root@localhost ~]# sysctl -p

#添加虚拟IP和路由
[root@localhost ~]# ifconfig lo:0 192.168.42.180 netmask 255.255.255.255 broadcast 192.168.42.180 up
[root@localhost ~]# route add -host 192.168.42.180 dev lo:0   #先不添加这路由,如果出现无法访问的时候再添加也不迟

#安装nginx,并启动
yum install nginx -y
systemctl start nginx




启动keepalived服务

#启动keepalived
systemctl start keepalived

#查看相关的日志信息,可以看到Master机器的日志信息如下:
Nov  2 01:07:42 localhost systemd: Starting LVS and VRRP High Availability Monitor...
Nov  2 01:07:42 localhost Keepalived[2400]: Starting Keepalived v1.3.5 (03/19,2017), git commit v1.3.5-6-g6fa32f2
Nov  2 01:07:42 localhost Keepalived[2400]: Opening file '/etc/keepalived/keepalived.conf'.
Nov  2 01:07:42 localhost systemd: PID file /var/run/keepalived.pid not readable (yet?) after start.
Nov  2 01:07:42 localhost systemd: Started LVS and VRRP High Availability Monitor.
Nov  2 01:07:42 localhost Keepalived[2401]: Starting Healthcheck child process, pid=2402
Nov  2 01:07:42 localhost Keepalived[2401]: Starting VRRP child process, pid=2403
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: Registering Kernel netlink reflector
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: Registering Kernel netlink command channel
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: Registering gratuitous ARP shared channel
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: Opening file '/etc/keepalived/keepalived.conf'.
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: VRRP_Instance(VI_1) removing protocol VIPs.
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: Using LinkWatch kernel netlink reflector...
Nov  2 01:07:42 localhost Keepalived_vrrp[2403]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(10,11)]
Nov  2 01:07:42 localhost kernel: IPVS: Registered protocols (TCP, UDP, SCTP, AH, ESP)
Nov  2 01:07:42 localhost kernel: IPVS: Connection hash table configured (size=4096, memory=64Kbytes)
Nov  2 01:07:42 localhost kernel: IPVS: Creating netns size=2040 id=0
Nov  2 01:07:42 localhost kernel: IPVS: Creating netns size=2040 id=1
Nov  2 01:07:42 localhost kernel: IPVS: ipvs loaded.
Nov  2 01:07:42 localhost Keepalived_healthcheckers[2402]: Opening file '/etc/keepalived/keepalived.conf'.
Nov  2 01:07:42 localhost kernel: IPVS: [rr] scheduler registered.
Nov  2 01:07:42 localhost Keepalived_healthcheckers[2402]: Activating healthchecker for service [192.168.42.180]:80   # 后端real-server校验成功,可以提供服务
Nov  2 01:07:42 localhost Keepalived_healthcheckers[2402]: Activating healthchecker for service [192.168.42.180]:80   # 后端real-server校验成功,可以提供服务
Nov  2 01:07:43 localhost Keepalived_vrrp[2403]: VRRP_Instance(VI_1) Transition to MASTER STATE     # 设置本机为master角色
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: VRRP_Instance(VI_1) Entering MASTER STATE
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: VRRP_Instance(VI_1) setting protocol VIPs.   #设置VIP到本机上
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.42.180
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:44 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:49 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:49 localhost Keepalived_vrrp[2403]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.42.180
Nov  2 01:07:49 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:49 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:49 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  2 01:07:49 localhost Keepalived_vrrp[2403]: Sending gratuitous ARP on ens33 for 192.168.42.180


#查看IP信息
[root@node1 keepalived]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:79:3e:93 brd ff:ff:ff:ff:ff:ff
    inet 192.168.42.150/24 brd 192.168.42.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.42.180/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe79:3e93/64 scope link 
       valid_lft forever preferred_lft forever

相关测试访问

#在备用节点测试如下
[root@localhost ~]# curl http://192.168.42.180
web1
[root@localhost ~]# curl http://192.168.42.180
web2
[root@localhost ~]# curl http://192.168.42.180
web1
[root@localhost ~]# curl http://192.168.42.180
web2

#将主节点停掉,查看服务是否正常
[root@localhost ~]# systemctl stop keepalived

#查看备用节点的日志信息
Nov  7 01:02:03 localhost Keepalived_vrrp[1275]: VRRP_Instance(VI_1) Transition to MASTER STATE
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: VRRP_Instance(VI_1) Entering MASTER STATE
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: VRRP_Instance(VI_1) setting protocol VIPs.
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.42.180
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:04 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:09 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:09 localhost Keepalived_vrrp[1275]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.42.180
Nov  7 01:02:09 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:09 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:09 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
Nov  7 01:02:09 localhost Keepalived_vrrp[1275]: Sending gratuitous ARP on ens33 for 192.168.42.180
由以上的信息可得,备用节点已经对外提供服务

#查看备用节点的网卡信息,看虚拟IP是否已经转换
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 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
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:a1:31:82 brd ff:ff:ff:ff:ff:ff
    inet 192.168.42.149/24 brd 192.168.42.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.42.180/32 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fea1:3182/64 scope link 
       valid_lft forever preferred_lft forever

#测试路由切换以后的访问是否正常,在主节点测试
[root@localhost ~]# curl http://192.168.42.180
web2
[root@localhost ~]# curl http://192.168.42.180
web1
[root@localhost ~]# curl http://192.168.42.180
web2
[root@localhost ~]# curl http://192.168.42.180
web1


#将主节点的keepalived开启之后,主节点又重新提供服务,备用节点重新回到备用状态


#停掉某一个web1服务器,查看请求的内容
[root@localhost ~]# curl http://192.168.42.180
web2
[root@localhost ~]# curl http://192.168.42.180
web2
[root@localhost ~]# curl http://192.168.42.180
web2
可以看到,当停止web1服务器的时候,所有的请求都将调度至web2

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值