文章目录
前言
本博客内容仅为记录博主思路,仅供参考,一切以自己实践结果为准。
一、LVS+keepalived
1.0 架构概况
作用 | IP地址 | 安装服务 |
---|---|---|
负载均衡器(主) | 192.168.13.10 | ipvsadm/keepalived |
负载均衡器(备) | 192.168.13.20 | ipvsadm/keepalived |
节点服务器1 | 192.168.13.30 | nginx/Tomcat |
节点服务器2 | 192.168.13.40 | nginx/Tomcat |
NFS共享存储 | 192.168.13.50 | rpcbind/nfs |
1.1 环境配置
- 任何实验,如果你不想花几个小时排障的话,第一步:必须是关闭防火墙
- systemctl stop firewalld
- sentenceforce 0
1.2 NFS共享存储
systemctl stop firewalld
setenforce 0
yum install -y rpcbind #安装rpcbind服务,nfs启动的基础环境
mkdir -p /opt/nfs/web1 /opt/nfs/web2 #编写共享目录内容,做测试用
echo '这是192.168.13.30的网页'>/opt/nfs/web1/index.html
echo '这是192.168.13.40的网页'>/opt/nfs/web2/index.html
vim /etc/exports #配置配置共享目录权限(可读可写,可修改目录,root用户不降权)
/opt/nfs/web1 192.168.13.0/24(rw,sync,no_root_squash)
/opt/nfs/web2 192.168.13.0/24(rw,sync,no_root_squash)
systemctl start rpcbind.service #必须先启动rpcbind服务
systemctl start nfs #再启动nfs服务
showmount -e
1.3 节点服务器(nginx+Tomcat动静分离)
1.3.0 配置挂载/网络环境
mount 192.168.13.50:/opt/nfs/web1 /usr/local/nginx/html/ #挂载nfs共享存储的内容
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0 #通过配置虚拟网卡,产生VIP地址
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.13.100
NETMASK=255.255.255.255
ONBOOT=yes
ifup lo:0 #启动该虚拟网卡,生成VIP地址:192.168.13.100
vim /etc/rc.local #将VIP地址添加至配置文件中,并设置为开机自动添加
route add -host 192.168.13.100 dev lo:0
chmod +x /etc/rc.d/rc.local #赋予脚本权限
#1:只响应目的IP地址为物理网卡地址的arp请求
#2:arp请求的源IP必须和接收网卡同网段
vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
sysctl -p #刷新内存中的配置(立即生效)
1.3.1 编译安装nginx服务
yum -y install pcre-devel zlib-devel make #安装编译环境
useradd -M -s /sbin/nologin nginx #创建专门管理nginx的系统用户
tar xf /opt/nginx-1.12.0.tar.gz -C /opt/ #解压nginx源码包
cd /opt/nginx-1.12.0/ #进入解压后的目录,对nginx的模块进行配置
./configure \
--prefix=/usr/local/nginx \ #配置nginx安装路径
--user=nginx \ #配置nginx管理用户
--group=nginx \ #配置nginx所属组
--with-http_stub_status_module \ #监视模块,可以查看目前的连接数等一些信息(非核心模块)
--with-stream #四层反向代理模块(想启动四层代理,必须安装该模块)
make -j 4 && make install #编译安装nginx
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #将nginx命令做软链接,方便后续使用
vim /lib/systemd/system/nginx.service #将nginx添加到系统服务当中(方便启动/关闭/开机自启)
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
chmod 754 /lib/systemd/system/nginx.service #赋予nginx服务文件执行权限
systemctl enable --now nginx.service #设置nginx为开机自启,并立即启动nginx服务
netstat -natp |grep nginx #查看nginx是否启动成功
vim /usr/local/nginx/conf/nginx.conf #设置动静分离内容
39行:charset utf-8;
48行插入以下内容:
location ~ jsp$ {
proxy_pass http://127.0.0.1:8080;
}
nginx -t #检查语法问题
systemctl restart nginx #重启nginx服务
1.3.2 编译安装jdk环境
cd /opt
#安装jdk环境(Tomcat是基于jdk环境运行的)
tar xf jdk-8u91-linux-x64.tar.gz -C /usr/local/ #将源码包下载至对应的目录
cat >/etc/profile.d/jdk.sh<<EOF #设置jdk相关的环境变量(以前有解释过)
JAVA_HOME=/usr/local/jdk1.8.0_91
JRE_HOME=$JAVA_HOME/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile.d/jdk.sh #刷新环境变量配置文件
java -version #显示的版本应该与源码包的版本一致(博主是:1.8.0_131)
1.3.3 编译安装Tomcat
cd /opt
#下载Tomcat源码包
tar xf apache-tomcat-9.0.16.tar.gz
mv apache-tomcat-9.0.16 /usr/local/tomcat
mkdir -p /usr/local/tomcat/webapps/test
cd /usr/local/tomcat/webapps/test
#Tomcat动态主页配置(不需要精通,只需要简单的配置,能进行检测即可)
cat >index.jsp<<EOF
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>JSP test2 page</title>
<body>
<% out.println("动态页面2,this is web 2");%>
</head>
</body>
</html>
EOF
#修改Tomcat动态页面路径指向(不需要精通,只需要简单的配置,能进行检测即可)
sed -i '148,149d' /usr/local/tomcat/conf/server.xml
sed -i '148i <Host name="localhost" appBase="webapps"\n unpackWARs="true" autoDeploy="true"\n xmlValidation="false" xmlNamespaceAware="false">' /usr/local/tomcat/conf/server.xml
sed -i '151i <Context docBase="/usr/local/tomcat/webapps/test" path="" reloadable="true" />' /usr/local/tomcat/conf/server.xml
#唯一要注意的就是151行,这行是路径指向,其余的都是默认配置,复制粘贴即可
/usr/local/tomcat/bin/startup.sh #启动Tomcat服务
#此时网页访问http://192.168.13.30和http://192.168.13.30/index.jsp会产生动静分离的效果
1.4 负载均衡高可用搭建
1.4.1 负载均衡调度器(主)
yum install -y ipvsadm keepalived
cd /etc/keepalived
vim keepalived.conf
10行:smtp_server 127.0.0.1
12行:router_id LVS_01
13-16行:删除
#vrrp热备份模块#
17行:interface ens33
19行(priority 100上方插入):nopreempt
27行:192.168.13.100
28-29行:删除
#virtual虚拟服务器模块#
31行:virtual_server 192.168.13.100 80 {
34行:lb_kind DR
35行:persistence_timeout 0
36行:protocol TCP
38行:real_server 192.168.13.20 80 {
39行:weight 1
40行:TCP_CHECK {
41行:connect_port 80
42行:connect_timeout 3
43行:nb_get_retry 3
44行:delay_before_retry 3
45行:}
46行:}
47行及以下:38,46 co 46 #将上面9行节点服务器配置复制下来,改一下节点服务器IP地址即可
56行:} #对应virtual_server 192.168.13.100 80的大括号
56行以下:全部删除
vim /etc/sysctl.conf #关闭ip转发功能,并配置相关配置
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 #重新加载内存中的配置(立即生效)
systemctl start keepalived #启动keepalived高可用服务
ipvsadm-save > /etc/sysconfig/ipvsadm #生成ipvsadm文件(必须先生成,才能启动ipvsadm)
systemctl start ipvsadm #启动ipvsadm服务
systemctl restart keepalived #重启keepalived高可用服务
ipvsadm -ln #查看转发规则是否成功(博主成功配置后,显示如下)
192.168.13.30:80 Route 1 0 0
192.168.13.40:80 Route 1 0 0
1.4.2 负载均衡调度器(备)
- 与负载均衡调度器(主)的操作大体相同,仅有keepalived配置文件略有不同
yum install -y ipvsadm keepalived
cd /etc/keepalived/
#在负载均衡调度器(主)上操作,节省时间:scp keepalived.conf 192.168.13.20:`pwd`
vim keepalived.conf
12行:router_id LVS_02
16行:state BACKUP
20行:priority 90
vim /etc/sysctl.conf #关闭ip转发功能,并配置相关配置
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 #重新加载内存中的配置(立即生效)
systemctl start keepalived #启动keepalived高可用服务
ipvsadm-save > /etc/sysconfig/ipvsadm #生成ipvsadm文件(必须先生成,才能启动ipvsadm)
systemctl start ipvsadm #启动ipvsadm服务
systemctl restart keepalived #重启keepalived高可用服务
ipvsadm -ln #查看转发规则是否成功(博主成功配置后,显示如下)
192.168.13.30:80 Route 1 0 0
192.168.13.40:80 Route 1 0 0
二、测试
- 1、网页访问http://192.168.13.100会产生负载均衡效果,访问http://192.168.13.100/index.jsp会产生动静分离效果
- 2、主负载:systemctl stop keepalived,VIP地址跳到备用负载均衡器(ip addr查看)
三、结语
- keepalived配置文件,要注意大括号的对齐
- 如果一切配置完毕,VIP地址不出现,可以尝试重启keepalived
- 节点服务器配置好虚拟网卡之后,记得启动该虚拟网卡,否则负载均衡调度器会找不到节点服务器