centos7 安装 LVS+Keepalived+Nginx 高可用


一共需要四台虚拟服务器,两台主备LVS,两台装nginx

一,安装LVS + Keepalived

1. 两台虚拟机安装ipvsadm

yum -y install ipvsadm

2.两台虚拟机安装Keepalived并配置

2.1 Keepalived安装看下面文章
https://www.cnblogs.com/hardy-wang/p/13827240.html
2.2 配置 MASTER Keeplived
打开keeplived 配置文件

vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   # 路由id: 当前安装keepalived节点主机的标识符,全局唯一
   router_id LVS_DEVEL_132
}

# 计算机节点
vrrp_instance VI_1 {
    # 表示的状态,当前的128位nginx的主机点,MASTER/BACKUP
    state MASTER
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致 
    virtual_router_id 41
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就成为MASTER
    priority 100
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.174.100
    }

}

#配置集群地址访问的IP+端口,端口和nginx保持一致,都是80
virtual_server 192.168.174.100 80 {
    # 健康检查时间,单位:秒
    delay_loop 6
    # 配置负载均衡的算法,默认是轮训
    lb_algo rr
    # 设备LVS的模式 NAT|TUN|DR
    lb_kind DR
    # 设置会话持久化的事件
    persistence_timeout 5
    # 协议 -t
    protocol TCP

    #负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
    real_server 192.168.174.128 80 {
        # 轮询的默认权重配比设置为1
        weight 1
        # 设置健康时间
        TCP_CHECK{
            # 检查的80端口
	    connect_port 80
	    # 超时时间
	    connect_timeout 2
	    # 重试次数
	    retry 2
	    # 间隔时间
	    delay_before_retry 3
        }
    }
    #负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
    real_server 192.168.174.131 80 {
        # 轮询的默认权重配比设置为1
        weight 1
        # 设置健康时间
        TCP_CHECK{
            # 检查的80端口
            connect_port 80
            # 超时时间
            connect_timeout 2
            # 重试次数
            retry 2
            # 间隔时间
            delay_before_retry 3
        }
    }
}

2.2 配置 BACKUP Keeplived

! Configuration File for keepalived

global_defs {
   # 路由id: 当前安装keepalived节点主机的标识符,全局唯一
   router_id LVS_DEVEL_133
}

# 计算机节点
vrrp_instance VI_1 {
    # 表示的状态,当前的128位nginx的主机点,MASTER/BACKUP
    state BACKUP
    # 当前实例绑定的网卡
    interface ens33
    # 保证主备节点一致
    virtual_router_id 41
    # 优先级/权重,谁的优先级高,在MASTER挂掉以后,就成为MASTER
    priority 50
    # 主备之间同步检查的时间间隔,默认1s
    advert_int 1
    # 认证密码,防止非法节点的进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    # 虚拟ip
    virtual_ipaddress {
        192.168.174.100
    }

}

#配置集群地址访问的IP+端口,端口和nginx保持一致,都是80
virtual_server 192.168.174.100 80 {
    # 健康检查时间,单位:秒
    delay_loop 6
    # 配置负载均衡的算法,默认是轮训
    lb_algo rr
    # 设备LVS的模式 NAT|TUN|DR
    lb_kind DR
    # 设置会话持久化的事件
    persistence_timeout 5
    # 协议 -t
    protocol TCP

    #负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
    real_server 192.168.174.128 80 {
        # 轮询的默认权重配比设置为1
        weight 1
        # 设置健康时间
        TCP_CHECK{
            # 检查的80端口
            connect_port 80
            # 超时时间
            connect_timeout 2
            # 重试次数
            retry 2
            # 间隔时间
            delay_before_retry 3
        }
    }
    #负载均衡的真实服务器,也就是nginx节点的具体的真实ip地址
    real_server 192.168.174.131 80 {
        # 轮询的默认权重配比设置为1
        weight 1
        # 设置健康时间
        TCP_CHECK{
            # 检查的80端口
            connect_port 80
            # 超时时间
            connect_timeout 2
            # 重试次数
            retry 2
            # 间隔时间
            delay_before_retry 3
        }
    }
}

3.启动两台lvs机器的keepalived

./keepalived
或
systemctl start keepalived.service

4.查看网络

ip addr

二,安装Nginx并且配置网络lo

1.安装nginx,下面文章

https://www.cnblogs.com/hardy-wang/p/13819305.html

2.为两台nginx server配置虚ip

2.1 打开网络配置目录

cd /etc/sysconfig/network-scripts/

2.2 复制lo文件并修改

cp ifcfg-lo ifcfg-lo:1

修改ifcfg-lo:1文件

DEVICE=lo:1
IPADDR=192.168.174.100
NETMASK=255.255.255.255
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

2.3 运行命令

ifup lo
或
service network restart

2.4 运行 ip addr 查看

3.为两台机器配置arp

ARP响应级别与通告行为 的概念
1. arp-ignore:ARP响应级别(处理请求)
      0:只要本机配置了ip,就能响应请求
      1:请求的目标地址到达对应的网络接口,才会响应请求
2. arp-announce:ARP通告行为(返回响应)
      0:本机上任何网络接口都向外通告,所有的网卡都能接受到通告
      1:尽可能避免本网卡与不匹配的目标进行通告
      2:只在本网卡通告

3.1 打开sysctl.conf

vim /etc/sysctl.conf

3.2 配置 所有网卡 、 默认网卡 以及 虚拟网卡 的arp响应级别和通告行为,分别对应: all , default , lo :

# configration for lvs
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2

3.3 刷新

sysctl -p 

3.4 增加一个网关,用于接收数据报文,当有请求到本机后,会交给lo去处理:

route add -host 192.168.1.150 dev lo:1

3.5 查看

route -n

3.6 由于上面的方式重启下网关就没了,需要添加到rc.local

echo "route add -host 192. 168.1.150 dev lo:1" >> /etc/rc.local
原文地址:https://www.cnblogs.com/hardy-wang/p/13839347.html