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

主机:两台,一台为FTP服务器,一台为MySQL服务器

1.配置MySQL服务,并创建相应库与表,并创建授权用户

[root@mysql ~]# yum install -y mariadb-server  #安装数据库服务

[root@mysql ~]# systemctl start mariadb

[root@mysql ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
......

MariaDB [(none)]> create database vsftpd;  #创建库
Query OK, 1 row affected (0.00 sec)

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);
Query OK, 0 rows affected (0.02 sec)

MariaDB [vsftpd]> insert into users (name,password) value('ftpuser1',password('centos'));  #添加FTP用户
Query OK, 1 row affected (0.00 sec)

MariaDB [vsftpd]> insert into users (name,password) value('ftpuser2',password('linux'));  #添加FTP用户
Query OK, 1 row affected (0.01 sec)

MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'192.168.25.%' identified by 'centos';  #创建授权用户
Query OK, 0 rows affected (0.00 sec)

2.在FTP服务器上安装FTP服务,并编译安装pam_mysql模块

[root@ftpserver ~]# yum install -y vsftpd #安装FTP服务

[root@ftpserver ~]# ll pam_mysql-0.7RC1.tar.gz #准备pam_mysql安装包

[root@ftpserver ~]# tar -xf pam_mysql-0.7RC1.tar.gz

[root@ftpserver ~]# cd pam_mysql-0.7RC1/

[root@ftpserver ~]# yum install -y gcc gcc-c++ pam-devel mariadb-devel #先安装相关依赖包

[root@ftpserver pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security/ #编译安装pam_mysql模块

[root@ftpserver pam_mysql-0.7RC1]# make && make install

3.创建pam认证文件

[root@ftpserver ~]# vim /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpd passwd=centos host=192.168.25.31 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=centos host=192.168.25.31 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

4.创建FTP虚拟用户与共享目录,并修改 /etc/vsftpd/vsftpd.conf

[root@ftpserver ~]# useradd -d /data/ftproot -s /sbin/nologin vuser #创建虚拟用户

[root@ftpserver ~]# chmod 555 /data/ftproot #设置FTP目录权限

[root@ftpserver ~]# mkdir /data/ftproot/upload #创建FTP上传目录

[root@ftpserver ~]# setfacl -m u:vuser:rwx /data/ftproot/upload #设置上传目录权限

[root@ftpserver ~]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd.mysql #修改此项

添加以下三项

guest_enable=YES

guest_username=vuser

user_config_dir=/etc/vsftpd/vusers.d/ #独立用户配置目录

5.启动FTP服务,用数据库中的用户测试

[root@ftpserver ftproot]# systemctl start vsftpd

二、通过NFS实现服务器/www共享访问

主机:两台,一台为NFS服务器,一台为客户端

1.配置NFS服务器

[root@NFSserver ~]# mkdir /www #新建挂载目录

[root@NFSserver ~]# vim /etc/exports
/www 192.168.25.0/24(rw,root_squash) #配置挂载目录

[root@NFSserver ~]# systemctl start nfs-server #启动NFS服务

[root@NFSserver ~]# exportfs -v #查看本机的NFS共享
/www 192.168.25.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)

[root@NFSserver ~]# touch /www/f1.txt  #创建一个文件

2.客户端挂载NFS目录

[root@Client ~]# showmount -e 192.168.25.25 #查看主机的共享信息
Export list for 192.168.25.25:
/www 192.168.25.0/24

开始手动挂载

[root@Client ~]# mount -o rw,nosuid,fg,hard,intr 192.168.25.25:/www /data/

[root@Client ~]# cd /data

[root@Client data]# ls -l  #可以挂载中的文件

如要实现开机挂载

则在 /etc/fstab 文件中添加一行
192.168.25.25:/www /data nfs defaults 0 0

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

主机:一台服务器端(192.168.25.25),一台客户端(192.168.25.35)

软件:samba (服务器端),cifs-utils (客户端),光盘yum源

1.服务器端安装安装samba包

[root@server ~]# yum install -y samba

2.创建samba用户和组,并创建samba共享目录

[root@server ~]# groupadd -r smbgroup #新建smbgroup组

[root@server ~]# useradd -s /sbin/nologin -G smbgroup smbuser1 #新建smbuser1用户,并加入smbgroup组中

[root@server ~]# id smbuser1
uid=1001(smbuser1) gid=1001(smbuser1) groups=1001(smbuser1),981(smbgroup)

[root@server ~]# smbpasswd -a smbuser1 #添加samba用户
New SMB password: #密码 12345
Retype new SMB password:
Added user smbuser1.

[root@server ~]# useradd -s /sbin/nologin smbuser2

[root@server ~]# smbpasswd -a smbuser2
New SMB password: #密码 54321
Retype new SMB password:
Added user smbuser2.

[root@server ~]# mkdir /www #新建共享目录

[root@server ~]# chgrp smbgroup /www #修改目录所属组

[root@server ~]# chmod 2775 /www

[root@server ~]# ls -ld /www

3.修改samba配置文件 /etc/samba/smb.conf

[root@server ~]# vim /etc/samba/smb.conf#在结尾处添加以下自定义设置

[smbshare]
path = /www
writeable = no
write list = @smbgroup
writeable = no时只有smbgroup组的用户才有写权限

4.启动samba服务

[root@server ~]# systemctl start smb nmb

5.客户端安装cifs-utils包,并挂载

[root@client ~]# yum install -y cifs-utils

[root@client ~]# mkdir /data/smbuser1 #创建挂载目录

[root@client ~]# mkdir /data/smbuser2 #创建挂载目录

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

主机:一台服务器端(192.168.25.25),一台客户端(192.168.25.35)

1.服务器端安装inotify-tools软件包(epel源)和 rsync包(光盘yum源)

[root@server ~]# yum install -y inotify-tools rsync

2.服务器端生成验证文件

[root@server ~]# echo "rsyncuser:centos" > /etc/rsync.pass

[root@server ~]# chmod 600 /etc/rsync.pass

3.服务器端准备要备份的目录

[root@server ~]# mkdir /data

4.服务器端修改rsync的配置文件

[root@server ~]# vim /etc/rsyncd.conf
uid = root
gid = root
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 = 192.168.25.0/24

[backup]
path = /data/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

5.服务器端启动rsync服务

[root@server ~]# systemctl start rsyncd

6.客户端配置密码文件

[root@client ~]# echo "12345" > /etc/rsync.pass

[root@client ~]# chmod 600 /etc/rsync.pass

7.客户端测试同步数据rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@rsync服务器IP::/data

[root@client ~]# cd /data

[root@client data]# touch f1.txt #在客户端目录新建一个文件

[root@client data]# ll

[root@server ~]# ll /data/ #此时服务器端备份目录还没有文件
total 0

[root@client data]# rsync -avz --password-file=/etc/rsync.pass /data/ rsyncuser@192.168.25.25::backup #使用rsync进行同步
sending incremental file list
./
f1.txt

sent 104 bytes received 38 bytes 284.00 bytes/sec
total size is 0 speedup is 0.00

返回服务器端查看

[root@server ~]# ll /data/ #文件已同步过来

四、LVS调度算法总结

1.轮叫调度(Round Robin)(简称rr)

调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

2.加权轮叫(Weighted Round Robin)(简称wrr)

调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

3.最少链接(Least Connections)(LC)

调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。

4.加权最少链接(Weighted Least Connections)(WLC)

在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

5.基于局部性的最少链接(Locality-Based Least Connections)(LBLC)

“基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接” 的原则选出一个可用的服务器,将请求发送到该服务器。

6.带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)(LBLCR)

“带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标 IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

7.目标地址散列(Destination Hashing)(DH)

“目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

8.源地址散列(Source Hashing)(SH)

“源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

9.最短的期望的延迟(Shortest Expected Delay Scheduling SED)(SED)

基于wlc算法。这个必须举例来说了
ABC三台机器分别权重123 ,连接数也分别是123。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用sed算法后会进行这样一个运算
A(1+1)/1
B(1+2)/2
C(1+3)/3
根据运算结果,把连接交给C 。

10.最少队列调度(Never Queue Scheduling NQ)(NQ)

无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要在进行sed运算

五、LVS的跨网络DR实现

主机:四台,一台VS服务器,二台RS服务器,一台客户端服务器

网络配置:VS服务器 DIP:192.168.25.5(eth0),RS1服务器RIP:192.168.25.15(eth0),RS2服务器RIP:192.168.25.25(eth0),VIP:192.168.25.100(lo:1),客户端服务器CIP:192.168.25.35(eth1)

软件包:keepalived,ipvsadm,httpd(光盘yum源)

1.在VS服务器上配置

[root@VS ~]# yum install -y ipvsadm

[root@VS ~]# ifconfig eth0:1 192.168.25.100/32

[root@VS ~]# ipvsadm -A -t 192.168.25.100:80 -s wrr

[root@VS ~]# ipvsadm -a -t 192.168.25.100:80 -r 192.168.25.15 -g -w 1

[root@VS ~]# ipvsadm -a -t 192.168.25.100:80 -r 192.168.25.25 -g -w 1

[root@VS ~]# ipvsadm -Ln

2.在RS1服务器上配置

[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/lo/arp_announce

[root@RS1 ~]# ifconfig lo:1 192.168.25.100/32

[root@RS1 ~]# yum install -y httpd

[root@RS1 ~]# echo 192.168.25.15 RS1 > /var/www/html/index.html

[root@RS1 ~]# systemctl start httpd

3.在RS2服务器上配置

[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/lo/arp_announce

[root@RS2 ~]# ifconfig lo:1 192.168.25.100/32

[root@RS2 ~]# yum install -y httpd

[root@RS2 ~]# echo 192.168.25.25 RS2 > /var/www/html/index.html

[root@RS2 ~]# systemctl start httpd

4.在客户端服务器上测试

[root@client ~]# while true; do curl 192.168.25.100 ;sleep 1; done
192.168.25.15 RS1
192.168.25.25 RS2
192.168.25.15 RS1
192.168.25.25 RS2
192.168.25.15 RS1

posted on 2022-03-14 17:55  ray0712  阅读(84)  评论(0)    收藏  举报