集群基础之03(LVS-DR模式调度器、keepalived+haproxy)

目录

1、LVS-DR模式调度器

1-1、IP 命令介绍

1-2、LVS-DR环境

1-2-1、当客户端与集群之间有网关

1-2-2、如果集群使用私有地址,网关的作用是nat

2、haproxy

3、高可用之keepalived


1、LVS-DR模式调度器

 

1-1、IP 命令介绍

ip a ==ip addr-------------------类似于ifconfig命令

ip addr ls dev eth0-----------查看eth0的IP相关信息

[root@rs1 ~]# ip addr add dev eth0 192.168.5.11/24-------添加ip地址

[root@rs1 ~]# ip addr del dev eth0 192.168.5.11/24-----------删除ip地址

查看链路层的信息:

[root@rs1 ~]# ip link

添加一个虚拟网卡:

[root@rs1 ~]# ip link add veth-a type veth peer veth-b--------添加虚拟网卡

给虚拟网卡设置ip地址:

[root@rs1 ~]# ip a a dev veth-a 192.168.4.101/24

让eth0网卡不对arp请求做应答:

[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore

删除arp缓存表条目:

[root@ds ~]# arp -d 192.168.4.101

 

1-2、LVS-DR环境

client:201.1.1.200(eth2)

director: (eth2)

dip: 201.1.1.100

vip: 201.1.1.101

real server:(eth2)

201.1.1.102

201.1.1.103

 

Director的配置

1. 配置vip

[root@ds ~]# ip a a dev eth2 201.1.1.101/24

2. 添加虚拟服务器

[root@ds ~]# ipvsadm -C------清除所有lvs规则

[root@ds ~]# ipvsadm -A -t 201.1.1.101:80 -s rr

3. 添加真实服务器

[root@ds ~]# ipvsadm -a -t 201.1.1.101:80 -r 201.1.1.102 -g

[root@ds ~]# ipvsadm -a -t 201.1.1.101:80 -r 201.1.1.103 -g

 

Real Server的配置:

1.在lo设备上配置vip

[root@rs1 ~]# ip a a dev lo 201.1.1.101/32

2. 不对arp请求做应答,选择arp请求数据包的源IP地址。

[root@rs1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

[root@rs1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

 

arp_ignore参数的作用是控制系统在收到外部的arp请求时,是否要返回arp响应。

0:响应任意网卡上接收到的对本机IP地址的arp请求(包括环回网卡上的地址),而不管该目的IP是否在接收网卡上。

1:只响应目的IP地址为接收网卡上的本地地址的arp请求。

 

arp_announce的作用是控制系统在对外发送arp请求时,如何选择arp请求数据包的源IP地址。

arp_announce参数常用的取值有0,1,2。

0:允许使用任意网卡上的IP地址作为arp请求的源IP。

1:尽量避免使用不属于该发送网卡子网的本地地址作为发送arp请求的源IP地址。

2:忽略IP数据包的源IP地址,选择该发送网卡上最合适的本地地址作为arp请求的源IP地址。

客户端测试:

curl 201.1.1.101

 

1-2-1、当客户端与集群之间有网关

集群是公有地址,网关的作用是转发:

client  ---201.1.2.254(router)201.1.1.254 

real server修改网关:

[root@rs2 ~]# nmcli connection modify eth2 ipv4.method manual ipv4.gateway 201.1.1.254 connection.autoconnect yes

[root@rs2 ~]# nmcli connection up eth2

[root@rs2 ~]# route -n

 

 

1-2-2、如果集群使用私有地址,网关的作用是nat

 

删除client网关:

[root@client ~]# route del default

在路由器上添加规则:

[root@room9pc01 ~]# iptables -t nat -F

[root@room9pc01 ~]# iptables -t nat -A PREROUTING -d 201.1.2.254 -p tcp --dport 80 -j DNAT --to 201.1.1.101

[root@room9pc01 ~]# iptables -t nat -A POSTROUTING -s 201.1.1.0/24 -j SNAT --to 201.1.2.254

[root@client ~]# curl 201.1.2.254

 

2、haproxy

环境:

1台haproxy

201.1.1.100

2台应用服务器

201.1.1.102

201.1.1.103

安装软件:

[root@ds ~]# yum install haproxy

修改配在文件

vim /etc/haproxy/haproxy.cfg

#---------------------------------------------------------------------

# main frontend which proxys to the backends

#---------------------------------------------------------------------

listen stats

bind 0.0.0.0:1080

stats refresh 30s---------30s刷新一次页面状态

stats uri /mystats-------uri是mystats

stats realm Haproxy manager-----状态页面标题

stats auth admin:admin------登陆状态页面的用户名和密码

listen websrv 0.0.0.0:80

cookie SERVERID rewrite

balance roundrobin----------负载均衡调度算法为轮询

server web1 201.1.1.102:80 cookie app1inst1 check inter 2000 rise 2 fall 5-----轮询的服务器IP和端口,每2s检查一次健康状态,服务从down状态到up状态需检查两次才会确认,服务从up状态到down需检查5次才会确认

server web2 201.1.1.103:80 cookie app1inst2 check inter 2000 rise 2 fall 5

 

为了配置haproxy的日志,需要修改/etc/rsyslog.conf

支持远端日志功能:

$ModLoad imudp

$UDPServerRun 514

local2.*        /var/log/haproxy.log

类型.级别

 

重启rsyslog和haproxy

systemctl restart rsyslog

systemctl restart haproxy

 

后端服务器的日志里显示客户端的ip

vim /etc/httpd/conf/httpd.conf

   LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

 

systemctl restart httpd

tail -f /var/log/httpd/access_log

客户端测试:

curl 201.1.1.100

总结:haproxy相对于LVS-NAT,不仅实现了负载均衡,而且还有可视化状态页面,并且配置起来更简单。

 

3、高可用之keepalived

keepalived + lvs

rs1:201.1.1.102

rs2:201.1.1.103

ds1:201.1.1.100

ds2:201.1.1.99

vip:201.1.1.101

client:201.1.1.254

 

在2台调度器上安装软件:

[root@ds1 yum.repos.d]# yum install keepalived

[root@ds2 yum.repos.d]# yum install keepalived

 

健康检测测试:

停掉其中一个real server的httpd服务

HA的测试:

停掉主服务的keepalived服务,vip地址就会飘到另一台服务器上

 

  • 将vip配置成不抢占,修改配置文件/etc/keepalived/keepalived.conf

state BACKUP

nopreempt

curl http://201.1.1.101

debug:

1. ping 201.1.1.101

2.  在ds服务器,ipvsadm -ln,如果看不到规则,则:

   1)  检查keepalived配置文件

   2)检查real server的httpd服务是否启动

3. 检查real server是否绑定了vip,以及是否调整了内核参数

 

keepalived + haproxy

2台haproxy实现HA

2台应用服务器---httpd

1台client

haproxy1(ds1) -- 201.1.1.100

haproxy2(ds2) -- 201.1.1.99

vip: 201.1.1.101

rs1:201.1.1.102

rs2:201.1.1.103

通过脚本对haproyx做健康检查:

cat check_haproxy_status.sh

#!/bin/bash

curl -I localhost &> /dev/null

if [ $? -ne 0 ];then

systemctl stop keepalived

fi

 

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   router_id ds1

}

vrrp_script check_haproxy {

    script "/etc/keepalived/check_haproxy_status.sh"

    inerval 5

}

vrrp_instance VI_1 {

    state BACKUP

  .........

  .........

    track_script {

        check_haproxy

        }

}

客户端测试:

curl 201.1.1.101

你可能感兴趣的:(集群)