lvs(dr)+keepalived高可用

 

1. 集群ip角色说明如下:(以下环境都是RHEL7.3)

角色

物理IP

虚拟IP地址

功能

Keepalived

(master)

10.10.10.63

(DIP)

10.10.10.10

10.10.10.20

(VIP)

两组VIP实现LVS集群高可用

Keepalived

(backup)

10.10.10.64

(DIP)

Nginx1

(realserver)

10.10.10.65

(RIP)

 

Web服务器

Nginx2

(realserver)

10.10.10.66

(RIP)

 

Web服务器

2. 安装节点所需的服务

(1) 2台keepalived安装ipvsadm和keepalived

yum -y install ipvsadm keepalived yum安装,需配置好yum源)

(2) 2台web服务器安装nginx服务

yum -y install nginx

3. 配置keepalived

(1) Master节点配置如下:

[root@master ~]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

     root@localhost #默认三个地址,修改可用地址

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_MASTER #标识当前节点名字,两个节点的此项需要不相同。

}

#默认的配置文件中,使用第三方 smtp 服务器,但这在现实中几乎没有意义,发不出邮件,我们将其指定 localhost, 我们也可以将通知信息的发送交给本地 sendmail 服务处理。

vrrp_instance VI_1 { #定义一个实例,一个集群就是一个实例。 默认VI_1 可以随意改

    state MASTER #指定master节点为主节点备用节点上设置为 BACKUP 即可

    interface ens32 #绑定虚拟 IP 的网络接口

    virtual_router_id 51 #VRRP 组名,两个节点的设置必须一样,以指明各个节点属于同一 VRRP 组

    priority 100 #主节点的优先级(1-254 之间),备用节点必须比主节点优先级低

    advert_int 1 #组播信息发送间隔,两个节点设置必须一样

    authentication { #设置验证信息,两个节点必须一致

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.10.10.10 #指定虚拟 IP, 两个节点设置必须一样

    }

}

 

vrrp_instance VI_2 {

    state BACKUP

    interface ens32

    virtual_router_id 50

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }   

    virtual_ipaddress {

        10.10.10.20

    }   

}

#类似添加虚拟一个服务 ipvsadm -A -t10.10.10.10:80 -s rr

virtual_server 10.10.10.10 80 {#对VIP添加LVS相关内容

    delay_loop 6 #Keepalived 多长时间监测一次 RS

    lb_algo rr #分发算法

    lb_kind DR #DR 模式

    #persistence_timeout 50#同一 IP 50秒内的请求都发到同个real server ,这个会影响LVS的 rr 调度算法, 同一 IP 超过 50 秒后,再次访问,才会被转发到另一台 real server 上。 persistence 持久性的意思(为了实现1:1轮询效果,我这里注释掉)

protocol TCP

 

#ipvsadm -a -t 10.10.10.10:80 -r 10.10.10.65:80 -g(下面real_server相当于这个)

real_server 10.10.10.65 80 {#配置服务节点 1,需要指定 realserver 的真实 IP 地址和端口,IP 不端口之间用空格隔开

        weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器

TCP_CHECK { #这段内容手动添加,以前的内容删除

connect_timeout 3 #表示 3 秒无响应超时

nb_get_retry3          #表示重试次数

delay_before_retry 3 #表示重试间隔

connect_port 80 #检测端口

}

}

#ipvsadm -a -t 10.10.10.10:80 -r 10.10.10.66:80 -g(下面real_server相当于这个)

    real_server 10.10.10.66 80 {

        weight 1

        TCP_CHECK {

                connect_timeout 3

                nb_get_retry3 

                delay_before_retry 3

                connect_port 80

        }

    }

}

 

virtual_server 10.10.10.20 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50

    protocol TCP

 

    real_server 10.10.10.65 80 {

        weight 1

        TCP_CHECK {

                connect_timeout 3

                delay_before_retry 3

                connect_port 80

        }

    }

    real_server 10.10.10.66 80 {

        weight 1

        TCP_CHECK {

                connect_timeout 3

                delay_before_retry 3

                connect_port 80

        }

    }

}

 

(2) Backup节点配置如下:

[root@backup ~]# cat /etc/keepalived/keepalived.conf

! Configuration File for keepalived

 

global_defs {

   notification_email {

     root@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_MASTER

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface ens32

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        10.10.10.10

    }

}

 

vrrp_instance VI_2 {

    state MASTER

    interface ens32

    virtual_router_id 50

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }   

    virtual_ipaddress {

        10.10.10.20

    }   

}

 

virtual_server 10.10.10.10 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50

    protocol TCP

 

    real_server 10.10.10.65 80 {

        weight 1

TCP_CHECK {

connect_timeout 3

delay_before_retry 3

connect_port 80

}

    }

    real_server 10.10.10.66 80 {

        weight 1

        TCP_CHECK {

                connect_timeout 3

                delay_before_retry 3

                connect_port 80

        }

    }

}

 

virtual_server 10.10.10.20 80 {

    delay_loop 6

    lb_algo rr

    lb_kind DR

    #persistence_timeout 50

    protocol TCP

 

    real_server 10.10.10.65 80 {

        weight 1

        TCP_CHECK {

                connect_timeout 3

                delay_before_retry 3

                connect_port 80

        }

    }

    real_server 10.10.10.66 80 {

        weight 1

        TCP_CHECK {

                connect_timeout 3

                delay_before_retry 3

                connect_port 80

        }

    }

}

4. 配置后端真实服务器(realserver)

(1) 2台服务器都添加以下脚本,并把脚本加入开机自启动

[root@nginx1 ~]# cat /etc/init.d/keep-RS

#!/bin/bash

# chkconfig: 2345 30 50

# description: keepalived realserver

 

VIP="10.10.10.10"

VIP1="10.10.10.20"

 

case $1 in

start)

echo "start keepalived-lvs RS..."

#将VIP添加到loopback接口,并且netmask必须是255.255.255.255

/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

/sbin/ifconfig lo:1 $VIP1 broadcast $VIP1 netmask 255.255.255.255 up

#配置内核屏蔽掉Director发来的ARP消息

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)

echo "stop keepalived-lvs RS..."

/sbin/ifconfig lo:0  down

/sbin/ifconfig lo:1  down

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 2

esac

[root@nginx1 ~]# chkconfig --add keep-RS #添加开机启动服务

[root@nginx1 ~]# chkconfig | grep keep

Note: This output shows SysV services only and does not include native

      systemd services. SysV configuration data might be overridden by native

      systemd configuration.

 

      If you want to list systemd services use 'systemctl list-unit-files'.

      To see services enabled on particular target use

      'systemctl list-dependencies [target]'.

 

keep-RS        0:off1:off2:on3:on4:on5:on6:off

(2) 配置nginx测试页面,启动nginx服务,并设置开机自启动

① [root@nginx1 ~]# echo 'nginx1' > /usr/share/nginx/html/index.html

② [root@nginx2 ~]# echo 'nginx2' > /usr/share/nginx/html/index.html

③ [root@nginx1 ~]# systemctl start nginx && systemctl enable nginx

④ [root@nginx2 ~]# systemctl start nginx && systemctl enable nginx

5. 启动keepalived服务,并设置开机自启动

(1) [root@master ~]# systemctl start keepalived && systemctl enable keepalived

(2) [root@backup~]# systemctl start keepalived && systemctl enable keepalived

(3) [root@master ~]# ip a | grep ens32 #查看master节点vip绑定情况

 

(4) [root@backup ~]# ip a | grep ens32 #查看backup节点vip绑定情况

 

 

6. 负载均衡测试:

注意:我这里的web服务器是nginx,所以要实现实验轮询效果,还需修改nginx配置文件

[root@nginx1 ~]# vim /etc/nginx/nginx.conf #2台nginx都要修改

keepalive_timeout   0; #nginx默认的连接超时时间,默认为65秒。将数字改为0即可

 


访问比例都是1:1,至此负载均衡成功!

 

7. 故障测试:

(1) 停止master的keepalived

(2) 发现master上的vip已经漂移到了backup上了

(3) 浏览器再次访问2个vip,发现没有任何影响(只是后端服务全部由backup提供)这样两组VIP实现LVS集群的高可用就成功了!

 

 

 

猜你喜欢

转载自blog.csdn.net/yan7895566/article/details/79157624