Keepalived+LVS_DR+NGINX

主机以CentOs7 为例子:
四台机器为列:
192.168.1.101 (keepalived+LVS)MASTER
192.168.1.102 (keepalived+LVS)BUCKER
192.168.1.103 nginx
192.168.1.104 nginx
192.168.1.120 VIP
01: 安装keepalived前需要安装的依赖:

yum -y install libnl libnl-devel
yum install -y libnfnetlink-devel
yum -y install openssl-devel
yum install wget
yum install gcc
yum install pcre
yum install openssl
yum install zlib

2: 安装ipvsadm (先安装ipvsadm 再安装keepalived)
3: 安装keepalived:
1 切换到/usr/local/src 下
2 http://www.keepalived.org/software/keepalived-1.3.4.tar.gz (wget 安装)
3 解压缩 tar -zxvf keepalived-1.3.4.tar.gz
4 指定安装目录(/usr/local)下 cd keepalieved-1.3.4 && ./configure –prefix=/usr/local/keepalived-1.3.4
5 编译安装 make && make install
6 cd /etc/ && mkdir keepalived (创建目录 因为keepalived执行的时候会去etc/keepalived/ 下 找keepalived.conf文件 来读取配置信息从而启动),
创建好目录后复制keepalived安装目录下的etc/keepalived/keepalived.conf 到系统根目录 /etc/keepalived/ 目录下 (以后修改keeepalived配置直接修改系统根目录下/etc/keepalived/keepalived.conf 即可)

4: keepalived master 与 bucker的安装方法一致, 最大不同的是 配置文件中vrrp_instance 中 state 一个为master 另一个为bucker ,priority 的值master 一定要大于bucker

5: 2台 nginx 主机的配置:

设置回环IP : 
  1: ifconfig lo:0 192.168.1.120 broadcast 192.168.1.120 netmask 255.255.255.255 up;
  2: route add -host $VIP dev lo:1
  3: 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

配置完毕后查看nginx主机的回环IP 命令: ifconfig

Keepalived 配置文件简介

! Configuration File for keepalived

global_defs { #全局定义部分

notification_email { #设置报警邮件地址,可设置多个

root@localhost     #接收通知的邮件地址

# failover@firewall.loc
# sysadmin@firewall.loc

}
notification_email_from root@localhost #设置 发送邮件通知的地址

smtp_server localhost #设置 smtp server 地址,可是ip或域名.可选端口

smtp_connect_timeout 30 #设置 连接 smtp server的超时时间

router_id LVS_DEVEL1 #主机标识,用于邮件通知

#vrrp_skip_check_adv_addr
vrrp_strict #严格执行VRRP协议规范,此模式不支持节点单播

#vrrp_garp_interval 0
#vrrp_gna_interval 0
}
vrrp_script chk_nginx_service { #VRRP 脚本声明
script “/etc/keepalived/chk_nginx.sh” #周期性执行的脚本
interval 3 #运行脚本的间隔时间,秒
weight -20 #权重,priority值减去此值要小于备服务的priority值
fall 3 #检测几次失败才为失败,整数
rise 2 #检测几次状态为正常的,才确认正常,整数

user keepalived_script #执行脚本的用户或组

}

vrrp_instance VI_1 { #vrrp 实例部分定义,VI_1自定义名称

state MASTER    #指定 keepalived 的角色,必须大写 可选值:MASTER|BACKUP

interface ens33    #网卡设置,lvs需要绑定在网卡上,realserver绑定在回环口。区别:lvs对访问为外,realserver为内不易暴露本机信息

virtual_router_id 51        #虚拟路由标识,是一个数字,同一个vrrp 实例使用唯一的标识,MASTER和BACKUP 的 同一个 vrrp_instance 下 这个标识必须保持一致

priority 100   #定义优先级,数字越大,优先级越高。

advert_int 1   #设定 MASTER 与 BACKUP 负载均衡之间同步检查的时间间隔,单位为秒,两个节点设置必须一样

authentication {     #设置验证类型和密码,两个节点必须一致

    auth_type PASS
    auth_pass 1111
}
virtual_ipaddress {    #设置虚拟IP地址,可以设置多个虚拟IP地址,每行一个

    192.168.1.120
}

}

virtual_server 192.168.1.120 80 { #定义RealServer对应的VIP及服务端口,IP和端口之间用空格隔开

delay_loop 6 #每隔6秒查询realserver状态

lb_algo rr     #后端调试算法(load balancing algorithm)

lb_kind DR    #LVS调度类型NAT/DR/TUN

persistence_timeout 60    同一IP的连接60秒内被分配到同一台realserver

protocol TCP  #用TCP协议检查realserver状态


real_server 192.168.1.114 80 { # 此IP为nginx 服务器真实ip
    weight 1 #权重,最大越高,lvs就越优先访问

TCP_CHECK {  #keepalived的健康检查方式HTTP_GET | SSL_GET | TCP_CHECK | SMTP_CHECK | MISC

	connect_timeout 3    #3 秒无响应超时

	delay_before_retry 3    #重连间隔时间

	connect_port 80  #健康检查realserver的端口

}
    
}
real_server 192.168.1.113 80 { # 第二台nginx 
    weight 1
    TCP_CHECK {
            connect_timeout 3
            delay_before_retry 3
            connect_port 80
    }

}

}

配置完成后 启动keepalived
  启动程序在keepalived 安装目录sbin/ 下的 keepalived 启动: ./keepalived

查看启动进程: ps -ef |grep keepalived 会有三个进程 表示启动成功!
查看日志:tail -f /var/log/messages
查看是否生成了vip : ip add
查看LVS 路由是否检测到2台nginx : ipvsadm -Ln

注:
1 禁用防火墙

[root@centos06 ~]# systemctl stop firewalld.service
 [root@centos06 ~]#systemctl disable firewalld.service
 [root@centos06 ~]#systemctl status firewalld.service (查看关闭状态)
 [yellow@centos06 ~]$ systemctl status firewalld.service
 ● firewalld.service - firewalld - dynamic firewall daemon
 Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
 Active: inactive (dead)


关闭防火墙之后,就正常了

2 重启网卡: /etc/init.d/network restart 重启网卡

3 把vip绑定在lo上,是为了实现rs直接把结果返回给客户端

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
 route add -host $vip lo:0

4 以下操作为更改arp内核参数,目的是为了让rs顺利发送mac地址给客户端

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