Linux下搭建LVS+keepalived+nginx

文章目录

  • 一、LVS 简介
  • 三、服务器基础配置
  • 四:安装软件
    • 1、PACS-web1,PACS-web2 安装 nginx
    • 2、配置抑制lo回环响应,PACS-web1,PACS-web2上执行
    • 3、LVS_master,LVS_backup安装keepalived
  • 五、keepalived节点配置
  • 六、记录keepalived日志
  • 七、验证LVS是否部署否成功

一、LVS 简介

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。
本次搭建的服务器为虚拟机CentOS7.6系统,均有外网环境,故安装软件比较方便,如果内网环境可能需要自行制作yum源,这里不做展示
Linux下搭建LVS+keepalived+nginx_第1张图片

从架构可以看出来,从用户的角度来说,会直接访问10.13.109.17,也就是说不管系统如何设计要保证此ip的可用性,从设计的角度考虑:用户访问10.13.109.17,这是一个虚拟iP,用户不关心内部如何协调

我们使用10.13.109.15作为主机 Master机器,然后使用keepalived 技术配置 HA(high avilable)配置高可用行,也就是说如果 分发的机器Master宕机了,keepalived会自动转到10.13.109.16 backup机器,

这就是HA配置,保证master即使宕机了,也不影响转发;master机器负责把用户的请求转发到 真实的机器, web1和web2,他们会按照一定的轮训机制,访问,如果web1宕机,master会自动转发到web2;

我们在两台负载均衡的机器上面,配置keepalived保证分发机器的高可用行HA;

三、服务器基础配置

1、确定服务器时间一致

date

2、关闭防火墙和selinux

systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s#SELINUX=enforcing#SELINUX=disable#g /etc/selinux/config

3、更改四台主机名

vi /etc/hostname 

4、更改hosts文件

vi /etc/hosts 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.13.109.15 LVS-master
10.13.109.16 LVS-backup
10.13.109.18 PACS-web1
10.13.109.19 PACS-web2

四:安装软件

1、PACS-web1,PACS-web2 安装 nginx

yum install -y nginx

如果yum安装nginx时报错:No package nginx available. Error: Nothing to do,是因为本地yum源中没有我们想要的nginx,那么我们就需要下载新的CentOS-Base.repo,如果正常安装,请跳过

解决步骤:
1、备份原来的CentOS-Base.repo

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak

2、下载新的CentOS-Base.repo 到/etc/yum.repos.d/

####centos 6版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
 
####centos 7版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
 
####centos 8版本
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo

3、运行 yum makecache

yum makecache

作用:就是把服务器的包信息下载到本地电脑缓存起来,makecache建立一个缓存,以后用install时就在缓存中搜索,提高了速度

4、安装epel源

yum -y install epel-release

5、安装NGINX服务

yum -y install nginx

启动nginx,加入开机自启动

systemctl start nginx.service
systemctl enable nginx.service

备份原有默认页面

mv /usr/share/nginx/html/index.html /usr/share/nginx/html/index.html.bak

登录主机web1,修改默认页面

vi /usr/share/nginx/html/index.html

清空内容,新增完整内容如下:

This is PACS-web1 10.13.109.18

同理,登录主机web2,修改默认页面

This is PACS-web2 10.13.109.19

6、访问页面
10.13.109.18,访问时报403错误
Linux下搭建LVS+keepalived+nginx_第2张图片
于是查看nginx日志,路径为/var/log/nginx/error.log。打开日志发现报错Permission denied,详细报错如下:
Linux下搭建LVS+keepalived+nginx_第3张图片
发现是权限问题,如果nginx没有目录的操作权限,也会出现403错误。
Linux下搭建LVS+keepalived+nginx_第4张图片
于是修改权限为777

chmod 777 index.html

再次访问,发现正常
Linux下搭建LVS+keepalived+nginx_第5张图片
web服务器绑定VIP
2台web服务器为lo:0绑定VIP地址、抑制ARP广播

2、配置抑制lo回环响应,PACS-web1,PACS-web2上执行

cd /qhapp
vi lvs_rs.sh
#!/bin/bash
vip=10.13.109.17
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev lo:0
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
sysctl -p >/dev/null 2>&1

#执行脚本

bash lvs-rs.sh

查看

ip a

#复制到另外一台

scp lvs-rs.sh root@10.13.109.16:~

#执行脚本

bash lvs-rs.sh

查看

ip a

3、LVS_master,LVS_backup安装keepalived

yum install -y ipvsadm keepalived

五、keepalived节点配置

主节点master配置

vi /etc/keepalived/keepalived.conf
! Configuration File For keepalived
#email 通知,基本不用此处所以删掉
global_defs{
  # 路由id,全局唯一,表示当前keepalived节点的唯一性
  router_id LVS_DEVEL	
  }
vrrp_instance VI_1 {
    # 指定Keepalived的角色,MASTER为主,BACKUP为备
    state MASTER	
    # 网卡id
    interface ens192	
    # 虚拟路由编号,主备要一致
    virtual_router_id 51	
    # 定义优先级,数字越大,优先级越高,主DR必须大于备DR
    priority 100	
    # 检查间隔,默认为1s 
    advert_int 1	
    authentication {
    	# 这里配置的密码最多为8位,主备要一致,否则无法正常通讯
        auth_type PASS
        auth_pass 1111	
    }
    virtual_ipaddress {
    	# 定义虚拟IP10.13.109.17,可多设,每行一个
        10.13.109.17	
    }
}

# 定义对外提供服务的LVSVIP以及port
virtual_server 10.13.109.17 80 {	
	# 设置健康检查时间,单位是秒
    delay_loop 6	
    # 设置负载调度的算法为wlc
    lb_algo rr	
    # 设置LVS实现负载的机制,有NATTUNDR三个模式
    lb_kind DR	
    #设置会话保持时间,对动态网页非常有用
    persistence_timeout 0
    #指定转发协议类型,有TCPUDP两种
    protocol TCP
    # 指定real server1的IP地址,此处是PACS-web1的地址
    real_server 10.13.109.18 80 {	 
    	# 配置节点权值,数字越大权重越高
        weight 1	
        #realserver的状态监测设置部分单位秒
        TCP_CHECK {
        	#超时时间
            connect_timeout 10
            #重试次数
            nb_get_retry 3
            #重试间隔
            delay_before_retry 3
            #监测端口
            connect_port 80
        }
    }
    # 指定real server2的IP地址,此处是PACS-web2的地址
    real_server 10.13.109.19 80 {	
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

2、keepalived从节点配置文件

vi /etc/keepalived/keepalived.conf
! Configuration File For keepalived
global_defs{
  # 路由id,全局唯一,表示当前keepalived节点的唯一性
  router_id LVS_DEVEL	
  }
vrrp_instance VI_1 {
    # 指定Keepalived的角色,MASTER为主,BACKUP为备
    state MASTER	
    # 网卡id
    interface ens192	
    # 虚拟路由编号,主备要一致
    virtual_router_id 51	
    # 定义优先级,数字越大,优先级越高,主DR必须大于备DR
    priority 100	
    # 检查间隔,默认为1s 
    advert_int 1	
    authentication {
    	# 这里配置的密码最多为8位,主备要一致,否则无法正常通讯
        auth_type PASS
        auth_pass 1111	
    }
    virtual_ipaddress {
    	# 定义虚拟IP10.13.109.17,可多设,每行一个
        10.13.109.17	
    }
}

# 定义对外提供服务的LVSVIP以及port
virtual_server 10.13.109.17 80 {	
	# 设置健康检查时间,单位是秒
    delay_loop 6	
    # 设置负载调度的算法为wlc
    lb_algo rr	
    # 设置LVS实现负载的机制,有NATTUNDR三个模式
    lb_kind DR	
    persistence_timeout 0
    protocol TCP
    # 指定real server1的IP地址,此处是PACS-web1的地址
    real_server 10.13.109.18 80 {	 
    	# 配置节点权值,数字越大权重越高
        weight 1	
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
    # 指定real server2的IP地址,此处是PACS-web2的地址
    real_server 10.13.109.19 80 {	
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

3、Keepalived 2个节点开启流量转发

echo 1 > /proc/sys/net/ipv4/ip_forward

4、启动PACS-web两个节点的nginx

systemctl start nginx

5、启动LVS两个节点keepalived,注意先启动主后启动从

systemctl start keepalived.service && systemctl enable keepalived.service

6、测试漂移切换,在keepalived主节点停止keepalived查看
关闭前主节点
Linux下搭建LVS+keepalived+nginx_第6张图片
关闭前备节点
Linux下搭建LVS+keepalived+nginx_第7张图片

systemctl stop keepalived.service 

主节点关闭keepalived后,在keepalived从节点查看IP是否能看到VIP
关闭后主节点
Linux下搭建LVS+keepalived+nginx_第8张图片
关闭后备节点
Linux下搭建LVS+keepalived+nginx_第9张图片
以上可以看到,主节点keepalived关闭后,虚拟IP自动漂移到备节点
此时再把主节点keepalived服务器开启

systemctl start keepalived.service

开启后主节点
Linux下搭建LVS+keepalived+nginx_第10张图片
开启后备节点
Linux下搭建LVS+keepalived+nginx_第11张图片
以上可看到主节点开启keepalived服务器,VIP又自动漂移回主节点

网页访问VIP地址
Linux下搭建LVS+keepalived+nginx_第12张图片
发现这里出现的是PACS-web1的nginx信息
可以多访问几次,也可以直接关闭10.13.109.18,再测试访问,如下
Linux下搭建LVS+keepalived+nginx_第13张图片
可以发现这里显示的是PACS-web2的nginx信息,至此,验证完成

六、记录keepalived日志

1、修改/etc/sysconfig/keepalived日志保存路径

sed -i s/KEEPALIVED_OPTIONS=\"-D"/KEEPALIVED_OPTIONS=\"-D -d -S 0"/gp /etc/sysconfig/keepalived

2、添加rsyslog记录日志存放位置

echo "local0.* /var/log/keepalived.log" >>/etc/rsyslog.conf

3、重启rsyslog日志服务和keepalived服务

systemctl restart rsyslog && systemctl restart keepalived.service

4、检查日志文件是否存在和记录日志

ls /var/log/keepalived.log
tail -3  /var/log/keepalived.log

七、验证LVS是否部署否成功

测试keepalived的监控检测
网页访问虚拟ip 10.13.109.17

ipvsadm -ln
ipvsadm -ln --stats
ipvsadm -lnc

至此部署完成

你可能感兴趣的:(Linux,linux,lvs,nginx)