zl程序教程

您现在的位置是:首页 >  工具

当前栏目

keepalived+lvs+tomcat+nfs架构部署

Tomcat架构部署 NFS Keepalived LVS
2023-09-11 14:17:00 时间

目录

一、实验环境准备

二、配置负载调度器lvs(主192.168.59.11,备192.168.59.10)

安装ipvsadm工具

配置VIP地址(主192.168.59.100)

调整内核(proc)响应参数

配置负载分配

lvs2(备192.168.59.10)相同配置 (把上面再执行一遍)

三、部署共享存储(NFS:192.168.59.14)

安装nfs和rpcbind

创建共享目录并设置权限

输入页面内容

 设置共享目录并发布共享

备lvs:192.168.59.10相同配置

四、部署节点服务器(tomcat1,tomcat2)

配置虚拟VIP地址(vip:192.168.59.100) {两台节点服务器都需要配置}

启动lo:0网卡,添加VIP本地访问路由

设置系统自动识别,并设置执行权限

调整内核的arp响应参数以阻止更新VIP的MAC地址,避免发生冲突

安装tomcat、nfs、rpcbind

web2和web1一样的配置,但是注意修改IP

web1:挂载共享目录

web2:挂载共享目录

到这里我们小小的测试以下

五、部署keepalived

修改配置文件keepalived.conf(这步主备lvs操作一致)

配置主lvs(192.168.59.11)

配置备lvs(192.168.59.10)

六、最终测试

总结


一、实验环境准备

DR服务器(LVS):主-192.168.59.11   备-192.168.59.10
tomcat1:192.168.59.12
tomcat2:192.168.59.13
VIP(虚拟回环):192.168.59.100
NFS:192.168.59.14
客户端:192.168.59.90

因为是在内网环境中我们需要配置本地yum仓库,并且关闭防火墙

#!/bin/bash
########关闭防火墙############
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#######yum仓库#########
mount /dev/cdrom /mnt
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*.repo  /etc/yum.repos.d/bak
touch /etc/yum.repos.d/local.repo
echo "
[local]
name=local
baseurl=file:///mnt
enabled=1
gpgcheck=0
" > /etc/yum.repos.d/local.repo
yum clean all
yum makecache

要在每台主机中都执行一遍

执行效果。

二、配置负载调度器lvs(主192.168.59.11,备192.168.59.10)

安装ipvsadm工具

yum -y install ipvsadm

配置VIP地址(主192.168.59.100)

cd /etc/sysconfig/network-scripts

cp ifcfg-ens33 ifcfg-ens33:0

vim ifcfg-ens33:0

ifup ens33:0  #开启网卡

ifconfig

调整内核(proc)响应参数

对于DR集群模式来说,由于LVS负载调度器和个节点需要共用VIP地址,一个关闭linux内核的重定向参数响应服务器部署一台路由器,那么它不会发送重定向,所以可以关闭该功能

vim /etc/sysctl.conf

net.ipv4.ip_forward = 0  #关闭路由转发功能

net.ipv4.conf.all.send_redirects = 0 #下面都是关闭内核重定向功能

net.ipv4.conf.default.send_redirects = 0

net.ipv4.conf.ens33.send_redirects = 0

sysctl -p

配置负载分配

ipvsadm -C

ipvsadm -A -t 192.168.59.100:80 -s rr

ipvsadm -a -t 192.168.59.100:80 -r 192.168.59.12:80 -g   

ipvsadm -a -t 192.168.59.100:80 -r 192.168.59.13:80 -g

ipvsadm

ipvsadm-save > /etc/sysconfig/ipvsadm  

lvs2(备192.168.59.10)相同配置 (把上面再执行一遍)

三、部署共享存储(NFS:192.168.59.14)

安装nfs和rpcbind

yum -y install nfs-utils rpcbind

systemctl start nfs

systemctl start rpcbind

创建共享目录并设置权限

mkdir /opt/db1 /opt/db2

chmod 777 /opt/zb /opt/lc

 

输入页面内容

echo "i am web1" > /opt/db1/index.html
echo "i am web2" > /opt/db2/index.html

 设置共享目录并发布共享

vim /etc/exports

/opt/db1 192.168.59.0/24(rw,sync)
/opt/db2 192.168.59.0/24(rw,sync)

 exportfs -rv

 

备lvs:192.168.59.10相同配置

四、部署节点服务器(tomcat1,tomcat2)

tomcat1:192.168.59.12

tomcat2:192.168.59.13

配置虚拟VIP地址(vip:192.168.59.100) {两台节点服务器都需要配置}

此地址仅作为发送web响应数据包的源地址,并不需要监听客户机的访问请求(这里由调度器调度并分发)。因此实验虚接口lo:0来承担VIP地址,并为本机添加一条路由记录,将访问VIP的数据限制在本地,以避免通讯紊乱。

cd /etc/sysconfig/network-scripts/

cp ifcfg-lo ifcfg-lo:0

vim ifcfg-lo:0

启动lo:0网卡,添加VIP本地访问路由

ifup lo:0

ifconfig lo:0

route add -host 192.168.59.100 dev lo:0

设置系统自动识别,并设置执行权限

vim /etc/rc.local

/sbin/route add -host 192.168.59.100 dev lo:0

chmod +x /etc/rc.d/rc.local

调整内核的arp响应参数以阻止更新VIP的MAC地址,避免发生冲突

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

安装tomcat、nfs、rpcbind

tomcat可以使用wget下载(没有网,可以预先下载然后传进去)

yum -y install java 

wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz

tar -xvf apache-tomcat-9.0.65.tar.gz

mv apache-tomcat-9.0.65 /usr/local/tomcat

#进入配置文件,修改端口为8000

vim /usr/local/tomcat/conf/server.xml

ln -s /usr/local/tomcat/bin/startup.sh /usr/bin/startup.sh

startup.sh #开启tomcat

systemctl start nfs rpcbind  #开启服务

访问一下试试就安装完成了

web2和web1一样的配置,但是注意修改IP

web1:挂载共享目录

mount.nfs 192.168.59.14:/opt/db1 /usr/local/tomcat/webapps/ROOT/

df -hT

web2:挂载共享目录

mount.nfs 192.168.59.14:/opt/db2 /usr/local/tomcat/webapps/ROOT/

df -hT

到这里我们小小的测试以下

这样我们lvs+tomcat+nfs就部署完成

五、部署keepalived

这我们选择yum安装就行

yum -y install keepalived

修改配置文件keepalived.conf(这步主备lvs操作一致)

cd /etc/keepalived/

cp keepalived.conf keepalived.conf.bak  #备份以下配置文件

vim keepalived.conf

配置主lvs(192.168.59.11)

这里配置的是双主热备,比单配的会更快地切换,还在当中添加了负载均衡策略,配置了后我们其实也不需要再配本地的负载均衡策略了。

! Configuration File for keepalived

global_defs {    #定义全局参数
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1   #邮件服务指向地址
   smtp_connect_timeout 30
   router_id LVS_1            #指定服务器名,主备服务器不能相同!!!
   vrrp_skip_check_adv_addr
   #vrrp_strict              #一定要注释,取消严格遵守vrrp协议功能,否则VIP无法被连接
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {       #定义VRRP热备份实力参数
    state MASTER           #指定热备状态,主为MASTER,备为BACKUP
    interface ens33        #指定承载的VIP地址的物理接口
    virtual_router_id 10   #指定虚拟路由器的ID号,每个热备组保持一致
    priority 100           #指定优先级,数值越大优先级越高
    advert_int 1           #通告间隔秒数(心跳频率)
    authentication {       #定义认证信息,每个热备组保持一致
        auth_type PASS     #认证类型
        auth_pass 1111     #指定验证密码,主备服务器保持一致
    }
    virtual_ipaddress {   
        192.168.59.200    #指定集群VIP
    }
}
vrrp_instance VI_2 {       #第二个热备组,含义与上方一致
    state BACKUP
    interface ens33
    virtual_router_id 11
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.59.200
    }
}

virtual_server 192.168.59.100 80 {  #指定虚拟服务器地址(VIP)、端口、定义虚拟服务器和RIP服务器地址池参数
    delay_loop 6      #健康检查的间隔
    lb_algo rr        #指定调度算法:轮询(rr)
    lb_kind DR        #指定集群工作模式,直接路由(DR)
    persistence_timeout 0   #连接保持时间
    protocol TCP            #应用服务采用的TCP协议

    real_server 192.168.59.12 80 {  #指定第一个web节点的地址,端口
        weight 1                    #节点权重
        TCP_CHECK{                  #添加健康检查方式
        connect_port 80             #添加检查的端口
        connect_timeout 3           #添加连接超时时间
        nb_get_retry 3              #添加重试次数
        delay_beforce_retry 3       #添加重试间隔
        }
}
real_server 192.168.59.13 80 {    #指定第二个web节点的地址,端口
          weight 1
          TCP_CHECK{
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_beforce_retry 3
          }
}
}

                                                                                    

systemctl start  keepalived

ip  a

配置备lvs(192.168.59.10)

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_2
   vrrp_skip_check_adv_addr
 #  vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 10
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.59.200
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface ens33
    virtual_router_id 11
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.59.200
    }
}
erver 192.168.59.100 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.59.12 80 {
        weight 1
        TCP_CHECK{
        connect_port 80
        connect_timeout 3
        nb_get_retry 3
        delay_beforce_retry 3
        }
}
real_server 192.168.59.13 80 {
          weight 1
          TCP_CHECK{
          connect_port 80
          connect_timeout 3
          nb_get_retry 3
          delay_beforce_retry 3
          }
}
}

systemctl start keepalived

ip a

六、最终测试

现在我们是可以正常访问的

我们将主lvs断掉,查看备

 再看客户端

还是可以正常访问,到此配置结束

总结

集群满足的三个特点:负载均衡,健康检查,故障切换

        对于节点服务器:健康检查如果发现有故障的节点就会将其隔离或者提出集群。待其恢复后在重新加入集群当中。
        负载均衡器:健康检查会定时检查主机的状态(包括主机和服务状态)如果主故障就会自动切换到备主机上,待主的恢复重新在让主承载业务请求。