[Linux]-构建LVS-DR模式+Keepalived高可用群集

Keepalived

Keepalived是一款高可用软件,它的功能主要包括两方面:
1)通过IP漂移,实现服务的高可用:服务器集群共享一个虚拟IP,同一时间只有一个服务器占有虚拟IP并对外提供服务,若该服务器不可用,则虚拟IP漂移至另一台服务器并对外提供服务;
2)对LVS应用服务层的应用服务器集群进行状态监控:若应用服务器不可用,则keepalived将其从集群中摘除,若应用服务器恢复,则keepalived将其重新加入集群中。

Keepalived可以单独使用,即通过IP漂移实现服务的高可用,也可以结合LVS使用,即一方面通过IP漂移实现LVS负载均衡层的高可用,另一方面实现LVS应用服务层的状态监控,如图所示:

 

Keepalived

的实现基于VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议),而VRRP是为了解决静态路由的高可用。

安装步骤大纲

客户端:1.1.1.245/8

主LVS:1.1.1.2/8

从LVS:1.1.1.3/8

web服务器:1.1.1.5/8    lo : 1.1.1.1

web服务器:1.1.1.6/8    lo :  1.1.1.1

一、配置LVS服务器(主-从两台)
配置IP地址
调整响应参数(主从两台服务器都需要配置)

 [root@localhost ~]# vim /etc/sysctl.conf
修改

# Controls IP packet forwarding
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

保存退出后执行该命令立即生效

[root@localhost ~]# sysctl -p

安装并配置ipvsadm(主从配置一样)

挂载光盘

 [root@localhost ~]# rpm -ihv /mnt/Packages/ipvsadm-1.26-2.el6.x86_64.rpm 

[root@localhost ~]# rpm -ivh /media/CentOS_6.5_Final/Packages/ipvsadm-1.26-2.el6.x86_64.rpm 
warning: /media/CentOS_6.5_Final/Packages/ipvsadm-1.26-2.el6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
Preparing...                ########################################### [100%]
   1:ipvsadm                ########################################### [100%]

随后启动ipvsadm服务

service ipvsadm start

添加为系统服务

[root@localhost ~]# chkconfig --add ipvsadm
[root@localhost ~]# chkconfig ipvsadm on

配置Keepalived服务器(两台一样)

先安装Keepalive服务的依赖包(yum),后安装Keepalived软件(本地光盘),主从都有

yum步骤回顾

rm -rf /etc/yum.repos.d/*
vim /etc/yum.repo.d/yum.repo
#        [yum]
         name=yum install
         baseurl=file:///mnt/
         enabled=1
         gpgcheck=0       

依赖包安装

 yum -y install kernel-devel openssl-devel popt-devel

Keepalived解压制定路径为  -C  /usr/src

tar -zxvf keepalived-1.2.13.tar.gz -C /usr/src/
cd /usr/src/keepalived-1.2.13/

执行命令安装

[root@localhost keepalived-1.2.13]# ./configure --prefix=/ --with-kernel-
dir=/usr/src/kernels/2.6.32-431.el6.x86_64 make && make install 

[root@localhost ~]# /etc/init.d/keepalived start            #开启keepalived服务

[root@localhost ~]# netstat -anp | grep keepalived     #查看进程

[root@localhost keepalived-1.2.13]# netstat -anp | grep keepalived
raw        0      0 0.0.0.0:112                 0.0.0.0:*                   7           43771/keepalived    
raw        0      0 0.0.0.0:112                 0.0.0.0:*                   7           43771/keepalived    
raw        0      0 0.0.0.0:255                 0.0.0.0:*                   7           43770/keepalived    
raw        0      0 0.0.0.0:255                 0.0.0.0:*                   7           43770/keepalived    
unix  2      [ ]         DGRAM                    65282  43768/keepalived    

添加为系统服务就可以用service  keepalived  start | restart | stop 来进行操作

chkconfig --add keepalived
chkconfig keepalived on

!----------------------------------------------------两台一样的操作到此为止--------------------------------------------------!

Keepalived配置文件(主服务器)

cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf_bak          #备份一份,防止误操作

 打开      vim /etc/keepalived/keepalived.conf
更改和删除(dd删除,1000dd删除一千行)

global_defs {
   router_id R1     #这个路由器的名称
}
vrrp_instance VI_1 {     #定义VRRP热备实例
    state MASTER         #热备状态,MASTER表示是主机
    interface eth0       #承载VIP地址的物理接口
    virtual_router_id 1  #虚拟路由器的ID号,每个热备组保持在一组
    priority 100         #优先级,数值越大优先级越高
    advert_int 1         #通告间隔秒数(心跳频值)
    authentication {     #认证信息,热备组保持一致
        auth_type PASS   #认证类型
        auth_pass 1111   #密码字串
    }
    virtual_ipaddress {  #制定飘逸IP地址(VIP,可以有多个)
        1.1.1.1
    }
}
virtual_server 1.1.1.1 80 {
    delay_loop 15                #检查健康时间
    lb_algo rr                   #定义调度算法
    lb_kind DR                   #定义负载均衡群集的模式
    protocol TCP
    real_server 1.1.1.5 80 {     #指定的第一个WEB服务器地址
        weight 1                 #定义权重值
        TCP_CHECK {
            connect_port 80      #检查目标的端口
            connect_timeout 3    #链接超时时间
            nb_get_retry 3       #重复次数
            delay_before_retry 4 #重试间隔时间
        }
    }
    real_server 1.1.1.6 80 {     #指定的第二个WEB服务器地址
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

 配置完后保存退出,使用  ip a  查看接口转发状态

[root@localhost ~]# 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:0e:05:36 brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.2/8 brd 1.255.255.255 scope global eth0
    inet 1.1.1.1/32 scope global eth0
    inet6 fe80::20c:29ff:fe0e:536/64 scope link 
       valid_lft forever preferred_lft forever

Keepalived配置文件(从服务器)

global_defs {
   router_id R2               #名称更变
}
vrrp_instance VI_1 {
    state BACKUP              #从服务器
    interface eth1            #我这个出去的网阿卡是eth1,一般是eth0
    virtual_router_id 1       #保持一组
    priority 99               #优先级要低于主服务器
    advert_int 1              !-----其余于主服务器保持一致------!
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        1.1.1.1
    }
}
virtual_server 1.1.1.1 80 {
    delay_loop 15
    lb_algo rr
    lb_kind DR
    protocol TCP
    real_server 1.1.1.5 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
    real_server 1.1.1.6 80 {
        weight 1
        TCP_CHECK {
            connect_port 80
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 4
        }
    }
}

  重启keepalived服务,ip a 查看,没有1.1.1.1漂移IP地址,因为在主服务器上

[root@localhost ~]# 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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:45:59:3b brd ff:ff:ff:ff:ff:ff
    inet 1.1.1.3/8 brd 1.255.255.255 scope global eth1
    inet6 fe80::20c:29ff:fe45:593b/64 scope link 
       valid_lft forever preferred_lft forever

 配置Web服务器

 配置IP地址


设置VIP*

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=1.1.1.1
NETMASK=255.255.255.255
ONBOOT=yes

添加路由

[root@localhost ~]# route add -host 1.1.1.1 dev lo:0

添加到开机启动项,注意是追加    >>是追加   >是覆盖原有内容

[root@localhost ~]# echo "route add -host 1.1.1.1 dev lo:0" >> /etc/rc.local 

调整响应参数

[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

 sysctl -p使其生效

配置http服务

 Web 1

vim /etc/www/html/index.html
<h1>我觉得OK,这里是1</h1><br/>
<br/>
<h3>1111111111111111</h3>

 Web 2

vim /etc/www/html/index.html
<h1>我觉得OK,这里是2</h1><br/>
<br/>
<h3>2222222222222222</h3>

 添加为系统服务

[root@localhost ~]# chkconfig --add httpd 
[root@localhost ~]# chkconfig  httpd on

客户机验证

 ping -t 1.1.1.1 会通,当主服务器断掉后会卡一下,延迟几秒,这个时候从服务器会代替主服务器的工作,服务器比开许多台VM的PC性能好很多。

漂移IP会在两个keepalived服务器之间无缝切换,达到不间断提供服务的目的性。

网页访问使用轮询rr算法切换

 

 完成,谢谢观看

---恢复内容结束---

原文地址:https://www.cnblogs.com/chenwz/p/7622967.html