略
提示: 在Linux2.4内核以前,使用LVS时必须要重新编译内核以支持LVS功能模块,但是 从Linux2.4内核及以后,已经完全内置了LVS的各个功能模块,无需给内核打任何补丁,可以直接使用LVS提供的各种功能。
#查看Linux内核版本
uname -r
#查看linux内核是否集成lvs模块
find /lib/modules/$(uname -r)/ -iname "**.ko*" | cut -d/ -f5-
#也可以直接使用whereis查看
whereis lvs
yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt*
yum -y install ipvsadm
#查看ipvsadm 版本
ipvsadm -v
#在网卡卡上绑定虚拟ip
ifconfig ens33:0 192.168.11.100 broadcast 192.168.11.100 netmask 255.255.255.255 up
此处在ens33设备上绑定了一个虚拟设备ens33:0,同时设置了一个虚拟IP是192.168.11.100,然后指定广播地址也为192.168.11.100
需注意:虚拟ip地址的广播地址是它本身,子网掩码是255.255.255.255;因为有若干机器要使用同一个ip地址,用本身做广播地址和把子网掩码设成4个255就不会造成ip地址冲突了,否则lvs将不能正常转发访问请求。
route add -host 192.168.11.100 dev ens33:0
#1:启用ip转发,0:禁止ip转发
echo "1" >/proc/sys/net/ipv4/ip_forward
ipvsadm --clear
ipvsadm -A -t 192.168.11.100:80 -s rr
在新加虚拟IP记录中添加两条新的Real Server记录,-g表示指定LVS 的工作模式为直接路由模式;
注意: lvs进行负载转发需要保证lvs负载的端口要和nginx服务的端口一致,这里都使用了80端口;
ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.30:80 -g
ipvsadm -a -t 192.168.11.100:80 -r 192.168.11.31:80 -g
ipvsadm
yum -y install openssl openssl-devel pcre pcre-devel zlib zlib-devel libtool
pcre-config --version
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0/
./configure --prefix=/usr/local/nginx #指定安装目录
make && make install
vim /usr/local/nginx/conf/nginx.conf
http 模块:
取消注释 log_format main (日志格式,可自定义)
修改keepalive_timeout 为0 (断开连接时限,方便测试使用)
轮询模式、指定日志文件
/usr/local/nginx/sbin/nginx
#关闭( $(…)部分等价于pid值)
kill QUIT $(cat /usr/local/nginx/logs/nginx.pid)
#重新加载配置文件(无需重启,新开启的worker线程会使用新配置)
kill HUB pid
或使用
/usr/local/nginx/sbin/nginx -s reload
#重新输出日志文件 (否则日志还是会往原文件输出,运维备份日志文件时需关注)
kill USR1 pid
(1)轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
(2)weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
(3)ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务,好处是可以解决session的问题。
因此前两种只能处理静态页面,而这种方式可以处理动态网站。
(4)fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
(5)url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务 ,后端服务器为缓存时比较有效。
在lvs的DR和TUn模式下,用户的访问请求到达真实服务器后,是直接返回给用户的,而不再经过前端的Director Server,因此,就需要在每个Real server节点上增加虚拟的VIP地址,这样数据才能直接返回给用户。
ifconfig lo:0 192.168.11.100 broadcast 192.168.11.100 netmask 255.255.255.255 up
/sbin/route add -host 192.168.11.100 dev lo:0
arp_announce: 当ARP请求通过某个端口进来是否利用这个接口来回应。
0 -利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
1 - 避免使用另外一个接口上的mac地址去响应ARP请求;
2 - 尽可能使用能够匹配到ARP请求的最佳地址。
arp_ignore: 当ARP请求发过来后发现自己正是请求的地址是否响应;
0 - 利用本地的任何地址,不管配置在哪个接口上去响应ARP请求;
1 - 哪个接口上接受ARP请求,就从哪个端口上回应。
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 #生效配置
cd /usr/local/src/
java -jar ./nginxdemo-0.0.1-SNAPSHOT.jar
java -jar ./nginxdemo-0.0.1-SNAPSHOT.jar --server.port=8090
停掉一个nginx服务测试:LVS具有健康检测机制,不会丢请求
停掉一个web服务测试:nginx具有健康检测机制,不会丢请求