samba的运用以及LVS服务,LVS中DR模式

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

虚拟用户:给特定服务使用的用户帐号
所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录
各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能,当前只支持CentOS 6,7,不支持CentOS 8

 实验准备:

client-----10.0.0.6-----CentOS8

FTP-server--10.0.0.13-------CentOS7

Mysql-------10.0.0.7---------CentOS8

第一步在10.0.0.7上安装mariadb数据库并在数据库服务上配置数据库支持vsftpd服务

[root@mysql ~]# yum -y install  mariadb-server
[root@mysql ~]# systemctl enable --now mariadb.service 
[root@mysql ~]# mysql
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)
#添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
MariaDB [vsftpd]> INSERT INTO users(name,password) values('xiaoming',password('123456'));
MariaDB [vsftpd]> INSERT INTO users(name,password) values('xiaohong',password('123456'));
Query OK, 1 row affected (0.001 sec)
#创建连接的数据库用户
MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '123456';


第二步部署FTP服务器10.0.0.13,pam_mysql可以在官网PAM-MySQL下载 

[root@ftp-server ~]# yum -y install  vsftpd
[root@ftp-server ~]# systemctl enable --now vsftpd.service 
[root@ftp-server ~]# tar  xvf pam_mysql-0.7RC1.tar.gz -C /usr/local/src/
#下载pam-mysql源码进行编译所需的源码包
[root@ftp-server ~]#yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
[root@ftp-server ~]#cd /usr/local/src/pam_mysql-0.7RC1/
[root@ftp-server pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security
[root@ftp-server pam_mysql-0.7RC1]#make install
[root@ftp-server pam_mysql-0.7RC1]# ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root    882 Jul 26 13:54 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141720 Jul 26 13:54 /lib64/security/pam_mysql.so


第三步在FTP服务器上建立pam认证所需文件

[root@ftp-server pam_mysql-0.7RC1]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.7 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2                         
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.7 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

crypt 加密方式:


     0表示不加密
    1表示crypt(3)加密
    2表示使用mysql password()函数加密
    3表示md5加密
    4表示sha1加密

配置字段说明


     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()函数加密

第四步建立相应用户和修改vsftpd配置文件

#建立虚拟用户映射的系统用户及对应的目录
[root@ftp-server ~]# useradd -s /sbin/nologin -d /data/ftproot -r vuser

[root@ftp-server ~]# mkdir -pv /data/ftproot/upload
[root@ftp-server ~]# setfacl -m u:vuser:rwx /data/ftproot/upload/
[root@ftp-server ~]# getfacl /data/ftproot/upload/
getfacl: Removing leading '/' from absolute path names
# file: data/ftproot/upload/
# owner: root
# group: root
user::rwx
user:vuser:rwx
group::r-x
mask::rwx
other::r-x
[root@ftp-server ~]#
#确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@ftp-server ~]#vim /etc/vsftpd/vsftpd.conf
#添加下面两项
guest_enable=YES
guest_username=vuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
[root@ftp-server ~]# systemctl restart  vsftpd


第五步在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf
[root@ftp-server ~]# mkdir /etc/vsftpd/conf.d/
#配置虚拟用户的访问权限
#虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户xiaoming具有上传文件的权限,可修改/etc/vsftpd/vusers.d/xiaoming文件,在里面添加如下选项并设置为YES即可,只读则设为NO
#注意:需确保对应的映射用户对于文件系统有写权限
[root@ftp-server ~]# vim /etc/vsftpd/conf.d/xiaoming
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
local_root=/data/ftproot1---------------------------#登录目录改变至指定的目录
[root@ftp-server ~]# mkdir /data/ftproot1/upload -pv
mkdir: created directory ‘/data/ftproot1’
mkdir: created directory ‘/data/ftproot1/upload’
[root@ftp-server ~]# chown  -R vuser:vuser /data/ftproot1/upload/
[root@ftp-server ~]# systemctl restart  vsftpd.service 




验证结果! 

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

实验准备:10.0.0.13-------samba---server----Centos7.0

                10.0.0.14-------samba--client-----Centos7.0

SMB服务器介绍: 

SMB:Server Message Block 服务器消息块,IBM发布,最早是DOS网络文件共享协议,是私有协议
CIFS:common internet file system,微软基于SMB发布
SAMBA:1991年 Andrew Tridgell 实现 Windows和UNIX相通
官方网站:http://www.samba.org/
SAMBA的功能:
共享文件和打印,实现在线编辑
实现登录SAMBA用户的身份认证
可以进行NetBIOS名称解析
外围设备共享
Windows计算机网络管理模式:
工作组WORKGROUP:计算机对等关系,帐号信息各自管理
域DOMAIN:C/S结构,帐号信息集中管理,DC,AD

第一步在10.0.0.13安装samba服务器和配置文件的设置

[root@samba-server ~]# yum  -y install  samba
[root@samba-server ~]# mkdir  /www------------------创建共享目录/www
[root@samba-server ~]# vim /etc/samba/smb.conf
[share_www]
    comment = share /www-------------#注释信息
    path = /www----------------------#所共享的目录路径
    read only = no---------#和writable=yes等价,writable=yes指的是可以被所有用户读写,默认为no
    create mask =0664---------------#说明:默认为744
    directory mask = 0775  

第二步在samba服务器上创建对于的文件共享目录的账户

[root@samba-server ~]# useradd  -s /sbin/nologin smb100
[root@samba-server ~]# smbpasswd -a smb100
[root@samba-server ~]# pdbedit -L
smb100:1001:
[root@samba-server ~]# 

注意:我们新建的smb100用户在客户端操作没有上传权限,只有下载权限。这是因为samba虽然指定了共享目录可写,但是对于smb100用户在服务端上的文件系统没有授权为可写,所以smb100用户暂时没法上传,需要上传文件我们就必须要对其文件系统赋予smb100用户有写的权限才行

[root@samba-server ~]#setfacl -m u:smb100:rwx /www/
[root@samba-server ~]#getfacl /www/
getfacl: Removing leading '/' from absolute path names
# file: www/
# owner: root
# group: root
user::rwx
user:smb100:rwx
group::r-x
mask::rwx
other::r-x
[root@samba-server ~]#

第三步在10.0.0.14安装samba的客户端

 [root@samba-client ~]#yum -y install  samba-client------------安装samba的客户端
[root@samba-client ~]#smbclient //10.0.0.13/share_www -U smb100%123456

第四步测试,上传测试.txt的文件

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

实验准备:

         10.0.0.6-------data-server(CentOS8)

         10.0.0.7-------backupi-server(CentOS8)

 第一步在10.0.0.6上面安装rsync和inotify-tools,并且修改inotify的内核文件

Linux支持inotify的内核最小版本为 2.6.13,参看man 7 inotify

#列出下面的文件,说明服务器内核支持inotify
[13:49:05 root@data-server ~]#ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 30 13:49 max_queued_events
-rw-r--r-- 1 root root 0 Jul 30 13:49 max_user_instances
-rw-r--r-- 1 root root 0 Jul 30 13:49 max_user_watches
[13:49:48 root@data-server ~]#cat /proc/sys/fs/inotify/max_queued_events
16384
[13:50:12 root@data-server ~]#cat /proc/sys/fs/inotify/max_user_instances 
128
[13:50:20 root@data-server ~]#cat /proc/sys/fs/inotify/max_user_watches 
8192
[13:50:25 root@data-server ~]#yum -y install rsync
#max_queued_events:inotify 事件队列最大长度,如值太小会出现 Event Queue Overflow 错
误,默认值:16384, 生产环境建议调大,比如:327679
#max_user_instances:每个用户创建inotify实例最大值,默认值:128
#max_user_watches:可以监视的文件的总数量(inotifywait 单进程),默认值:8192,建议调大

#修改inotify的内核参数
[13:54:17 root@data-server ~]#vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000

第二步在10.0.0.7---backup上安装rsync和rsync-daemon,开启rsync服务创建rsync服务器的配置文件


[root@backup-server ~]#yum -y install rsync
[root@backup-server ~]#yum -y install rsync-daemon
[root@backup-server ~]# systemctl enable --now  rsyncd
[root@backup-server ~]# cat /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 life = /var/log/rsyncd.log
pid life = /var/log/rsyncd.log
lock file = /var/log/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-server ~]# mkdir -pv /data/backup--------#服务器端准备目录
[root@backup-server ~]# echo "rsyncuser:123456" > /etc/rsync.pas----#服务器端生成验证文件
[root@backup-server ~]# chmod 600 /etc/rsync.pas
[root@backup-server ~]# systemctl restart  rsyncd



第三步上图已经可以完成时实同步了,但每次上传文件都要输密码和编写成shell脚本也不方便,于是我们可以在10.0.0.6-data-server上配置密码文件,实现非交互式上传和查看文件:

[14:26:26 root@data-server ~]#echo  "123456" > /etc/rsync.pas
[14:33:45 root@data-server ~]#chmod 600 /etc/rsync.pas
[14:33:45 root@data-server ~]#rsync /etc/sysconfig/* --password-file=/etc/rsync.pas rsync://rsyncuser@10.0.0.7/backup---------------上传/etc/sysconfig/*里的文件夹
[14:33:45 root@data-server ~]#rsync  --password-file=/etc/rsync.pas rsync://rsyncuser@10.0.0.7/backup-------------查看backup-server的/backup的文件

4、LVS调度算法总结

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将被调度

1、LC:least connections 适用于长连接应用

Overhead=activeconns*256+inactiveconns

2、WLC:Weighted 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等

内核版本 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实现

DR模式的特点:


1. Director和各RS都配置有VIP
2. 确保前端路由器将目标IP为VIP的请求报文发往Director
     在前端网关做静态绑定VIP和Director的MAC地址
     在RS上使用arptables工具

 

arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP


     在RS上修改内核参数以限制arp通告及应答级别

/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce


3. RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向
    DIP,以确保响应报文不会经由Director
4. RS和Director要在同一个物理网络
5. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
6. 不支持端口映射(端口不能修改)
7. 无需开启 ip_forward
8. RS可使用大多数OS系统 

实验准备:  1台Ubuntu18.04.1---------Client

                     3台Centos8.0分别为:LVS,RS1,RS2

                     1台CentOS8.0-------Router

第一步部署10.0.0.7机器为Route,添加网卡以及

路由器的网络配置:

[root@Route ~]# echo  "net.ipv4.ip_forward=1" > /etc/sysctl.conf 
[root@Route ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@Route ~]#  ip add add 172.16.0.200/24 dev eth0




第二步在10.0.0.9部署LVS,安装ipvsamd

[17:45:30 root@LVS ~]#yum -y install ipvsadm

 第三步在10.0.0.13和10.0.0.14安装httpd服务

[root@rs1 ~]# yum -y install  httpd;echo "rs1 10.0.0.13"> /var/www/html/index.html;systemctl enable --now httpd
[root@rs2 ~]# yum -y install  httpd;echo "rs2 10.0.0.14"> /var/www/html/index.html;systemctl enable --now httpd

 第三步后端RS的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/lo/arp_announce 
[root@rs1 ~]# ifconfig lo:1 172.16.0.100/32



[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 172.16.0.100/32

第四步LVS的配置

[18:21:51 root@LVS ~]#ifconfig  eth0:1 172.16.0.100/24
[18:21:51 root@LVS ~]#ipvsadm -A -t 172.16.0.100:80 -s wrr
[18:21:51 root@LVS ~]#ipvsadm -a -t 172.16.0.100:80 -r 10.0.0.13 -g -w 1
[18:21:51 root@LVS ~]#ipvsadm -a -t 172.16.0.100:80 -r 10.0.0.14 -g -w 1

第五步测试

实验完成 !

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N64-HanYeWei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值