第十五周 网络文件共享服务、企业级调度器lvs

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

1.png

本实验在两台主机上实现
一台做为FTP服务器CentOS 7
一台做 MySQL(不要使用8.0) 或 Mariadb 数据库服务器

  1. 在数据库服务器上安装mysql数据库
#注意:MySQL8.0由于取消了PASSWORD( )函数不支持,因此选择Mariadb
[root@centos8 ~]#yum -y install mariadb-server
[root@centos8 ~]#systemctl enable --now mariadb
  1. 在数据库服务器上配置数据库支持vsftpd服务
#建立存储虚拟用户数据库和表
[root@centos8 ~]#mysql
MariaDB [(none)]> CREATE DATABASE vsftpd;
MariaDB [(none)]> USE vsftpd;
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
);

#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
MariaDB [vsftpd]> insert users (name,password) values('alice',password('123456'));
MariaDB [vsftpd]> insert users (name,password) values('bob',password('654321'));

#创建连接的数据库用户
MariaDB [vsftpd]> grant select on vsftpd.* to [vsftpd@'10.0.0.%](mailto:vsftpd@'10.0.0.%25)' identified by '123456';
  1. 在FTP服务器上安装vsftpd
[root@centos7 ~]#yum -y install vsftpd
  1. 在FTP服务器上安装pam_mysql
    对于centos6:pam_mysql由EPEL的源中提供
[root@centos6 ~]#yum install pam_mysql

对于centos7:无对应rpm包,需手动编译安装
注意:当前版本的源码不支持CentOS8
pam-mysql源码进行编译

#安装相关包
[root@centos7 ~]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
#下载pam-mysql源码进行编译
[root@centos7 ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
#https://github.com/NigelCunningham/pam-MySQL/archive/v0.8.1.tar.gz
[root@centos7 ~]#tar xvf pam_mysql-0.7RC1.tar.gz
[root@centos7 ~]#cd pam_mysql-0.7RC1/
[root@centos7 pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security

#如果上面命令不指定 --with-pam-mods-dir=/lib64/security 会报以下错误
#checking if the second argument of pam_conv.conv() takes const pointer… no
configure:error:Your system doesn’t appear to be configured to use PAM. Perhaps you need to specify the correct location where the PAM modules reside.

[root@centos7 pam_mysql-0.7RC1]#make install
[root@centos7 pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root    882 Dec 17 14:34 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Dec 17 14:34 /lib64/security/pam_mysql.so
  1. 在FTP服务器上建立pam认证所需文件
[root@centos7 ~]#vi /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

注意:以上参考README文档

  1. 建立相应用户和修改vsftpd配置文件
#建立虚拟用户映射的系统用户及对应的目录
[root@centos7 ~]#useradd -s /sbin/nologin -d /data/ftproot -r vuser
#centos7 需除去ftp根目录的写权限

[root@centos7 ~]#mkdir -pv /data/ftproot/upload
[root@centos7 ~]#setfacl -m u:vuser:rwx /data/ftproot/upload

#确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf
#添加下面两项
guest_enable=YES
guest_username=vuser

#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

启动vsftpd服务
[root@centos7 ~]#systemctl enable --now vsftpd
  1. 在FTP服务器上配置虚拟用户具有不同的访问权限
    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可
#配置vsftpd为虚拟用户使用配置文件目录
[root@centos7 ~]#vim /etc/vsftpd/vsftpd.conf

#添加如下选项
user_config_dir=/etc/vsftpd/conf.d/

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

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

一、samba服务器

1、安装samba包

# yum -y install samba

2、创建用户组

# groupadd -r admins
# useradd -s /sbin/nologin -G admins smb1
# useradd -s /sbin/nologin -G admins smb2
# id smb1 && id smb2
uid=1005(smb1) gid=1005(smb1) groups=1005(smb1),994(admins)
uid=1003(smb2) gid=1003(smb2) groups=1003(smb2),994(admins)

3、创建samba用户

# smbpasswd -a smb1
New SMB password:  #123456
Retype new SMB password:
Added user smb1.

# smbpasswd -a smb2
New SMB password:  #654321
Retype new SMB password:
Added user smb2.

# pdbedit -L  # 查看用户列表
smb1:1005:
smb2:1003:

4、创建samba共享目录

# mkdir /www
# chgrp admins /www
# chmod 2775 /www

5、添加配置文件

# vi /etc/samba/smb.conf
#在最下面添加即可
[share]
#配置默认所有用户只可读
path = /www    
write list = @admins  #组admins列表用户不但可读,还可写

6、启动samba服务

# systemctl enable --now smb nmb

二、客户端
1、安装客户端连接工具

#yum -y install cifs-utils

2、客户端挂载CIFS文件系统

# mkdir /mnt/smb{1,2} -pv 
mkdir: created directory '/mnt/smb1'
mkdir: created directory '/mnt/smb2'

# mount -o username=smb1 //10.0.0.7/share  /mnt/smb1
Password for smb1@//10.0.0.7/share:  ******
# mount -o username=smb2 //10.0.0.7/share  /mnt/smb2
Password for smb2@//10.0.0.7/share:  ******

# df -h
tmpfs                376M     0  376M   0% /run/user/0
//10.0.0.7/share      50G  1.7G   49G   4% /mnt/smb1
//10.0.0.7/share      50G  1.7G   49G   4% /mnt/smb2

三、测试

#可写测试
# touch /mnt/smb1/smb1file.txt 
# touch /mnt/smb2/smb2file.txt
# echo "hello smb1" > /mnt/smb1/smb1file.txt 
# echo "hello smb2" > /mnt/smb2/smb2file.txt 

# 可读测试
# cat /mnt/smb1/smb1file.txt 
hello smb1
# cat /mnt/smb2/smb2file.txt 
hello smb2

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

图片1.png
  1. 在10.0.0.18上搭建备份服务器
[root@centos8 ~]#hostnamectl set-hostname backup.magedu.org
[root@backup ~]#dnf -y install rsync-daemon

#创建rsync服务器的配置文件
[root@backup ~]#vim /etc/rsyncd.conf
uid = root   #指定以哪个用户来访问共享目录,将之指定为生成的文件所有者,默认为nobody
gid = root   #默认为nobody
#port = 874   可指定非标准端口,默认873/tcp
#use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
#hosts allow = 10.0.0.0/24
[backup]   #每个模块名对应一个不同的path目录,如果同名后面模块生效
path = /data/backup/
comment = backup dir
read only = no   #默认是yes,即只读
auth users = rsyncuser   #默认anonymous可以访问rsync服务器
secrets file = /etc/rsync.pas

#服务器端准备目录
[root@backup ~]#mkdir -pv /data/backup

#服务器端生成验证文件
[root@backup ~]#echo "rsyncuser:magedu" > /etc/rsync.pas
[root@backup ~]#chmod 600 /etc/rsync.pas

#服务器端启动rsync服务
[root@backup ~]#systemctl enable --now rsyncd
  1. 在数据服务器(10.0.0.8)上,创建inotify_rsync.sh脚本
    注意:此脚本执行前先确保两主机初始数据处于同步状态,此脚本实现后续的数据同步
#客户端配置密码文件
[root@data ~]#echo "magedu" > /etc/rsync.pas
[root@data ~]#chmod 600 /etc/rsync.pas

#创建inotify_rsync.sh脚本
[root@data ~]#vim inotify_rsync.sh
#!/bin/bash
SRC='/data/www/'     #注意最后的/
DEST='rsyncuser@10.0.0.18::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 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

#查看文件传输日志
[root@data ~]#tail -f /var/log/changelist.log


4、LVS调度算法总结

ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法和动态方法
1 静态方法
仅根据算法本身进行调度

  1. RR:roundrobin,轮询,较常用
  2. WRR:Weighted RR,加权轮询,较常用
  3. SH:Source Hashing,实现session sticky,源IP地址hash,将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
  4. DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:Web缓存

2 动态方法
主要根据每RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度

  1. LC:least connections适用于长连接应用
    Overhead=activeconns*256+inactiveconns
  2. WLC:Weight LC,默认调度方法,较常用
    Overhead=(activeconns*256+inactiveconns)/weight
  3. SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
    Overhead=(activeconns+1)*256/weight
  4. NQ:Never Queue,第一轮均匀分配,后续SED
  5. LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
  6. LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等

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

5、LVS的跨网络DR实现

环境:

五台主机
一台:客户端 eth0:仅主机 192.168.10.6/24 GW:192.168.10.200

一台:ROUTER
eth0:NAT 10.0.0.200/24
eth1:仅主机 192.168.10.200/24
启用 IP_FORWARD

一台:LVS
eth0:NAT:10.0.0.8/24 GW:10.0.0.200

两台RS:
RS1:eth0:NAT:10.0.0.7/24 GW:10.0.0.200
RS1:eth0:NAT:10.0.0.17/24 GW:10.0.0.200

1. LVS的网络配置

#所有主机禁用iptables和SELinux

#internet主机环境
[root@ubuntu1804 ~]#vi /etc/netplan/01-netcfg.yaml
address:
- 192.168.10.6/24
gateway4:192.168.10.200
[root@ubuntu1804 ~]#netplan apply    #生效

##路由器的网络配置
[root@router ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.200
PREFIX=24
ONBOOT=yes

#添加网卡eth1(虚拟机右击设置 --- 添加 --- 网络适配器 --- 仅主机 )
[root@router ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=eth1
BOOTPROTO=static
IPADDR=192.168.10.200
PREFIX=24
ONBOOT=yes

#打开路由器的转发功能
[root@router ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@router ~]#sysctl -p #生效

#RS1的网络配置
[root@rs1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.7
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes

[root@rs1 ~]#yum -y install httpd
[root@rs1 ~]#systemctl enable --now httpd
[root@rs1 ~]#hostname -I > /var/www/html/index.html
[root@rs1 ~]#vim /var/www/html/index.html
rs1  10.0.0.7

#RS2的网络配置
[root@rs2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=10.0.0.17
PREFIX=24
GATEWAY=10.0.0.200
ONBOOT=yes

[root@rs2 ~]#yum -y install httpd
[root@rs2 ~]#systemctl enable --now httpd
[root@rs2 ~]#hostname -I > /var/www/html/index.html
[root@rs2 ~]#vim /var/www/html/index.html
rs2  10.0.0.17

#LVS的网络配置
[root@lvs ~]#vi /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

2. 后端RS的IPVS配置

#RS1的IPVS配置
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs1 ~]#ifconfig lo:1 10.0.0.100/32

#RS2的IPVS配置
[root@rs2 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@rs2 ~]#ifconfig lo:1 10.0.0.100/32

3. LVS主机的配置

#在LVS上添加VIP
[root@lvs ~]#ifconfig lo:1 10.0.0.100/32

#实现LVS规则
[root@lvs ~]#dnf -y install ipvsadm
[root@lvs ~]#ipvsadm -A -t 10.0.0.100:80 -s rr
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.7 -g
[root@lvs ~]#ipvsadm -a -t 10.0.0.100:80 -r 10.0.0.17 -g

4. 测试访问

[root@ubuntu1804 ~]#while :;do curl 10.0.0.100;sleep 1;done
rs1 10.0.0.7
rs2 10.0.0.17
rs1 10.0.0.7
rs2 10.0.0.17
rs1 10.0.0.7
rs2 10.0.0.17
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容