第十五周--作业
1、实现基于MySQL验证的vsftpd虚拟用户访问
安装vsftpd服务
ftp-server服务器安装vsftpd服务,并开启服务 yum -y install vsftpd systemctl enabled --now vsftpd 源码编译安装pam_mysql 官网下载源码包 http: //pam-mysql.sourceforge.net 下载依赖环境 yum -y install gcc gcc-c++ make mariadb-devel pam-devel 解压并安装 tar xvf pam_mysql-0.7RC1.tar.gz -C /usr/local/src cd /usr/local/src/pam_mysql-0.7RC1/ ./configure --with-pam-mods-dir=/lib64/security make install 建立pam认证所需文件 vim /etc/pam.d/vsftpd.mysql auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.8 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.8 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 创建相应用户并修改vsftpd配置文件 useradd -s /sbin/nologin -d /data/ftproot -r vuser mkdir -pv /data/ftproot/upload setfacl -m u:vuser:rwx /data/ftproot/upload/ vim /etc/vsftpd/vsftpd.conf pam_service_name=vsftpd.mysql 安装mariadb数据库 yum -y install mariadb-server systemctl enable --now mariadb-server 配置数据库支持vsftpd服务 创建vsftpd专用数据库、表和FTP登陆账号 |

2、配置samba共享,实现/www目录共享
samba服务器端
安装samba<br>yum -y install samba<br>systemctl enable --now smb<br><br>创建登陆账号<br>useradd -s /sbin/nologin test1<br>useradd -s /sbin/nologin test2<br>smbpasswd -a test1<br>smbpasswd -a test2<br>pdbedit -L<br><br>修改samba共享配置文件<br>rpm -qc samba-common<br>mkdir /www<br>touch /www/test1.txt<br>vim /etc/samba/smb.conf<br>[share]<br>path=/www |
samba客服端
下载samba-client<br>yum -y install samba-client<br><br>测试<br>smbclient -L 10.0.0.7 -U test1%123456<br>smbclient //10.0.0.7/share -U test1%123456 |

3、使用rsync+inotify实现/www目录实时同步
安装inotify-tools
yum -y install inotify-tools |
创建/www目录
mkdir /www touch /www/{a..d}.txt mkdir /www/test touch /www/test/{a..d}.txt |
在主备两台机器上分别下载rsync
yum -y install rsync<br>#启动服务前需创建rsyncd.conf<br>touch /etc/rsyncd.conf<br>rsync --daemon |
在备服务器上修改文件属性
mkdir /data/backup vim /etc/rsyncd.conf cat /etc/rsyncd.conf [backup] path = /data/backup/ read only = no setfacl -m u:nobody:rwx /data/backup/<br>#重启服务<br>rsync --daemon |
创建脚本实现对指定文件的实时同步
vim inotify_rsync.sh SRC= '/www/' DEST= 'rsyncuser@10.0.0.18::backup' inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e attrib,create,moved_to,close_write ${SRC} | while read DATE TIME 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<br>chmod +x inotify_rsync.sh<br>bash inotify_rsync.sh |
4、LVS调度算法总结
静态算法
静态算法是仅根据算法自身来进行调度,不考虑真实服务器的负载,主要有四种具体的调度算法: 1、RR调度算法 RR(roundrobin,轮询调度算法)调度算法指的是LVS服务器在某一个时间段内接收到一定数量的同类型用户请求后,会将所有的同类型用户请求按序转发给提供该服务的真实服务器,在一定程度上可以视为公平调度。 2、 WRR调度算法 由于轮询调度算法并未考虑不同真实服务器的负载能力,可能会给负载能力较弱的真实服务器造成压力,在此基础上产生了WRR(Weighted RR,加权轮询调度算法)调度算法。 3、SH调度算法 SH(Source Hashing,源地址哈希调度算法)调度算法的功能是实现会话绑定,将来自同一个ip的用户请求始终转发给第一次处理来自该ip请求的真实服务器。不过此种调度算法弊端也比较明显,例如处理来自该ip用户请求的真 4、DH(Destination Hashing)调度算法 DH(Destination Hashing,目标地址哈希调度算法)调度算法是指LVS服务器第一次接收到某一类的用户请求时,会转发至后端处理该类请求的服务器,后续如果再有同类的用户请求将始终转发至第一次挑中的真实服务器,典型使用场景是正向代理缓存场景中的负载均衡,如 web缓存。 |
动态算法
使用动态算法时会考虑到真实服务器的负载能力,并生成一个Overhead值,真实服务器的Overhead值越小,说明服务器越空闲、负载越轻,接收到LVS服务器转发用户请求的优先度越高。动态算法主要有6中具体的调度算法: 1、LC调度算法 LC(least connections,最少连接调度算法)调度算法适用于长连接应用,LVS服务器通过真实服务器当前活跃的连接数来估计负载状态,把最新的连接请求分配给当前连接数最少的真实服务器。LVS服务器会记录每个真实服务器已建立连接的数量,当一个用户请求被转发至某一台真实服务器时,其连接数加1,当连接中断或超时时,其连接数会减1。 2、WLC调度算法 WLC(Weighted LC,加权最少连接调度算法)调度算法是默认调度算法,在最少连接调度算法的基础上加入了权重。使用此种调度算法时,不同负载性能的真实服务器会被赋予不同的权重,性能越好,被赋予的权重也就越大,所得到的Overhead值也就越小,在LVS服务器转发请求时将被优先分配。 3、SED调度算法 SED(Shortest Expection Delay,最短延迟调度算法)调度算法是对加权最少连接调度算法的改进,该算法只检查活动连接,而不考虑非活动连接,初始连接高权重优先。但此种算法的一个弊端是,如果某一台真实服务器的初始连接权重很高,可能会被分配大量的用户请求,而其他真实服务器一直处于空闲状态。 4、NQ调度算法 NQ(Never Queue,无需队列调度算法)调度算法会在第一轮采用轮询调度算法,LVS服务器给所有符合条件的真实服务器都分配一个用户请求,从第二轮开始将采用最短延迟调度算法。 5、LBLC调度算法 LBLC(Locality-Based LC,基于局部的最少连接调度算法)调度算法属于动态的目标地址哈希调度算法,根据负载状态实现正向代理。LVS服务器会根据用户的ip和请求内容找到最近访问过的真实服务器,如果该真实服务器处于可用状态且无超载现象,则将用户请求再次转发到该真实服务器;如果该真实服务器暂时无法处理用户请求,则使用最少连接调度算法转发给一个能满足用户请求的真实服务器。 6、LBLCR调度算法 LBLCR(LBLC with Replication,带复制的基于局部最少连接调度算法)调度算法是在LBLC调度算法的基础上加入了复制功能,从而解决LBLC负载不均衡问题,将web缓存等从负载重的真实服务器复制到负载轻的真实服务器上。 |
FO调度算法和OVF调度算法
FO调度算法和OVF调度算法是内核版本4.15后新增调度算法。 1、FO调度算法 FO(Weighted Fail Over)调度算法属于静态算法,在FO调度算法中,LVS服务器会遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器服务器来进行调度。 2、OVF调度算法 OVF(Overflow-connection)调度算法属于动态算法,基于真实服务器的活动连接数量和权重值实现,LVS服务器将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器。 |
5、LVS的跨网路DR实现
配置网络环境
#客户机网卡配置配置 [root@localhost ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 ONBOOT=yes BOOTPROTO= static IPADDR=192.168.10.6 PREFIX=24 GATEWAY=192.168.10.200 #路由器配置 [root@localhost ~]#ip addr add 172.16.0.0/24 dev eth0 #配为100会与rs服务器ip冲突导致通讯失败 [root@localhost ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO= static IPADDR=10.0.0.200 PREFIX=24 ONBOOT=yes [root@localhost ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 NAME=eth1 BOOTPROTO= static IPADDR=192.168.10.200 PREFIX=24 ONBOOT=yes #LVS服务器网卡配置 #启用ip_forward [root@localhost ~]#vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #使配置文件生效 [root@localhost ~]#sysctl -p net.ipv4.ip_forward = 1 [root@localhost ~]#ip addr add 172.16.0.100/32 dev lo [root@localhost ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 BOOTPROTO= static IPADDR=10.0.0.8 PREFIX=24 GATEWAY=10.0.0.200 ONBOOT=yes #服务器rs1网卡配置 [root@localhost ~]#ip addr add 172.16.0.100/32 dev lo [root@localhost ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 ONBOOT=yes BOOTPROTO= static IPADDR=10.0.0.7 PREFIX=24 GATEWAY=10.0.0.200 #修改内核参数 [root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce #rs2网卡配置 [root@localhost ~]#ip addr add 172.16.0.100/32 dev lo [root@localhost ~]#cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 NAME=eth0 ONBOOT=yes BOOTPROTO= static IPADDR=10.0.0.17 PREFIX=24 GATEWAY=10.0.0.200 #修改内核参数 [root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore [root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce [root@localhost ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore [root@localhost ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce |
添加LVS规则
[root@localhost ~]#ipvsadm -A -t 10.0.0.100:80 -s wrr [root@localhost ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7 -g -w 1 [root@localhost ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17 -g -w 1 [root@localhost ~]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 wrr -> 10.0.0.7:80 Route 1 0 0 -> 10.0.0.17:80 Route 1 0 0 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通