• 第十五周练习题


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

    #利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能
    #项目网站:http://pam-mysql.sourceforge.net/
    #说明:因为此项目年代久远不再更新,当前只支持CentOS 6,7,不支持CentOS 8
    环境准备:
    本实验在两台主机上实现
    一台作为FTP服务器centos7
    一台作为mariadb数据库服务器centos8
    
    #在数据库服务器安装mariadb数据库
    [root@mariadb ~]#yum install -y mariadb-server;systemctl enable --now mariadb
    
    #在数据库服务器上配置数据库支持vsftpd服务
    [root@mariadb ~]#mysql
    MariaDB [(none)]> create database vsftpd;
    Query OK, 1 row affected (0.000 sec)
    
    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)
    
    MariaDB [vsftpd]> insert into users(name,password) values('ftp_tan',password('123456'));
    Query OK, 1 row affected (0.001 sec)
    
    MariaDB [vsftpd]> insert into users(name,password) values('ftp_liang',password('123456'));
    Query OK, 1 row affected (0.001 sec)
    
    MariaDB [vsftpd]> select * from users;
    +----+-----------+-------------------------------------------+
    | id | name      | password                                  |
    +----+-----------+-------------------------------------------+
    |  1 | ftp_tan   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    |  2 | ftp_liang | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
    +----+-----------+-------------------------------------------+
    2 rows in set (0.000 sec)
    
    #创建连接数据库的用户
    MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '123456';
    Query OK, 0 rows affected (0.000 sec)
    
    MariaDB [vsftpd]> flush privileges;
    Query OK, 0 rows affected (0.000 sec)
    
    #在ftp服务器上安装vsftpd和pam_mysql的包
    [root@ftp ~]# yum install -y vsftpd
    #对于centos6,pam_mysql的包由epel源提供,对于centos7无对应的rpm包,需要手动编译安装
    #当前版本的源码不支持centos8,使用中会提示如下错误
    [root@centos8 ~]#tail -f /var/log/secure
    Jan  2 10:20:31 centos8 vsftpd[15519]: PAM unable to 
    dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/security/pam_mysql.so: 
    undefined symbol: make_scrambled_password
    
    #centos7编译安装pam_mysql
    [root@ftp ~]# yum install -y gcc gcc-c++ make mariadb-devel pam-devel
    [root@ftp ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
    [root@ftp ~]# tar xf pam_mysql-0.7RC1.tar.gz
    [root@ftp ~]# cd pam_mysql-0.7RC1
    [root@ftp pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
    [root@ftp pam_mysql-0.7RC1]# make install
    [root@ftp pam_mysql-0.7RC1]# ll /lib64/security/pam_mysql.*
    -rwxr-xr-x 1 root root    882 Nov 18 17:02 /lib64/security/pam_mysql.la
    -rwxr-xr-x 1 root root 141712 Nov 18 17:02 /lib64/security/pam_mysql.so
    
    #在ftp服务器上建立pam认证所需要的文件
    [root@ftp ~]# vim /etc/pam.d/vsftpd.mysql
    auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    
    #说明:配置参数参考pam_mysql-0.7RC1目录下的README文档
    配置字段说明
    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()函数加密
    crypt 加密方式:
    0表示不加密
    1表示crypt(3)加密
    2表示使用mysql password()函数加密
    3表示md5加密
    4表示sha1加密
    
    #建立相应用户和修改vsftpd配置文件
    [root@ftp ~]# useradd -s /sbin/nologin -d /data/ftproot -r vuser
    [root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
    #添加下面两项
    guest_enable=YES
    guest_username=vuser
    #修改下面一项,原系统用户无法登录
    pam_service_name=vsftpd.mysql
    
    #启动vsftpd服务
    [root@ftp ~]# systemctl enable --now vsftpd
    
    #在ftp服务器上配置虚拟用户具有不同的访问权限
    vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户
    的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其
    路径及名称即可
    [root@ftp ~]#vim /etc/vsftpd/vsftpd.conf
    #添加如下选项
    user_config_dir=/etc/vsftpd/conf.d/
    
    #创建所需要目录,并为虚拟用户提供配置文件
    [root@ftp ~]#mkdir /etc/vsftpd/conf.d/
    #配置虚拟用户的访问权限
    #虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户tan具有上传文件的权限,可修改/etc/vsftpd/conf.d/ftp_tan文件,在里面添加如下选项并设置为YES即可,只读则设为NO
    #注意:需确保对应的映射用户对于文件系统有写权限
    anon_upload_enable={YES|NO}
    anon_mkdir_write_enable={YES|NO}
    anon_other_write_enable={YES|NO}
    #登录目录改变至指定的目录
    local_root=/data/ftproot2
    
    [root@ftp ~]# cat /etc/vsftpd/conf.d/ftp_tan
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    [root@ftp ~]# cat /etc/vsftpd/conf.d/ftp_liang
    anon_upload_enable=NO
    anon_mkdir_write_enable=NO
    anon_other_write_enable=NO
    local_root=/data/ftproot2
    
    #ftp_tan用户还是访问根目录/data/ftproot,ftp服务放开了上传权限,再在文件系统放开vuser写权限
    [root@ftp ~]#chmod 555 /data/ftproot
    [root@ftp ~]# mkdir -pv /data/ftproot/upload
    mkdir: created directory ‘/data’
    mkdir: created directory ‘/data/ftproot’
    mkdir: created directory ‘/data/ftproot/upload’
    [root@ftp ~]#setfacl -m u:vuser:rwx /data/ftproot/upload
    [root@ftp ~]#touch /data/ftproot/f1
    
    #ftp_liang用户访问的ftp根目录该为了/data/ftproot2,需要去掉写权限,否则此用户登录失败
    [root@ftp ~]# chmod 555 /data/ftproot2
    [root@ftp ~]#touch /data/ftproot2/f2
    
    #测试:使用ftp_tan用户上传文件成功,ftp_liang用户登录看到/data/ftproot2目录下的文件成功
    [root@mariadb ~]#ftp 10.0.0.152
    Connected to 10.0.0.152 (10.0.0.152).
    220 (vsFTPd 3.0.2)
    Name (10.0.0.152:root): ftp_tan
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (10,0,0,152,184,151).
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 Nov 18 09:45 f1
    drwxrwxr-x    2 0        0               6 Nov 18 09:12 upload
    226 Directory send OK.
    ftp> cd upload
    250 Directory successfully changed.
    ftp> send anaconda-ks.cfg
    local: anaconda-ks.cfg remote: anaconda-ks.cfg
    227 Entering Passive Mode (10,0,0,152,41,212).
    150 Ok to send data.
    226 Transfer complete.
    1314 bytes sent in 0.000241 secs (5452.28 Kbytes/sec)
    ftp> ls
    227 Entering Passive Mode (10,0,0,152,239,137).
    150 Here comes the directory listing.
    -rw-------    1 998      996          1314 Nov 18 09:54 anaconda-ks.cfg
    226 Directory send OK.
    
    [root@mariadb ~]#ftp 10.0.0.152
    Connected to 10.0.0.152 (10.0.0.152).
    220 (vsFTPd 3.0.2)
    Name (10.0.0.152:root): ftp_liang
    331 Please specify the password.
    Password:
    230 Login successful.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (10,0,0,152,142,203).
    150 Here comes the directory listing.
    -rw-r--r--    1 0        0               0 Nov 18 10:16 f2
    226 Directory send OK.
    ftp>
    

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

    #服务器端配置:
    [root@samba ~]#yum install -y samba
    [root@samba ~]#groupadd -r www
    [root@samba ~]#useradd -s /sbin/nologin -G www test1
    [root@samba ~]#smbpasswd -a test1
    New SMB password:
    Retype new SMB password:
    Added user test1.
    [root@samba ~]#useradd -s /sbin/nologin test2
    [root@samba ~]#smbpasswd -a test2
    New SMB password:
    Retype new SMB password:
    Added user test2.
    [root@samba ~]#mkdir /www
    [root@samba ~]#chgrp www /www
    [root@samba ~]#chmod 2775 /www
    [root@samba ~]#vim /etc/samba/smb.conf
    #加上一下这段配置。设置共享目录为/www,设置www组中用户有写权限
    [share]
            path = /www
            write list = @www
    
    #启动服务
    [root@samba ~]#systemctl enable --now smb nmb
    
    #客户端配置
    [root@client ~]# yum install -y cifs-utils
    #分别用test1,test2用户进行挂载共享目录
    [root@client ~]# mkdir /mnt/test1
    [root@client ~]# mkdir /mnt/test2
    [root@client ~]# mount -o username=test1 //10.0.0.150/share /mnt/test1
    Password for test1@//10.0.0.150/share:  ******
    [root@client ~]# mount -o username=test2 //10.0.0.150/share /mnt/test2
    Password for test2@//10.0.0.150/share:  ******
    [root@client ~]# echo "test1" >> /mnt/test1/test.txt
    [root@client ~]# cat /mnt/test1/test.txt
    test1
    [root@client ~]# touch /mnt/test2/test.txt
    touch: cannot touch ‘/mnt/test2/test.txt’: Permission denied
    #说明:test1用户在www组,samba服务给了www组写的权限,test2用户不在www组,因此创建文件失败。
    
    #配置自动挂载
    [root@client ~]# cat /etc/smb.txt
    username=test1
    password=123456
    [root@client ~]# chmod 600 /etc/smb.txt
    [root@client ~]# echo "//10.0.0.150/share  /mnt/test1 cifs  credentials=/etc/smb.txt 0 0" >> /etc/fstab
    #自动挂载测试ok
    [root@client ~]# mount -a
    [root@client ~]# ll /mnt/test1
    total 4
    -rwxr-xr-x 1 root root 6 Nov 18 18:40 test.txt
    
    [root@client ~]# yum install -y samba-client
    [root@client ~]# smbclient  //10.0.0.150/share -U test1%123456
    Try "help" to get a list of possible commands.
    smb: \> ls
      .                                   D        0  Thu Nov 18 18:40:54 2021
      ..                                  D        0  Thu Nov 18 18:29:35 2021
      test.txt                            A        6  Thu Nov 18 18:40:54 2021
    
                    104806400 blocks of size 1024. 98400288 blocks available
    smb: \>
    

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

    #rsync 常用于做为 linux系统下的数据镜像备份工具,实现远程同步,支持本地复制,或者与其他SSH、rsync主机同步数据,支持增量备份,配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync,可以实现触发式的实时数据同步
    官方网站: http://rsync.samba.org/
    软件包:rsync,rsync-daemon(CentOS 8)
    服务文件:/usr/lib/systemd/system/rsyncd.service
    配置文件:/etc/rsyncd.conf
    端口:873/tcp
    
    backup服务器 10.0.0.150
    client服务器 10.0.0.152
    
    [root@backup ~]#dnf -y install rsync-daemon
    [root@backup ~]#vim /etc/rsyncd.conf
    uid = root
    gid = root
    #port = 874
    #use chroot = no
    max connections = 0
    ignore errors
    exclude = lost+found/
    pid file = /var/run/rsyncd.pid
    log file = /var/run/rsyncd.log
    lock file = /var/run/rsyncd.lock
    reverse lookup = no
    #hosts allow = 10.0.0.0/24
    [bkup]   #每个模块名对应一个不同的path目录,如果同名后面模块生效
    path = /data/bkup/
    comment = backup dir
    read only = no #默认为yes,即只读
    auth users = rsyncuser #默认anonymous可以访问rsync服务器
    secrets file = /etc/rsync.pas
    
    [root@backup ~]#mkdir /data/bkup -p
    [root@backup ~]#echo "rsyncuser:123456" > /etc/rsync.pas
    [root@backup ~]#chmod 600 /etc/rsync.pas
    [root@backup ~]#systemctl start rsyncd
    
    
    #客户端配置
    [root@client ~]# yum install -y inotify-tools
    [root@client ~]# yum install rsync -y
    [root@client ~]# echo "123456" >/etc/rsync.pas
    [root@client ~]# chmod 600 /etc/rsync.pas
    [root@client ~]# rsync --password-file=/etc/rsync.pas  rsyncuser@10.0.0.150::
    bkup            backup dir
    [root@client ~]# rsync --password-file=/etc/rsync.pas  rsyncuser@10.0.0.150::bkup
    drwxr-xr-x              6 2021/11/18 21:13:32 .
    
    #同步测试
    #推数据
    [root@client ~]# mkdir /data/www
    [root@client ~]# echo test2 >/data/www/dd.txt
    [root@client ~]# rsync --password-file=/etc/rsync.pas  rsyncuser@10.0.0.150::bkup
    drwxr-xr-x             23 2021/11/18 21:46:28 .
    -rw-r--r--              5 2021/11/18 21:46:28 index.txt
    [root@client ~]# rsync -avz --delete  --password-file=/etc/rsync.pas   /data/www/ rsyncuser@10.0.0.150::bkup
    sending incremental file list
    deleting index.txt
    ./
    dd.txt
    
    sent 118 bytes  received 51 bytes  338.00 bytes/sec
    total size is 6  speedup is 0.04
    #拉数据
    [root@backup ~]#echo test > /data/bkup/index.txt
    [root@backup ~]#cat /data/bkup/index.txt
    test
    [root@client ~]# rsync -avz --delete  --password-file=/etc/rsync.pas    rsyncuser@10.0.0.150::bkup /data/www/
    receiving incremental file list
    ./
    index.txt
    
    sent 46 bytes  received 141 bytes  374.00 bytes/sec
    total size is 11  speedup is 0.06
    [root@client ~]# ll /data/www
    total 8
    -rw-r--r-- 1 root root 6 Nov 18 21:47 dd.txt
    -rw-r--r-- 1 root root 5 Nov 18 21:50 index.txt
    
    #在数据服务器上创建inotify_rsync.sh脚本
    说明:此脚本执行前先确保两主机初始数据处于同步状态,此脚本实现后续的数据同步
    [root@client ~]# vim inotify_rsync.sh
    f#!/bin/bash
    SRC='/data/www/'
    DEST='rsyncuser@10.0.0.150::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 DATETIME 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
    
    [root@client ~]# bash inotify_rsync.sh
    [root@client www]# touch 11
    [root@backup bkup]#ll
    total 8
    -rw-r--r-- 1 root root 0 Nov 18 22:06 11
    -rw-r--r-- 1 root root 6 Nov 18 21:47 dd.txt
    -rw-r--r-- 1 root root 5 Nov 18 21:50 index.txt
    
    [root@client ~]# tail -f /var/log/changelist.log
    At  on , file 22:06:32/data/www/ 11 was backuped up via rsync
    At  on , file 22:06:32/data/www/ 11 was backuped up via rsync
    At  on , file 22:06:32/data/www/ 11 was backuped up via rsync
    
    #在客户端/data/www目录下创建文件11,在backup服务器上查看同步成功
    

    4、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将被调度
    活动连接:连接上并在传输数据,活动链接压力等于非活动链接的256倍
    非活动链接:连接上但没有传输数据
    
    1、LC:least connections最少连接。将新的连接请求,分配给连接数最少的服务器,适用于长连接应用
    Overhead=activeconns*256+inactiveconns
    如:服务器 RS1 RS2
    活动/非活动连接数
    RS1:10/100
    RS2: 20/0
    压力值 :
    RS1: 10x256+100 = 2660
    RS2: 20*256+ 0 = 5120
    RS1服务器压力值更小,更应该被分配新的访问请求。
    
    2、WLC:Weighted LC,加权最少连接。默认调度方法,较常用
    Overhead=(activeconns*256+inactiveconns)/weight
    特殊的最少连接算法,权重越大承担的请求数越多
    
    3、SED:Shortest Expection Delay,最短期望延迟。初始连接高权重优先,只检查活动连接,而不考虑非活动连接
    Overhead=(activeconns+1)*256/weight
    特殊的WLC算法,为了解决连接数(访问)是0的情况,来确定分给哪台服务器
    
    4、NQ:Never Queue,永不排队。特殊的SED算法,无需等待,如果有真实服务器的连接数等于0那就直接分配不需要运算,第一轮均匀分配,后续SED
    
    5、LBLC:Locality-Based LC,动态的DH算法。使用场景:根据负载状态实现正向代理,实现Web Cache等
    
    6、LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等
    
    内核版本 4.15 版本后新增调度算法:FO和OVF
    1、FO(Weighted Fail Over)调度算法,在此FO算法中,遍历虚拟服务所关联的真实服务器链表,找到还未过载(未设置IP_VS_DEST_F_OVERLOAD标志)的且权重最高的真实服务器,进行调度,属于静态算法
    
    2、OVF(Overflow-connection)调度算法,基于真实服务器的活动连接数量和权重值实现。将新连接调度到权重值最高的真实服务器,直到其活动连接数量超过权重值,之后调度到下一个权重值最高的真实服务器,在此OVF算法中,遍历虚拟服务相关联的真实服务器链表,找到权重值最高的可用真实服务器,属于动态算法
    
    一个可用的真实服务器需要同时满足以下条件:
    	未过载(未设置IP_VS_DEST_F_OVERLOAD标志)
    	真实服务器当前的活动连接数量小于其权重值
    	其权重值不为零
    

    5、LVS的跨网络DR实现

    #环境准备:
    5台主机
    客户端client       vmnet1仅主机网络 eth0:192.169.33.160/24 GW:192.168.33.200
    路由器router        vmnet1仅主机网络 eth1:192.169.33.200/24
    			     vmnet8 NAT网络 eth0: 10.0.0.200/24  eth0:1: 192.168.0.200/24
    负载调度器LVS      vip:lo 192.168.0.100/32  
    			     DIP:eth0 NAT 10.0.0.150/24 GW:10.0.0.200
    后端web服务器RS1   vip:lo 192.168.0.100/32  
    			     DIP:eth0 NAT 10.0.0.160/24 GW:10.0.0.200
    后端web服务器RS2   vip:lo 192.168.0.100/32  
    			     DIP:eth0 NAT 10.0.0.170/24 GW:10.0.0.200
    			     
    #client:
    [root@client ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    PROXY_METHOD=none
    BROWSER_ONLY=no
    BOOTPROTO=static
    DEFROUTE=yes
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=192.168.33.160
    PREFIX=24
    GATEWAY=192.168.33.200
    
    [root@client ~]# systemctl restart network
    
    #router:
    [root@router ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=static
    DEFROUTE=yes
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=10.0.0.200
    PREFIX=24
    
    [root@router ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
    TYPE=Ethernet
    BOOTPROTO=static
    DEFROUTE=yes
    NAME=eth1
    DEVICE=eth1
    ONBOOT=yes
    IPADDR=192.168.33.200
    PREFIX=24
    
    [root@router ~]# systemctl restart network
    #添加临时eth0网卡子接口eth0:1配置ip地址。
    [root@router ~]# ip a add 192.168.0.200/24 dev eth0
    #测试仅主机网络,和客户端正常通信
    [root@router ~]# ping 192.168.33.160
    PING 192.168.33.160 (192.168.33.160) 56(84) bytes of data.
    64 bytes from 192.168.33.160: icmp_seq=1 ttl=64 time=0.490 ms
    64 bytes from 192.168.33.160: icmp_seq=2 ttl=64 time=0.859 ms
    
    #配置开启路由转发功能
    [root@router ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    [root@router ~]# sysctl -p
    net.ipv4.ip_forward = 1
    [root@router ~]# cat /proc/sys/net/ipv4/ip_forward
    1
    
    #LVS:
    #网络配置
    [root@lvs ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    IPADDR=10.0.0.150
    PREFIX=24
    GATEWAY=10.0.0.200
    ONBOOT=yes
    [root@lvs ~]#nmcli c reload
    [root@lvs ~]#nmcli c up eth0
    [root@lvs ~]#route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.0.0.200      0.0.0.0         UG    100    0        0 eth0
    10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
    [root@lvs ~]#ping 192.168.33.160
    PING 192.168.33.160 (192.168.33.160) 56(84) bytes of data.
    64 bytes from 192.168.33.160: icmp_seq=1 ttl=63 time=0.919 ms
    64 bytes from 192.168.33.160: icmp_seq=2 ttl=63 time=4.51 ms
    
    #配置vip
    [root@lvs ~]#ifconfig  lo:1 192.168.0.100 netmask 255.255.255.255
    
    
    
    #RS1:
    #网络配置
    [root@RS1 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    IPADDR=10.0.0.160
    PREFIX=24
    GATEWAY=10.0.0.200
    ONBOOT=yes
    [root@RS1 ~]#nmcli c reload
    [root@RS1 ~]#nmcli c up eth0
    [root@RS1 ~]#route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.0.0.200      0.0.0.0         UG    100    0        0 eth0
    10.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0
    
    #web服务配置
    [root@RS1 ~]#yum install -y httpd
    [root@RS1 ~]#echo 10.0.0.160 >> /var/www/html/index.html
    [root@RS1 ~]#systemctl restart httpd
    [root@RS1 ~]#curl localhost
    10.0.0.160
    
    #IPVS配置
    [root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    [root@RS1 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    [root@RS1 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    #配置vip
    [root@RS1 ~]#ifconfig  lo:1 192.168.0.100 netmask 255.255.255.255
    
    
    #RS2:
    #网络配置
    [root@RS2 ~]#vim /etc/sysconfig/network-scripts/ifcfg-eth0
    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    IPADDR=10.0.0.170
    PREFIX=24
    GATEWAY=10.0.0.200
    ONBOOT=yes
    [root@RS2 ~]#nmcli c reload
    [root@RS2 ~]#nmcli c up eth0
    
    #web服务配置
    [root@RS2 ~]#yum install -y httpd
    [root@RS2 ~]#echo 10.0.0.170 >> /var/www/html/index.html
    [root@RS2 ~]#systemctl restart httpd
    [root@RS2 ~]#curl localhost
    10.0.0.170
    
    #IPVS配置
    [root@RS2 ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
    [root@RS2 ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
    [root@RS2 ~]#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
    [root@RS2 ~]#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
    #配置vip
    [root@RS2 ~]#ifconfig  lo:1 192.168.0.100 netmask 255.255.255.255
    
    #LVS集群配置:
    [root@lvs ~]#yum install -y ipvsadm-1.31-1.el8.x86_64.rpm
    [root@lvs ~]#ipvsadm  -A -t 192.168.0.100:80 -s wrr
    [root@lvs ~]#ipvsadm  -a -t 192.168.0.100:80 -r 10.0.0.160 -g -w 1
    [root@lvs ~]#ipvsadm  -a -t 192.168.0.100:80 -r 10.0.0.170 -g -w 1
    
    #测试client:
    [root@client ~]# curl 192.168.0.100
    10.0.0.170
    [root@client ~]# curl 192.168.0.100
    10.0.0.160
    [root@client ~]# curl 192.168.0.100
    10.0.0.170
    [root@client ~]# curl 192.168.0.100
    10.0.0.160
  • 相关阅读:
    函数中this指向问题及函数不同方式的调用
    拷贝继承
    组合继承
    借用构造函数
    继承
    UVA-11054(扫描法)
    hihocoder-1347 小h的树上的朋友(lca+线段树)
    UVA-10391(字符串检索)
    UVA-10125(中途相遇法)
    UVA-10827(前缀和降维)
  • 原文地址:https://www.cnblogs.com/tanll/p/15589939.html
Copyright © 2020-2023  润新知