1、拓补图
2、机器规划
主机名 | 内网IP | 外网IP | VIP | 角色 |
cjq11 | 192.168.2.11 | 192.168.10.11 | 192.168.10.88 | LVS-DR |
cjq13 | 192.168.2.13 | 192.168.10.13 | 192.168.10.88 | Nginx1 |
cjq14 | 192.168.2.14 | 192.168.10.14 | 192.168.10.88 | Nginx2 |
cjq15 | 192.168.2.15 | 192.168.10.15 | - | Apache1 |
cjq16 | 192.168.2.16 | 192.168.10.16 | - | Apache2 |
可以做两个LVS一主一从(高可用),apache可以换成tomcat(不会的话留言,需要的人多,后续更新)
3、准备环境(前3台添加网卡操作相同)
3.1、关机环境下 添加网卡:
3.2、更改IP(目的是仅主机网段与原来网卡的网段处于不同网段)
开启全部虚拟机
3.3、配置外网
[root@cjq11 ~]# cd /etc/sysconfig/network-scripts/
[root@cjq11 network-scripts]# ls #只有原来的网卡
查看自己添加的网卡名称(我的是ifcfg-ens37)
[root@cjq11 network-scripts]# ifconfig
[root@cjq11 network-scripts]# cp ifcfg-ens33 ifcfg-ens37
[root@cjq11 network-scripts]# vim ifcfg-ens37
只留这些就行(ens33改为ens37、改IP)
[root@cjq11 network-scripts]# systemctl restart network
[root@cjq11 network-scripts]# ifconfig ens37
4、搭建
4.1、VIP配置
[root@cjq11 ~]# ifconfig ens37:0 192.168.10.88/24
[root@cjq11 ~]# ifconfig ens37:0
加载ip_vs模块并安装ipvsadm软件包
[root@cjq11 ~]# modprobe ip_vs
[root@cjq11 ~]# yum -y install ipvsadm
使用ipvsadm创建负载分配策略
[root@cjq11 ~]# ipvsadm -A -t 192.168.10.88:80 -s wrr
[root@cjq11 ~]# ipvsadm -a -t 192.168.10.88:80 -r 192.168.10.13:80 -g -w 1
[root@cjq11 ~]# ipvsadm -a -t 192.168.10.88:80 -r 192.168.10.14:80 -g -w 2
[root@cjq11 ~]# ipvsadm --save -n > /etc/sysconfig/ipvsadm
[root@cjq11 ~]# systemctl start ipvsadm
[root@cjq11 ~]# systemctl enable ipvsadm
查看负载均衡策略
[root@cjq11 ~]# ipvsadm -Ln
4.2、13和14服务器配置(相同)
关闭ARP转发临时生效(临时永久 2选一即可)
[root@cjq13 ~]# echo 1 > /proc/sys/net/ipv4/conf/ens37/arp_ignore
[root@cjq13 ~]# echo 2 > /proc/sys/net/ipv4/conf/ens37/arp_announce
永久生效:(注意网卡名称)
[root@cjq13 ~]# vim /etc/sysctl.conf #最后添加
net.ipv4.conf.ens37.arp_ignore = 1
net.ipv4.conf.ens37.arp_announce = 2
[root@cjq13 ~]# sysctl -p
配置虚拟IP地址(VIP)
生成回环口配置文件:
[root@cjq13 ~]# cd /etc/sysconfig/network-scripts/
[root@cjq13 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@cjq13 network-scripts]# vim ifcfg-lo:0
原来的全删除复制下面内容注意IP就行
DEVICE=lo:0
IPADDR=192.168.10.88
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
重启network服务
[root@cjq13 network-scripts]# systemctl restart network
[root@cjq13 network-scripts]# ifconfig lo:0
5、ngninx部署(cjq13、cjq14相同)
5.1、软件包下载
[root@cjq13 ~]# wget http://nginx.org/download/nginx-1.22.0.tar.gz
[root@cjq13 ~]# ls
nginx-1.22.0.tar.gz
[root@cjq13 ~]# tar -zxvf nginx-1.22.0.tar.gz -C /usr/local/src/
5.2、更改源码隐藏软件名称和版本号
[root@cjq13 ~]# cd /usr/local/src/nginx-1.22.0/
[root@cjq13 nginx-1.22.0]# vim src/core/nginx.h
改13,14行
[root@cjq13 nginx-1.22.0]# vim src/http/ngx_http_header_filter_module.c
49行
5.3、安装nginx依赖包
[root@cjq13 nginx-1.22.0]# yum install -y gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre pcre-devel
5.4、预编译
5.5、编译
[root@cjq13 nginx-1.22.0]# make -j 2
5.6、安装
[root@cjq13 nginx-1.22.0]# make install
5.7、启动nginx
[root@cjq13 ~]# /usr/local/nginx/sbin/nginx
5.8、查看端口号
[root@cjq13 ~]# netstat -antup | grep 80
5.9、测试
[root@cjq13 ~]# curl -I 192.168.2.13
5.10、网站测试
5.11、添加path变量
[root@cjq13 ~]# ln -s /usr/local/nginx/sbin/* /usr/local/bin/
5.12、编写服务启动脚本
[root@cjq13 ~]# vim /etc/init.d/nginx
#!/bin/bash
# chkconfig: 2345 99 20
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
start)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
echo "Nginx service already running."
else
$PROG -t &> /dev/null
if [ $? -eq 0 ] ; then
$PROG
echo "Nginx service start success."
else
$PROG -t
fi
fi
;;
stop)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
kill -s QUIT $(cat $PIDF)
echo "Nginx service stop success."
else
echo "Nginx service already stop"
fi
;;
restart)
$0 stop
$0 start
;;
status)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
echo "Nginx service is running."
else
echo "Nginx is stop."
fi
;;
reload)
netstat -anplt |grep ":80" &> /dev/null && pgrep "nginx" &> /dev/null
if [ $? -eq 0 ]
then
$PROG -t &> /dev/null
if [ $? -eq 0 ] ; then
kill -s HUP $(cat $PIDF)
echo "reload Nginx config success."
else
$PROG -t
fi
else
echo "Nginx service is not run."
fi
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
5.13、配置服务开机自动启动
[root@cjq13 ~]# chmod +x /etc/init.d/nginx #给脚本添加可执行权限
[root@cjq13 ~]# chkconfig --add nginx #把nginx添加为系统服务
[root@cjq13 ~]# chkconfig nginx on #把nginx添加开机自启动
[root@cjq13 ~]# chkconfig --list nginx #查看nginx开机启动项
6、配置apache服务器
6.1、服务器15配置
[root@cjq15 ~]# yum -y install httpd
[root@cjq15 ~]# echo "192.168.2.15" >/var/www/html/index.html
[root@cjq15 ~]# systemctl start httpd
[root@cjq15 ~]# systemctl enable httpd
6.2、网页测试
6.3、服务器16配置
[root@cjq16 ~]# yum -y install httpd
[root@cjq16 ~]# echo "192.168.2.16" >/var/www/html/index.html
[root@cjq16 ~]# systemctl start httpd
[root@cjq16 ~]# systemctl enable httpd
6.4、网页测试
7、nginx反向代理配置(13、14相同)
7.1修改配置文件
这个文件IP地址13服务器写192.168.2.15、14服务器写192.168.2.16
[root@cjq13 ~]# vim /usr/local/nginx/conf/nginx.conf
upstream httpd {
server 192.168.2.15:80 weight=1 max_fails=1 fail_timeout=10s;
}
proxy_pass http://httpd;
复制到红色框内
绿色做参照物,是你们应该找位置,不修改
[root@cjq13 ~]#nginx -s reload
7.2测试
用15或者16机器或者集群以外的机器
因为我们权重设置的是15:16==1:2所以curl出的结果如下
浏览器访问192.168.10.88时刷新可能不变,需要等久一点,可能15分钟默认值
注意的是服务器11 curl10.88不通、服务器13curl10.88返回192.168.2.15、服务器14curl10.88返回192.168.2.16、只有服务器15,16或者其他curl10.88才会出现1:2