LVS-DR+Keepalived高可用群集部署

1,LVS群集是针对Linux内核开发的一个负载均衡项目,基于IP地址虚拟化应用VIP,为基于IP地址和内容请求分发的负载均衡提出了一种高效的解决办法。可使用ipvsadm管理工具。通过整合多台相对廉价的普通服务器,以同一个地址对外提供相同的服务。

2,负载均衡的直接路由工作模式。简称DR工作模式,负载调度器仅作为客户机的访问入口,各节点服务器与调度器位于同一个物理网络,节点服务器直接回应客户机的请求,而不再经过负载调度器。

3,Keepalived是专门针对LVS设计的一款强大的辅助工具,主要用来提供故障切换(Failover)和健康检查(Health Checking)功能--判断LVS负载调度器,节点服务器的可用性,及时隔离并替换为新的服务器,当故障主机恢复后将其重新加入集群。

Q1

Q5 

实验部署简单拓扑:

@@BV`X]Z(X4TL%ES7X1EP`1

服务器配置;

服务器主机            共同VIP  192.168.30.111           安装软件包

LVS1主调度器      IP     192.168.30.77             keepalived  ,ipvsadm

LVS2从服务器      IP     192.168.30.55             keepalived , ipvsadm

节点服务器WEB1  IP     192.168.30.15                httpd

节点服务器WEB2  IP     192.168.30.99                httpd

   客户机             IP     192.168.30.100            测试使用

LVS调度服务器配置

主从服务器配置基本相同(不同之处下面进行标注)

(1)配置虚拟ip地址,采用虚接口的方式(ens33:0),为网卡ens33绑定VIP地址,以便相应群集访问。

cp ifcfg-ens33 ifcfg-ens33:0

vim ifcfg-ens33:0

DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.30.111
NETMASK=255.255.255.0

ifup ens33:0                #启用虚拟ip

q7  


(2)调整/proc相应参数,对于DR群集模式来说,由于LVS负载调度器和各节点需要共用VIP地址,应该关闭Linux内核的重定向参数响应

vi /etc/sysctl.conf

net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0

sysctl   -p      #刷新内核参数

(3)配置LVS负载均衡,

yum install keepalived ipvsadm -y     #使用yum安装必要的软件包

编写脚本方便管理

cd /etc/init.d/

vim  dr.sh
#!/bin/bash
GW=192.168.30.1
VIP=192.168.30.111
RIP1=192.168.30.15
RIP2=192.168.30.99
case "$1" in
start)
        /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm
        systemctl start ipvsadm
        /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up
        /sbin/route add -host $VIP dev ens33:0                                 ##添加本机路由记录,将访问VIP的数据限制在本地,避免通信紊乱


        /sbin/ipvsadm -A -t $VIP:80 -s rr                               #设置LVS,采用rr轮询算法
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g                  #添加节点服务器web1,采用DR模式
        /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g                 # 添加节点服务器web2,采用DR模式
        echo "ipvsadm starting --------------------[ok]"
        ;;
        stop)
        /sbin/ipvsadm -C
        systemctl stop ipvsadm
        ifconfig ens33:0 down
        route del $VIP
        echo "ipvsamd stoped----------------------[ok]"
         ;;
        status)
        if [ ! -e /var/lock/subsys/ipvsadm ];then
        echo "ipvsadm stoped---------------"
        exit 1
                else
                echo "ipvsamd Runing ---------[ok]"
        fi
        ;;
        *)
        echo "Usage: $0 {start|stop|status}"
        exit 1
        esac
        exit 0

chmod +x dr.sh
service dr.sh start

(4)在调度服务器上keepalived的设置部署

Q2  

Q3 

Q4  

cd /etc/keepalived/

vim keepalived.conf

global_defs {
  ...
  smtp_server 127.0.0.1           #指向本地
  router_id LVS_01   #指定名称,备份服务器不同名称,设为LVS_02
  ...            
}

vrrp_instance VI_1 {
  state MASTER             #备份服务器是BACKUP
  virtual_router_id 10     #组号相同
  ...
  auth_pass abc123         #验证密码
  priority 100              #优先级备份小于主服务器
  ...
  virtual_ipaddress {
        192.168.30.111        #指定VIP地址
    }
  ...
virtual_server 192.168.30.111 80 {

        lb_kind   DR              #指定DR模式
...
  real_server 192.168.30.15 80 {       #节点服务器web1 地址   端口
        weight 1
        TCP_CHECK {                       #TCP检查方式
            connect_port 80                #添加端口
            connect_timeout 3            #连接超时
            nb_get_retry 3                 #重试次数
            delay_before_retry 3         #重试间隔秒数
        }  
    }  
    real_server 192.168.30.99 80 {          #节点服务器web2 地址   端口
        weight 1
        TCP_CHECK {
            connect_port 80                

           connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }  
    }   
}

systemctl start keepalived           #开启keepalived服务

节点服务器配置

两个节点服务器配置基本相同(个别不同之处会在下面标注)

(1)配置虚拟VIP,在每个节点服务器,同样需要具有VIP地址192.168.30.111   但此地址仅用作发送web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口lo:0来承载VIP地址。

cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

DEVICE=lo:0
IPADDR=192.168.30.111
NETMASK=255.255.255.0
ONBOOT=yes

ifup  ifcfg-lo:0

(2)安装httpd提供web服务,并关闭防火墙,selinux功能,创建测试页面

yum -y install  httpd

service httpd start

service iptables stop

setenforce 0

两个节点服务器测试页面不同

echo "<h1>this is benet web</h1>">/var/www/html/index.html        #创建节点服务器web1的测试页面

echo "<h1>this is accp  web</h1>">/var/www/html/index.html         #创建节点服务器web2的测试页面

(3)编辑一个服务脚本方便管理

cd /etc/init.d/
vim web.sh

#!/bin/bash
VIP=192.168.30.111
        case "$1" in
        start)
                ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
                /sbin/route add -host $VIP dev lo:0                                          #添加本机路由记录,将访问VIP的数据限制在本地,避免通信紊乱

              
                echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce                   #调整/proc响应参数
                echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
                echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
                sysctl -p >/dev/null 2>&1
                echo "RealServer Start OK "
                ;;
        stop)
                ifconfig lo:0 down
                route del $VIP /dev/null 2>&1
                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 "RealServer Stopd"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                exit 1
        esac
        exit 0

chmod +x web.sh
service web.sh start

firefox "http://127.0.0.1/" &                #在本机浏览器检验能否看到测试页面

service web.sh stop
service web.sh start(建议重启服务)

测死LVS+Keepalived高可用群集

在客户机的浏览器中,通过群集的VIP地址正常访问web页面内容,当主调度器失效时,web页面仍然可以访问

q8  

q9

猜你喜欢

转载自blog.51cto.com/13728740/2161580