网络文件共享服务以及企业级调度器lvs

1、实现基于MYSQL验证的vsftpd虚拟用户访问

#利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能
#项目网站:http://pam-mysql.sourceforge.net/
#说明:因为此项目年代久远不再更新,当前只支持CentOS 6,7,不支持CentOS 8
环境准备:
本实验在两台主机上实现
一台作为FTP服务器centos7
一台作为mariadb数据库服务器centos8

#在数据库服务器安装mariadb数据库
[root@mariadb ~]#yum install -y mariadb-server;systemctl enable --now mariadb

#在数据库服务器上配置数据库支持vsftpd服务
[root@mariadb ~]#mysql
MariaDB [(none)]> create database vsftpd;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> use vsftpd;
Database changed
MariaDB [vsftpd]> create table users(id int auto_increment not null primary key,name char(50) binary not null,password char(48) binary not null);
Query OK, 0 rows affected (0.003 sec)
MariaDB [vsftpd]> insert into users(name,password) values('ftp_tan',password('123456'));
Query OK, 1 row affected (0.001 sec)
MariaDB [vsftpd]> insert into users(name,password) values('ftp_liang',password('123456'));
Query OK, 1 row affected (0.001 sec)

MariaDB [vsftpd]> select * from users;
+----+-----------+-------------------------------------------+
| id | name      | password                                  |
+----+-----------+-------------------------------------------+
|  1 | ftp_tan   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | ftp_liang | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+-----------+-------------------------------------------+
2 rows in set (0.000 sec)
#创建连接数据库的用户
MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.000 sec)
MariaDB [vsftpd]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

#在ftp服务器上安装vsftpd和pam_mysql的包
[root@ftp ~]# yum install -y vsftpd
#对于centos6,pam_mysql的包由epel源提供,对于centos7无对应的rpm包,需要手动编译安装
#当前版本的源码不支持centos8,使用中会提示如下错误
[root@centos8 ~]#tail -f /var/log/secure
Jan  2 10:20:31 centos8 vsftpd[15519]: PAM unable to 
dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/security/pam_mysql.so: 
undefined symbol: make_scrambled_password

#centos7编译安装pam_mysql
[root@ftp ~]# yum install -y gcc gcc-c++ make mariadb-devel pam-devel
[root@ftp ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
[root@ftp ~]# tar xf pam_mysql-0.7RC1.tar.gz
[root@ftp ~]# cd pam_mysql-0.7RC1
[root@ftp pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
[root@ftp pam_mysql-0.7RC1]# make install
[root@ftp pam_mysql-0.7RC1]# ll /lib64/security/pam_mysql.*
-rwxr-xr-x 1 root root    882 Nov 18 17:02 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Nov 18 17:02 /lib64/security/pam_mysql.so

#在ftp服务器上建立pam认证所需要的文件
[root@ftp ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#说明:配置参数参考pam_mysql-0.7RC1目录下的README文档
配置字段说明
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数
user=vsftpd为登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密
crypt 加密方式:
	0表示不加密
	1表示crypt(3)加密
	2表示使用mysql password()函数加密
	3表示md5加密
	4表示sha1加密

#建立相应用户和修改vsftpd配置文件
[root@ftp ~]# useradd -s /sbin/nologin -d /data/ftproot -r vuser
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
#添加下面两项
guest_enable=YES
guest_username=vuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

#启动vsftpd服务
[root@ftp ~]# systemctl enable --now vsftpd

#在ftp服务器上配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
[root@ftp ~]#vim /etc/vsftpd/vsftpd.conf
#添加如下选项
user_config_dir=/etc/vsftpd/conf.d/

#创建所需要目录,并为虚拟用户提供配置文件
[root@ftp ~]#mkdir /etc/vsftpd/conf.d/
#配置虚拟用户的访问权限
#虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户tan具有上传文件的权限,可修改/etc/vsftpd/conf.d/ftp_tan文件,在里面添加如下选项并设置为YES即可,只读则设为NO
#注意:需确保对应的映射用户对于文件系统有写权限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
#登录目录改变至指定的目录
local_root=/data/ftproot2

[root@ftp ~]# cat /etc/vsftpd/conf.d/ftp_tan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@ftp ~]# cat /etc/vsftpd/conf.d/ftp_liang
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_root=/data/ftproot2

#ftp_tan用户还是访问根目录/data/ftproot,ftp服务放开了上传权限,再在文件系统放开vuser写权限
[root@ftp ~]#chmod 555 /data/ftproot
[root@ftp ~]# mkdir -pv /data/ftproot/upload
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/ftproot’
mkdir: created directory ‘/data/ftproot/upload’
[root@ftp ~]#setfacl -m u:vuser:rwx /data/ftproot/upload
[root@ftp ~]#touch /data/ftproot/f1

#ftp_liang用户访问的ftp根目录该为了/data/ftproot2,需要去掉写权限,否则此用户登录失败
[root@ftp ~]# chmod 555 /data/ftproot2
[root@ftp ~]#touch /data/ftproot2/f2

#测试:使用ftp_tan用户上传文件成功,ftp_liang用户登录看到/data/ftproot2目录下的文件成功
[root@mariadb ~]#ftp 10.0.0.152
Connected to 10.0.0.152 (10.0.0.152).
220 (vsFTPd 3.0.2)
Name (10.0.0.152:root): ftp_tan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,152,184,151).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Nov 18 09:45 f1
drwxrwxr-x    2 0        0               6 Nov 18 09:12 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> send anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (10,0,0,152,41,212).
150 Ok to send data.
226 Transfer complete.
1314 bytes sent in 0.000241 secs (5452.28 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (10,0,0,152,239,137).
150 Here comes the directory listing.
-rw-------    1 998      996          1314 Nov 18 09:54 anaconda-ks.cfg
226 Directory send OK.

[root@mariadb ~]#ftp 10.0.0.152
Connected to 10.0.0.152 (10.0.0.152).
220 (vsFTPd 3.0.2)
Name (10.0.0.152:root): ftp_liang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,152,142,203).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Nov 18 10:16 f2
226 Directory send OK.
ftp>

2、配置samba共享,实现/www目录共享

#服务器端配置:
[root@samba ~]#yum install -y samba
[root@samba ~]#groupadd -r www
[root@samba ~]#useradd -s /sbin/nologin -G www test1
[root@samba ~]#smbpasswd -a test1
New SMB password:
Retype new SMB password:
Added user test1.
[root@samba ~]#useradd -s /sbin/nologin test2
[root@samba ~]#smbpasswd -a test2
New SMB password:
Retype new SMB password:
Added user test2.
[root@samba ~]#mkdir /www
[root@samba ~]#chgrp www /www
[root@samba ~]#chmod 2775 /www
[root@samba ~]#vim /etc/samba/smb.conf
#加上一下这段配置。设置共享目录为/www,设置www组中用户有写权限
[share]
        path = /www
        write list = @www

#启动服务
[root@samba ~]#systemctl enable --now smb nmb

#客户端配置
[root@client ~]# yum install -y cifs-utils
#分别用test1,test2用户进行挂载共享目录
[root@client ~]# mkdir /mnt/test1
[root@client ~]# mkdir /mnt/test2
[root@client ~]# mount -o username=test1 //10.0.0.150/share /mnt/test1
Password for test1@//10.0.0.150/share:  ******
[root@client ~]# mount -o username=test2 //10.0.0.150/share /mnt/test2
Password for test2@//10.0.0.150/share:  ******
[root@client ~]# echo "test1" >> /mnt/test1/test.txt
[root@client ~]# cat /mnt/test1/test.txt
test1
[root@client ~]# touch /mnt/test2/test.txt
touch: cannot touch ‘/mnt/test2/test.txt’: Permission denied
#说明:test1用户在www组,samba服务给了www组写的权限,test2用户不在www组,因此创建文件失败。

#配置自动挂载
[root@client ~]# cat /etc/smb.txt
username=test1
password=123456
[root@client ~]# chmod 600 /etc/smb.txt
[root@client ~]# echo "//10.0.0.150/share  /mnt/test1 cifs  credentials=/etc/smb.txt 0 0" >> /etc/fstab
#自动挂载测试ok
[root@client ~]# mount -a
[root@client ~]# ll /mnt/test1
total 4
-rwxr-xr-x 1 root root 6 Nov 18 18:40 test.txt

[root@client ~]# yum install -y samba-client
[root@client ~]# smbclient  //10.0.0.150/share -U test1%123456
Try "help" to get a list of possible commands.
smb: \> ls
  .                                   D        0  Thu Nov 18 18:40:54 2021
  ..                                  D        0  Thu Nov 18 18:29:35 2021
  test.txt                            A        6  Thu Nov 18 18:40:54 2021

                104806400 blocks of size 1024. 98400288 blocks available
smb: \>

3、使用rsync+inotify实现/www目录实时同步

#rsync 常用于做为 linux系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他SSH、rsync主机同步数据,支持增量备份,配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时数据同步
官方网站: http://rsync.samba.org/
软件包:rsync,rsync-daemon(CentOS 8)
服务文件:/usr/lib/systemd/system/rsyncd.service
配置文件:/etc/rsyncd.conf
端口:873/tcp

backup服务器 10.0.0.8
client服务器 10.0.0.18

[root@backup ~]#dnf -y install rsync-daemon
[root@backup ~]#vim /etc/rsyncd.conf
uid = root
gid = root
#port = 874
#use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
pid file = /var/run/rsyncd.pid
log file = /var/run/rsyncd.log
lock file = /var/run/rsyncd.lock
reverse lookup = no
#hosts allow = 10.0.0.0/24
[bkup]   #每个模块名对应一个不同的path目录,如果同名后面模块生效
path = /data/bkup/
comment = backup dir
read only = no #默认为yes,即只读
auth users = rsyncuser #默认anonymous可以访问rsync服务器
secrets file = /etc/rsync.pas

[root@backup ~]#mkdir /data/bkup -p
[root@backup ~]#echo "rsyncuser:123456" > /etc/rsync.pas
[root@backup ~]#chmod 600 /etc/rsync.pas
[root@backup ~]#systemctl start rsyncd


#客户端配置
[root@client ~]# yum install -y inotify-tools
[root@client ~]# yum install rsync -y
[root@client ~]# echo "123456" >/etc/rsync.pas
[root@client ~]# chmod 600 /etc/rsync.pas
[root@client ~]# rsync --password-file=/etc/rsync.pas  rsyncuser@10.0.0.150::
bkup            backup dir
[root@client ~]# rsync --password-file=/etc/rsync.pas  rsyncuser@10.0.0.150::bkup
drwxr-xr-x              6 2021/11/18 21:13:32 .

#同步测试
#推数据
[root@client ~]# mkdir /data/www
[root@client ~]# echo test2 >/data/www/dd.txt
[root@client ~]# rsync --password-file=/etc/rsync.pas  rsyncuser@10.0.0.8::bkup
drwxr-xr-x             23 2021/12/18 21:46:28 .
-rw-r--r--              5 2021/12/18 21:46:28 index.txt
[root@client ~]# rsync -avz --delete  --password-file=/etc/rsync.pas   /data/www/ rsyncuser@10.0.0.8::bkup
sending incremental file list
deleting index.txt
./
dd.txt

sent 118 bytes  received 51 bytes  338.00 bytes/sec
total size is 6  speedup is 0.04
#拉数据
[root@backup ~]#echo test > /data/bkup/index.txt
[root@backup ~]#cat /data/bkup/index.txt
test
[root@client ~]# rsync -avz --delete  --password-file=/etc/rsync.pas    rsyncuser@10.0.0.150::bkup /data/www/
receiving incremental file list
./
index.txt

sent 46 bytes  received 141 bytes  374.00 bytes/sec
total size is 11  speedup is 0.06
[root@client ~]# ll /data/www
total 8
-rw-r--r-- 1 root root 6 Dec 18 21:47 dd.txt
-rw-r--r-- 1 root root 5 Dec 18 21:50 index.txt

#在数据服务器上创建inotify_rsync.sh脚本
说明:此脚本执行前先确保两主机初始数据处于同步状态,此脚本实现后续的数据同步
[root@client ~]# vim inotify_rsync.sh
f#!/bin/bash
SRC='/data/www/'
DEST='rsyncuser@10.0.0.8::backup'
rpm -q rsync &> /dev/null || yum -y install rsync
inotifywait  -mrq  --exclude=".*\.swp" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATETIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete  --password-file=/etc/rsync.pas $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

[root@client ~]# bash inotify_rsync.sh
[root@client www]# touch 11
[root@backup bkup]#ll
total 8
-rw-r--r-- 1 root root 0 Dec 18 22:06 11
-rw-r--r-- 1 root root 6 Dec 18 21:47 dd.txt
-rw-r--r-- 1 root root 5 Dec 18 21:50 index.txt
[root@client ~]# tail -f /var/log/changelist.log
At  on , file 22:06:32/data/www/ 11 was backuped up via rsync
At  on , file 22:06:32/data/www/ 11 was backuped up via rsync
At  on , file 22:06:32/data/www/ 11 was backuped up via rsync
#在客户端/data/www目录下创建文件11,在backup服务器上查看同步成功

4、LVS调度算法总结

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态,分为两种:静态方法和动态方法
静态方法:
仅根据算法本身进行调度
1、RR:roundrobin,轮询。较常用
2、WRR:Weighted RR,加权轮询。较常用
3、SH:Source Hashing,实现session sticky,源IP地址hash。将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
4、DH:Destination Hashing,目标地址哈希。第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存
动态方法
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
活动连接:连接上并在传输数据,活动链接压力等于非活动链接的256倍
非活动链接:连接上但没有传输数据
1、LC:least connections最少连接。将新的连接请求,分配给连接数最少的服务器,适用于长连接应用
Overhead=activeconns*256+inactiveconns
如:服务器 RS1 RS2
活动/非活动连接数
RS1:10/100
RS2: 20/0
压力值 :
RS1: 10x256+100 = 2660
RS2: 20*256+ 0 = 5120
RS1服务器压力值更小,更应该被分配新的访问请求。
2、WLC:Weighted LC,加权最少连接。默认调度方法,较常用
Overhead=(activeconns*256+inactiveconns)/weight
特殊的最少连接算法,权重越大承担的请求数越多
3、SED:Shortest Expection Delay,最短期望延迟。初始连接高权重优先,只检查活动连接,而不考虑非活动连接
Overhead=(activeconns+1)*256/weight
特殊的WLC算法,为了解决连接数(访问)是0的情况,来确定分给哪台服务器
4、NQ:Never Queue,永不排队。特殊的SED算法,无需等待,如果有真实服务器的连接数等于0那就直接分配不需要运算,第一轮均匀分配,后续SED
5、LBLC:Locality-Based LC,动态的DH算法。使用场景:根据负载状态实现正向代理,实现Web Cache等
6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等

内核版本 4.15 版本后新增调度算法:FO和OVF
1、FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
2、OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器,属于动态算法

一个可用的真实服务器需要同时满足以下条件:
未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
真实服务器当前的活动连接数量小于其权重值
其权重值不为零

5、LVS的跨网络DR实现

#环境准备:
5台主机
客户端client       vmnet1仅主机网络 eth0:192.169.33.160/24 GW:192.168.33.200
路由器router        vmnet1仅主机网络 eth1:192.169.33.200/24
					vmnet8 NAT网络 eth0: 10.0.0.200/24  eth0:1: 192.168.0.200/24
负载调度器LVS      vip:lo 192.168.0.100/32  
		     DIP:eth0 NAT 10.0.0.150/24 GW:10.0.0.200
后端web服务器RS1   vip:lo 192.168.0.100/32  
		     DIP:eth0 NAT 10.0.0.160/24 GW:10.0.0.200
后端web服务器RS2   vip:lo 192.168.0.100/32  
		     DIP:eth0 NAT 10.0.0.170/24 GW:10.0.0.200

#client:
[root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=192.168.33.160
PREFIX=24
GATEWAY=192.168.33.200

[root@client ~]# systemctl restart network

#router:
[root@router ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=eth0
DEVICE=eth0
ONBOOT=yes
IPADDR=10.0.0.200
PREFIX=24

[root@router ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
NAME=eth1
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.33.200
PREFIX=24

[root@router ~]# systemctl restart network
#添加临时eth0网卡子接口eth0:1配置ip地址。
[root@router ~]# ip a add 192.168.0.200/24 dev eth0
#测试仅主机网络,和客户端正常通信
[root@router ~]# ping 192.168.33.160
PING 192.168.33.160 (192.168.33.160) 56(84) bytes of data.
64 bytes from 192.168.33.160: icmp_seq=1 ttl=64 time=0.490 ms
64 bytes from 192.168.33.160: icmp_seq=2 ttl=64 time=0.859 ms

#配置开启路由转发功能
[root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@router ~]# cat /proc/sys/net/ipv4/ip_forward
1

#LVS:
#网络配置
[root@lvs ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
IPADDR=10.0.0.150
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes
[root@lvs ~]#nmcli c reload
[root@lvs ~]#nmcli c up eth0
[root@lvs ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.200      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
[root@lvs ~]#ping 192.168.33.160
PING 192.168.33.160 (192.168.33.160) 56(84) bytes of data.
64 bytes from 192.168.33.160: icmp_seq=1 ttl=63 time=0.919 ms
64 bytes from 192.168.33.160: icmp_seq=2 ttl=63 time=4.51 ms

#配置vip
[root@lvs ~]#ifconfig  lo:1 192.168.0.100 netmask 255.255.255.255

#RS1:
#网络配置
[root@RS1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
IPADDR=10.0.0.160
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes
[root@RS1 ~]#nmcli c reload
[root@RS1 ~]#nmcli c up eth0
[root@RS1 ~]#route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.200      0.0.0.0         UG    100    0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0

#web服务配置
[root@RS1 ~]#yum install -y httpd
[root@RS1 ~]#echo 10.0.0.160 >> /var/www/html/index.html
[root@RS1 ~]#systemctl restart httpd
[root@RS1 ~]#curl localhost
10.0.0.160

#IPVS配置
[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#配置vip
[root@RS1 ~]#ifconfig  lo:1 192.168.0.100 netmask 255.255.255.255

#RS2:
#网络配置
[root@RS2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=static
NAME=eth0
DEVICE=eth0
IPADDR=10.0.0.170
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes
[root@RS2 ~]#nmcli c reload
[root@RS2 ~]#nmcli c up eth0

#web服务配置
[root@RS2 ~]#yum install -y httpd
[root@RS2 ~]#echo 10.0.0.170 >> /var/www/html/index.html
[root@RS2 ~]#systemctl restart httpd
[root@RS2 ~]#curl localhost
10.0.0.170

#IPVS配置
[root@RS2 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@RS2 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@RS2 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@RS2 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#配置vip
[root@RS2 ~]#ifconfig  lo:1 192.168.0.100 netmask 255.255.255.255

#LVS集群配置:
[root@lvs ~]#yum install -y ipvsadm-1.31-1.el8.x86_64.rpm
[root@lvs ~]#ipvsadm  -A -t 192.168.0.100:80 -s wrr
[root@lvs ~]#ipvsadm  -a -t 192.168.0.100:80 -r 10.0.0.160 -g -w 1
[root@lvs ~]#ipvsadm  -a -t 192.168.0.100:80 -r 10.0.0.170 -g -w 1

#测试client:
[root@client ~]# curl 192.168.0.100
10.0.0.170
[root@client ~]# curl 192.168.0.100
10.0.0.160
[root@client ~]# curl 192.168.0.100
10.0.0.170
[root@client ~]# curl 192.168.0.100
10.0.0.160
上一篇:centos7上搭建ftp服务器


下一篇:Silverlight“.NET技术” 2.5D RPG游戏技巧与特效处理:(十)空间分层战斗系统