第十五周--作业

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

  

posted @   এ蓝桉、  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示