LVS负载均衡+LVS-DR部署
一.负载均衡介绍
负载均衡集群是由多台服务器组成的集群,用于分发和处理客户端请求,以实现高可用性、性能扩展和负载均衡。
在负载均衡集群中,有一台或多台负载均衡器(Load Balancer)作为前端接收客户端请求,并根据预设的负载均衡算法将请求分发给后端的多台服务器(Backend Servers)。负载均衡器可以根据不同的算法,如轮询、加权轮询、最小连接数、源地址哈希等,选择合适的后端服务器来处理请求。
负载均衡集群的优势包括:
1. 高可用性:通过将负载分布到多台服务器上,即使其中一台服务器出现故障,其他服务器仍可以继续处理请求,提高了系统的可用性。
2. 性能扩展:负载均衡集群可以将请求分发到多台服务器上,从而实现请求的并行处理,提高了系统的性能和吞吐量。
3. 负载均衡:负载均衡器可以根据预设的算法将请求分发到后端服务器,平衡服务器的负载,避免单个服务器过载。
4. 可伸缩性:负载均衡集群可以根据需要增加或减少后端服务器,以适应不同的负载情况和业务需求。
常用的负载均衡集群解决方案:
1. LVS 4层负载
2. haproxy 4层/7层负载
3. nginx 7层负载
4. SLB 云资源负载,同时实现高可用,需要购买
5. F5 硬件负载设备,需要购买设备进行负载均衡
高可用集群HA(High Available)
高性能集群(预测地震、天气预报、安全加密算法研究)
二.LVS集群介绍
lvs的组成
- 负载调度器(Load Balancer):负载调度器将请求分发给多个服务器,以实现负载均衡。它可以根据不同的算法(如轮询、权重等)决定将请求发送到哪个服务器。
- IP 虚拟服务器(IPVS):IPVS 是 LVS 的核心组件。它作为一个核心模块,能够截获并转发来自客户端的请求,并将请求转发到后端的真实服务器。
- 后端服务器(Real Servers):后端服务器是承载实际服务的物理或虚拟服务器。它们处理来自负载调度器的请求,并返回响应给客户端。
lvs的工作原理
LVS(Linux Virtual Server)的工作原理可以简单概括为以下几个步骤:
- 客户端发送请求:当客户端发送请求时,请求将到达负载调度器(Load Balancer)。
- 负载调度器接收请求:负载调度器接收到客户端的请求,并根据预定义的负载均衡算法(如轮询、权重等)确定将请求发送给哪个后端服务器。
- 负载调度器转发请求:负载调度器将请求转发给后端服务器上的 IP 虚拟服务器(IPVS)。
- IP 虚拟服务器接收请求:IPVS 接收到请求后,根据配置的转发规则,将请求转发给实际的后端服务器。
- 后端服务器处理请求:后端服务器接收到请求后,处理该请求并生成响应。
- 响应返回给负载调度器:后端服务器将处理后的响应发送回负载调度器。
- 负载调度器返回响应给客户端:负载调度器接收到响应后,将响应转发给最初的客户端。
通过以上步骤,LVS 实现了负载均衡和高可用性。它将客户端的请求分发到多个后端服务器上,以提高系统的性能和可扩展性,并确保服务的高可用性,即使其中一台后端服务器发生故障,其他正常运行的服务器仍然可以继续提供服务。
lvs的三种工作模式
1、基于NAT的LVS模式负载均衡
NAT(network address translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外王,以及外部用户可以访问位于公司内部的私有的ip主机。
2、 基于TUN的LVS负载均衡
LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。
3、LVS(DR)负载均衡
在DR模式下,LVS负载均衡器作为网关插入到后端服务器和客户端之间。客户端请求到达LVS负载均衡器后,LVS负载均衡器会将请求直接转发给后端服务器,而响应流量则直接返回给客户端,绕过LVS负载均衡器。这样可以避免了请求流量经过LVS负载均衡器的转发,提高了性能。
三.LVS-DR部署
使用DR模型:
1.实现http和https两种负载均衡集群
2.各RS都要提供同一个私钥和同一个证书
实验准备
实验机说明 | 主机名 | ip地址 | 系统 |
---|---|---|---|
负载调度器 | DR | 192.168.10.130(VIP) | CentOS-8 |
后端服务器1 | RS1 | 192.168.10.131(VIP) | CentOS-8 |
后端服务器2 | RS2 | 192.168.10.133(VIP) | CentOS-8 |
四.http负载均衡集群搭建
关闭防火墙设置selinux
[root@localhost ~]# systemctl disable --now firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]#
[root@localhost ~]# setenforce 0
[root@RS1 ~]# vim /etc/selinux/config
在RS1、RS2上安装httpd
yum -y install httpd
设置开机自启
systemctl enable --now httpd
重启主机
reboot
RS1
[root@RS1 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:80 *:*
[root@RS1 ~]#
RS2
[root@RS2 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
[root@RS2 ~]#
在两台主机的网页文件中写入不同的内容以便区分两台主机
RS1
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# cat /var/www/html/index.html
RS1
[root@RS1 ~]#
RS2
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# cat /var/www/html/index.html
RS2
[root@RS2 ~]#
搭建HTTP负载均衡集群
安装net-tools软件包(三台主机上都要操作)
[root@DR ~]# yum -y install net-tools
[root@RS1 ~]# yum -y install net-tools
[root@RS2 ~]# yum -y install net-tools
在DR主机上配置VIP(虚拟IP地址)
#此时DR主机的网卡上只有一个192.168.10.130的IP地址,我们要在网卡上再添加一个虚拟ip
[root@DR ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.130 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe15:844b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:15:84:4b txqueuelen 1000 (Ethernet)
RX packets 662 bytes 402323 (392.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 575 bytes 47892 (46.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 18 bytes 1238 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1238 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@DR ~]#
添加VIP(虚拟IP地址)
#使用ifconfig命令给ens160网卡添加IP地址、子网掩码、和广播地址
[root@DR ~]# ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up
#注意,这种命令行添加虚拟IP的方式在主机重启后会失效,所以要把这行命令写进/etc/rc.local这个脚本文件里面,每次开机时都会执行一遍
[root@DR ~]# cat /etc/rc.local
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.
touch /var/lock/subsys/local
ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up #写到文件里面
[root@DR ~]#
查看网卡
[root@DR ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.10.130 netmask 255.255.255.0 broadcast 192.168.10.255
inet6 fe80::20c:29ff:fe15:844b prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:15:84:4b txqueuelen 1000 (Ethernet)
RX packets 752 bytes 410735 (401.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 652 bytes 55782 (54.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #这是刚刚添加的ip
inet 192.168.10.250 netmask 0.0.0.0 broadcast 192.168.200.250
ether 00:0c:29:15:84:4b txqueuelen 1000 (Ethernet)
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 18 bytes 1238 (1.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 18 bytes 1238 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@DR ~]#
在RS1和RS2主机上配置RIP
首先修改网卡内核参数:编辑/etc/sysctl.conf文件(在 RS1 和 RS2 上操作)
RS1
[root@RS1 ~]# vim /etc/sysctl.conf
#在配置文件最后添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
RS2
[root@RS2 ~]# vim /etc/sysctl.conf
#在配置文件最后添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
在lo接口配置VIP
注意:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告
RS1
[root@RS1 ~]# ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up
[root@RS2 ~]# ifconfig
.......
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.10.250 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
RS2
[root@RS2 ~]# ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up
......
lo:0: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.10.250 netmask 0.0.0.0
loop txqueuelen 1000 (Local Loopback)
同样,这些也要写到/etc/rc.local里面
RS1
[root@RS1 ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up #写进文件
[root@RS1 ~]#
RS2
[root@RS2 ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up #写进文件
配置路由信息
DR
[root@DR ~]# route add -host 192.168.10.250 dev ens160
[root@DR ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens160
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.10.250 0.0.0.0 255.255.255.255 UH 0 0 0 ens160
RS1
[root@RS1 ~]# route add -host 192.168.10.250 dev lo:0
[root@RS1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens160
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.10.250 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@RS1 ~]#
RS2
[root@RS2 ~]# route add -host 192.168.10.250 dev lo:0
[root@RS2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.10.2 0.0.0.0 UG 100 0 0 ens160
192.168.10.0 0.0.0.0 255.255.255.0 U 100 0 0 ens160
192.168.10.250 0.0.0.0 255.255.255.255 UH 0 0 0 lo
[root@RS2 ~]#
#路由添加也要写进/etc/rc.local
DR
[root@DR ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up
route add -host 192.168.10.250 dev ens160
RS1和RS2
[root@RS1 ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig lo:0 192.168.10.250/32 broadcast 192.168.10.250 up
route add -host 192.168.10.250 dev lo:0 #添加这一行
在DR上添加规则
安装ipvsadm软件包
[root@DR ~]# yum -y install ipvsadm
添加规则
#这个规则是DR调度器把访问请求接收到80端口,DR调度器本身没有80端口,而是把访问请求转发给后端服务器的80端口
[root@DR ~]# ipvsadm -A -t 192.168.10.250:80 -s wrr
[root@DR ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
[root@DR ~]#
继续添加规则
[root@DR ~]# ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.131:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.10.250:80 -r 192.168.10.133:80 -g
查看规则
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.250:80 wrr
-> 192.168.10.131:80 Route 1 0 0
-> 192.168.10.133:80 Route 1 0 0
#当有访问请求访问192.168.10.250的80端口时转发到192.168.10.131和192.168.10.133的80端口上
[root@DR ~]#
保存规则
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
#注意,规则虽然保存了但是主机重启后不会主动开启规则
输入下面这个密码恢复规则
[root@DR ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
Service already exists
Destination already exists
Destination already exists
[root@DR ~]#
把这个命令加入到/etc/rc.local文件中,这样开机时也会同时恢复规则
[root@DR ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up
route add -host 192.168.10.250 dev ens160
测试
命令行访问测试
[root@RS2 ssl]# curl http://192.168.10.250
RS2
[root@RS2 ssl]#
浏览器访问测试
http负载均衡集群搭建完成
五.https负载均衡集群搭建
生成密钥对和证书步骤
创建所需的CA目录以及文件
[root@DR ~]# for dir in certs crl newcerts private ; do mkdir -pv /etc/pki/CA/$dir;done
mkdir: created directory '/etc/pki/CA'
mkdir: created directory '/etc/pki/CA/certs'
mkdir: created directory '/etc/pki/CA/crl'
mkdir: created directory '/etc/pki/CA/newcerts'
mkdir: created directory '/etc/pki/CA/private'
[root@DR ~]#
[root@DR ~]# cd /etc/pki/CA/
[root@DR CA]# ls
certs crl newcerts private
[root@DR CA]#
生成密钥对
[root@DR CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
......+++++
.............................................................................+++++
e is 65537 (0x010001)
[root@DR CA]#
生成自签署证书和证书索引数据库文件,制定第一个颁发证书的序列号
[root@DR CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 365
...
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:runtime
Organizational Unit Name (eg, section) []:runtime
Common Name (eg, your name or your server's hostname) []:runtime
Email Address []: #这里直接回车
[root@DR CA]#
[root@DR CA]# touch index.txt
[root@DR CA]# echo 01 > serial
[root@DR CA]#
在装有httpd服务的RS1主机上生成密钥对
[root@RS1 ~]# mkdir /etc/httpd/ssl
[root@RS1 ~]#
[root@RS1 ~]# cd /etc/httpd/ssl/
[root@RS1 ssl]#
[root@RS1 ssl]# (umask 077;openssl genrsa -out httpd.key 2048)
Generating RSA private key, 2048 bit long modulus (2 primes)
.....................................+++++
............................................................+++++
e is 65537 (0x010001)
[root@RS1 ssl]#
生成证书签署请求
[root@RS1 ssl]# openssl req -new -key httpd.key -days 365 -out httpd.csr
...
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HB
Locality Name (eg, city) [Default City]:WH
Organization Name (eg, company) [Default Company Ltd]:runtime
Organizational Unit Name (eg, section) []:runtime
Common Name (eg, your name or your server's hostname) []:runtime
Email Address []: #这里直接回车
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: #这里直接回车
An optional company name []: #这里直接回车
[root@RS1 ssl]#
[root@RS1 ssl]# ls
httpd.csr httpd.key
[root@RS1 ssl]#
把证书签署请求文件发送给CA
[root@RS1 ssl]# scp httpd.csr root@192.168.10.130:/root
root@192.168.10.130's password:
Permission denied, please try again.
root@192.168.10.130's password:
httpd.csr 100% 989 1.8MB/s 00:00
[root@RS1 ssl]#
CA签署证书并发给RS1和RS2主机
[root@DR ~]# openssl ca -in /root/httpd.csr -out httpd.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Oct 8 12:25:28 2023 GMT
Not After : Oct 7 12:25:28 2024 GMT
Subject:
countryName = CN
stateOrProvinceName = HB
organizationName = runtime
organizationalUnitName = runtime
commonName = runtime
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
67:EC:F0:4B:68:1A:75:5D:08:FD:A1:6F:A8:90:ED:5D:2D:96:58:46
X509v3 Authority Key Identifier:
keyid:F9:CC:AF:25:3C:75:48:6C:C9:AE:61:34:EE:03:9E:F8:43:F2:B9:F1
Certificate is to be certified until Oct 7 12:25:28 2024 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@DR ~]#
[root@DR ~]# ls
anaconda-ks.cfg httpd.crt httpd.csr
[root@DR ~]#
在DR主机上将签署好的证书httpd.crt和生成的自签署证书cacert.pem发送给RS1和RS2主机
DR
[root@DR ~]# scp httpd.crt root@192.168.10.131:/etc/httpd/ssl
The authenticity of host '192.168.10.131 (192.168.10.131)' can't be established.
ECDSA key fingerprint is SHA256:z2F8hfFO4+Z6J0ZDbXo2fsytcMRBVqsUnM2LdvOjWCs.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.131' (ECDSA) to the list of known hosts.
root@192.168.10.131's password:
httpd.crt 100% 4424 4.0MB/s 00:00
[root@DR ~]# scp /etc/pki/CA/cacert.pem root@192.168.10.131:/etc/httpd/ssl
root@192.168.10.131's password:
cacert.pem 100% 1310 1.9MB/s 00:00
[root@DR ~]#
RS1
[root@RS1 ~]# cd /etc/httpd/ssl/
[root@RS1 ssl]# ls
cacert.pem httpd.crt httpd.csr httpd.key
[root@RS1 ssl]#
RS2
[root@RS2 ~]# mkdir /etc/httpd/ssl
DR
[root@DR ~]# scp httpd.crt root@192.168.10.133:/etc/httpd/ssl
root@192.168.10.133's password:
httpd.crt 100% 4424 3.4MB/s 00:00
[root@DR ~]# scp /etc/pki/CA/cacert.pem root@192.168.10.133:/etc/httpd/ssl
root@192.168.10.133's password:
cacert.pem 100% 1310 1.5MB/s 00:00
[root@DR ~]#
RS2
[root@RS2 ssl]# ls
cacert.pem httpd.crt
配置https
将RS1主机上的密钥对拷贝至RS2主机,安装模块
RS1
[root@RS1 ssl]# scp httpd.key root@192.168.10.133:/etc/httpd/ssl
The authenticity of host '192.168.10.133 (192.168.10.133)' can't be established.
ECDSA key fingerprint is SHA256:AOQsguPRyPBU/A2KBE9FlV6d+Q0A9b+Z9CK3gHvDg3k.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.133' (ECDSA) to the list of known hosts.
root@192.168.10.133's password:
httpd.key 100% 1679 1.6MB/s 00:00
RS2
[root@RS2 ssl]# ls
cacert.pem httpd.crt httpd.key
[root@RS2 ssl]#
在RS1和RS2主机上安装mod_ssl模块
[root@RS1 ~]# yum -y install mod_ssl
[root@RS2 ~]# yum -y install mod_ssl
在 RS1 和 RS2 主机上配置ssl
RS1
[root@RS1 ~]# vim /etc/httpd/conf.d/ssl.conf
......
/SSLCertificateFile #在命令行输入这个,找到下面这一行后缀改为文件所在的位置
SSLCertificateFile /etc/httpd/ssl/httpd.crt
......
/SSLCertificateKeyFile #在命令行输入这个,找到下面这一行后缀改为文件所在的位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
......
/SSLCACertificateFile #在命令行输入这个,找到下面这一行后缀改为文件所在的位置
/SSLCACertificateFile /etc/httpd/ssl/cacert.pem #这一行要去掉注释
......
RS2
[root@RS2 ~]# vim /etc/httpd/conf.d/ssl.conf
......
/SSLCertificateFile #在命令行输入这个,找到下面这一行后缀改为文件所在的位置
SSLCertificateFile /etc/httpd/ssl/httpd.crt
......
/SSLCertificateKeyFile #在命令行输入这个,找到下面这一行后缀改为文件所在的位置
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
......
/SSLCACertificateFile #在命令行输入这个,找到下面这一行后缀改为文件所在的位置
SSLCACertificateFile /etc/httpd/ssl/cacert.pem #这一行要去掉注释
......
启动httpd服务
httpd服务端口号是443
RS1
[root@RS1 ~]# systemctl restart httpd
[root@RS1 ~]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:443 *:*
LISTEN 0 128 *:80 *:*
[root@RS1 ~]#
RS2
[root@RS2 ssl]# systemctl restart httpd
[root@RS2 ssl]# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
LISTEN 0 128 *:80 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 128 *:443 *:*
[root@RS2 ssl]#
在DR主机上配置规则
#这个规则是DR调度器把访问请求接收到443端口,DR调度器本身没有443端口,而是把访问请求转发给后端服务器的443端口
[root@DR ~]# ipvsadm -A -t 192.168.10.250:443 -s wrr
#当有访问请求访问192.168.10.250的443端口时转发到192.168.10.131和192.168.10.133的443端口上
[root@DR ~]# ipvsadm -a -t 192.168.10.250:443 -r 192.168.10.131:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.10.250:443 -r 192.168.10.133:80 -g
[root@DR ~]# ipvsadm -Ln #查看规则
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.250:80 wrr
-> 192.168.10.131:80 Route 1 0 0
-> 192.168.10.133:80 Route 1 0 0
TCP 192.168.10.250:443 wrr
-> 192.168.10.131:443 Route 1 0 0
-> 192.168.10.133:443 Route 1 0 0
[root@DR ~]#
保存规则
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
#注意,规则虽然保存了但是主机重启后不会主动开启规则
输入下面这个密码恢复规则
[root@DR ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
Service already exists
Destination already exists
Destination already exists
Service already exists
Destination already exists
Destination already exists
[root@DR ~]# vim /etc/rc.local
[root@DR ~]#
把这个命令加入到/etc/rc.local文件中,这样开机时也会同时恢复规则
[root@DR ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up
route add -host 192.168.10.250 dev ens160
测试
命令行访问测试
[root@RS1 ~]# curl -k https://192.168.10.250
RS1
[root@RS1 ~]#
浏览器访问
-> 192.168.10.133:443 Route 1 0 0
[root@DR ~]#
保存规则
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
#注意,规则虽然保存了但是主机重启后不会主动开启规则
输入下面这个密码恢复规则
```shell
[root@DR ~]# ipvsadm -R < /etc/sysconfig/ipvsadm
Service already exists
Destination already exists
Destination already exists
Service already exists
Destination already exists
Destination already exists
[root@DR ~]# vim /etc/rc.local
[root@DR ~]#
把这个命令加入到/etc/rc.local文件中,这样开机时也会同时恢复规则
[root@DR ~]# cat /etc/rc.local
......
touch /var/lock/subsys/local
ifconfig ens160:0 192.168.10.250/32 broadcast 192.168.10.250 up
route add -host 192.168.10.250 dev ens160
测试
命令行访问测试
[root@RS1 ~]# curl -k https://192.168.10.250
RS1
[root@RS1 ~]#
浏览器访问