lvs应用

练习:负载均衡一个php应用:

测试是否需要会话保持;

是否需要用到共享存储;

   为了检测是否需要会话保持和共享存储,要在两台主机上分别配置LAMP环境;这样就使得两者之间没有了共享存储;负载均衡使用nat模型的wlc算法,并且不使用lvs的长连接选项。数据库故意使用了相同的账号密码来进行安装。

步骤一:配置环境:

使用yum分别安装两台主机的环境,分别安装Discuz论坛;

blob.png

blob.png

此种方式可以在安装的时候就会发现,因为没有会话保持,每次安装的下一步都可以正确使用,但是安装之后就不能正常访问了,每次刷新页面都会报错,是如下两个页面的来回切换:

blob.png

blob.png

而第一张图片的错误应该是刷新到了没有安装论坛的主机,而第二张虽然能够访问,但是连接数据库出现了错误,因为点击登录并不能登录成功。我们再打开一个新的页面进行访问,结果还是相同。

我们重新负载均衡,这时使用会话保持的非共享存储:使用lvs自带的保持连接机制:

[root@localhost ~]# ipvsadm  -E -t 10.1.49.11:80  -p 360
[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.1.49.11:80 wlc persistent 360
  -> 192.168.49.2:80              Masq    1      0          0         
  -> 192.168.49.3:80              Masq    1      0          0

重新安装:

blob.png

访问正常,发表一个帖子,查看也正常。但是此时很明显另一台主机并没有安装discuz,并且数据库相互独立。我们将另一台主机安装discuz,查看效果:

blob.png

可以正常访问,但是可以看到我们在另一台主机上发表的一个帖子,在此主机上并不能看得到,这对于用户来说并不是想要的结果。因此我们需要共享存储,利用nassands等等或者主从复制等方法将数据库同步,才可以使用,如下图所示:

blob.png

blob.png

  当使用了共享存储,但没有会话保持的时候:登录之后,确实能够看到同样的内容,但是因为没有会话保持,登录之后刷新,登录就会断开,也会影响用户体验,类似于在淘宝上面买东西,从登录=》拍得东西=》添加地址=》付款,这是一个一系列的过程,也可以理解成一次操作过程,所有这一系列的操作过程都应当由一台服务器完成,而不能被负载均衡器分配到不同的服务器上。

 

课后作业dr模型中vipdip/rip不在同一个网段的实验环境设计及配置实现;

 

先配置VIPDIP/RIP在同一网段的情况,此时两台RS主机的网关指向的是10.1.0.1,响应报文会从交换机发送出去。

blob.png

而在配置不同网段的情况下,可以将RIP的网关指向其它路由器,从而从另一个途径直接发给用户,其源地址是VIP,目标地址是CIP。如下图:

blob.png

步骤一:配置准备,此处使用一台客户端,一台Director和两台RS

同步时间

[root@localhost ~]# ntpdate 10.1.0.1

centos7中:

[root@localhost ~]# vim /etc/chrony.conf

blob.png

重启服务:

[root@localhost ~]# systemctl restart chronyd.service 
[root@localhost ~]# date
2016年 10月 26日 星期三 22:13:42 CST

打开Director的核心转发功能:

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

更改两台RS的内核参数及网卡,此处使用脚本更改:

[root@localhost ~]# cat set.sh 
#!/bin/bash
#
vip=10.1.49.49
mask=255.255.255.255
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
 
ifconfig lo:0 $vip netmask $mask broadcast $vip up
route add -host $vip dev lo:0
;;
stop)
ifconfig lo:0 down
 
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "usage `basename` $0 start|stop"
exit 1
;;
esac

将网卡改为同一网段,并执行脚本:

blob.png

blob.png

Director上创建DR模型,使用脚本:

[root@localhost ~]# cat rs.sh 
#!/bin/bash
#
vip='10.1.49.49'
iface='eno16777736:0'
mask=255.255.255.255
port='80'
rs1='10.1.252.28'
rs2='10.1.49.10'
scheduler='wrr'
type='-g'
 
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up #Director上直接配置别名,使用VIP
iptables -F 
ipvsadm -A -t $vip:$port -s $scheduler
ipvsadm -a -t $vip:$port -r $rs1 $type -w 1
ipvsadm -a -t $vip:$port -r $rs2 $type -w 1
;;
stop)
ipvsadm -C 
ifconfig $iface down 
;;
*)
echo "usage"
exit 1
;;
esac
[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.1.49.49:80 wrr
  -> 10.1.49.10:80                Route   1      0          0         
  -> 10.1.252.28:80               Route   1      0          0

检测结果:

blob.png

blob.png

[root@localhost ~]# for i in {1..10}; do curl http://10.1.49.49/index.html; done 
RS1
RS2
RS1
RS2
RS1
RS2
RS1
RS2
RS1
RS2

练习三:使用rsync+inotify实现数据同步;

 

(1)实验拓扑图:

blob.png

(2)实验目的:主机client创建有/data/tom/data/jerry的非空目录并担任客户端角色,结合inotify-tools工具;server1server2主机分别创建有/data/test1/data/test2并担任rsync的服务器。本实验验证当clent的目录内容发生变化时,能否实时同步到服务器端的目录中。

(3)rsync特性:

可以镜像备份整个目录树或者文件系统。

可以借助于rcpremote file copy)、rshremote shell)、sshsecure shell)传输文件,又可以通过sockets直接连接传输。

基于增量备份机制,有较高的同步效率。

支持匿名和认证的进程模式传输,方便数据传输与镜像。

可以指定排除同步部分目录或文件。

支持拷贝设备文件、链接等特殊文件。

文件或目录的拷贝可以保留其权限、时间戳、软硬链接等所有属性。

(4)配置实验环境:

yum安装rsyncinotify

服务端:

[root@localhost ~]# service xinetd start 
正在启动 xinetd:                                          [确定]
[root@localhost ~]# chkconfig rsync on 
[root@localhost ~]# chkconfig --list | grep rsync 
rsync:          启用

centos6rsync安装好之后没有自己的配置文件,我们需要手动创建配置文件:

[root@localhost ~]# cat /etc/rsyncd.conf
 uid = root
 gid = root
 use chroot = no
 max connections = 20
 pid file = /var/run/rsyncd.pid
 log file = /var/log/rsyncd.log
 lock file = /var/run/rsync.lock
 timeout = 900
[data]
path = /data/tom
ignore errors
read only = false
list = false 
hosts allow = 10.1.49.11/24
auth users = backuser
secrets file = /etc/rsync.passwd

rsync命令:

 rsync [option]SRC [SRC]DEST [DEST]

          optionrsync能够使用的选项,如下

            -n : 同步测试,不执行同步    

            -v :  verbose,详细输出模式,显示详细过程    

            -q : quiet,静默模式,尽可能输出少的信息    

            -c : checksum,可以对传输的文件进行较验的,强制对文件传输进行校验    

            -r  : recursive,递归复制    

            -p : perms,保存文件的权限    

            -t  : times,保留文件的时间戳    

            -l  : links,保留文件的符号链接    

            -g : group,保留文件的属组    

            -o : owner,保留文件的属主    

            -D : devices,保留设备文件

            -A : acls,保留acl访问控制列表

            -a : archives归档,复制时可以保存原有的属主属主等属性信息,甚至包括一点额外的属性。等同于-rlptgoD    

            -e SSH : 远程复制时,表示使用ssh协议作承载。如果ssh端口不是22,可以用-e ssh -p 22   

            -z : 基于网络时使用,对文件压缩后传输   

            progress : 显示压缩进度条的,简写-P   

            stats : 显示如何执行压缩和传输的,也就是显示传输状态的

(5)inotify,linux内核版本2.6.13以及更新版本支持,提供强大的文件系统监控,通过打开一个独立的文件描述符并以此监控一个或则多个文件的打开、关闭、移动/重命名、删除创建或者改变属性的事件。由于notify是内核功能,因此需要使用时,需要通过其接口程序inotify-tools接口程序调取使用。inotify-tools是基于linux平台为inotify的提供的C语言开发的接口工具,并提供一系列命令行工具并利用这些工具监控文件系统的事件。

(6)建立rsync用户名和密码文件,并更改权限:

[root@localhost ~]# echo "backuser:123" >> /etc/rsync.passwd
[root@localhost ~]# chmod 600 /etc/rsync.passwd

以上,服务器端配置完成。

(7)客户端配置:

[root@localhost ~]# echo "123" > /etc/rsync.passwd
[root@localhost ~]# chmod 600 /etc/rsync.passwd

配置inotify:

[root@localhost ~]# yum install inotify-tools

(8)添加脚本:此处只写了一台服务器,两台以上服务器可以使用for循环执行:

[root@localhost ~]# cat inotify.sh
#!/bin/bash
#
src=/data/tom
des=data
ip=10.1.49.10
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e modify,delete,create,attrib
$src | while read file do
rsync -avzP --delete --progress $src backuser@$ip::$des --password-file=/etc/rsync.passwd
echo "$src was rsynced"
done

注意文件名及变量的书写。

执行脚本:

[root@localhost ~]# bash inotify.sh &

此处的脚本在测试时会显示同步过程,是为了检测错误方便;在实际中可以将结果重定向至/dev/null。

(9)测试,此处只测试一个服务器:在客户端的tom目录下创建文件:

[root@localhost tom]# touch asdf
[root@localhost tom]# sending incremental file list
tom/
tom/asdf
  0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=1/3)
tom/asdfasdf
  0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=0/3)
sent 144 bytes  received 50 bytes  388.00 bytes/sec
total size is 0  speedup is 0.00
/data/tom was rsynced
/data/tom was rsynced

在服务端查看:

[root@localhost tom]# ls
tom
[root@localhost tom]# cd tom/
[root@localhost tom]# ls
asdf  asdfasdf

确实能够同步成功,但是此处做的还有不足。

在服务器端可以看出,同步的目录在tom下又新建了一个tom目录,说明两者的配置中的目录并不是同层的。此处的改进,可使服务器端的配置文件中的目录更改为path=/data,这样就可以同步至/data目录下了。也可以将脚本中的src=/data/tom,更改为/data。

原创文章,作者:SilencePavilion,如若转载,请注明出处:http://www.178linux.com/56513

(0)
SilencePavilionSilencePavilion
上一篇 2016-11-11
下一篇 2016-11-11

相关推荐

  • N28-第四周博客作业

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。

    2、编辑/etc/group文件,添加组hadoop。

    3、手动编辑/etc/passwd文件新增一行,添加用户hadoop,其基本组ID为hadoop组的id号;其家目录为/home/hadoop。

    4、复制/etc/skel目录为/home/hadoop,要求修改hadoop目录的属组和其它用户没有任何访问权限。

    5、修改/home/hadoop目录及其内部所有文件的属主为hadoop,属组为hadoop。

    6、显示/proc/meminfo文件中以大写或小写S开头的行;用两种方式;

    7、显示/etc/passwd文件中其默认shell为非/sbin/nologin的用户;

    8、显示/etc/passwd文件中其默认shell为/bin/bash的用户;

    9、找出/etc/passwd文件中的一位数或两位数;

    10、显示/boot/grub/grub.conf中以至少一个空白字符开头的行;

    11、显示/etc/rc.d/rc.sysinit文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行;

    12、打出netstat -tan命令执行结果中以‘LISTEN’,后或跟空白字符结尾的行;

    13、添加用户bash, testbash, basher, nologin (此一个用户的shell为/sbin/nologin),而后找出当前系统上其用户名和默认shell相同的用户的信息;

    Linux干货 2017-12-26
  • 进程和计划任务

    一、知识整理 1、网络客户端工具:lftp,ftp,lftget,wget 子命令:get,mget,ls,help等 wget [opt] …[url] -q 静默模式 -c 断点续传 -O 保存位置 –limit-rates=  指定传输速率 登录ftp之后:lcd 在本机切换目录;get下载单个文件 !ls 查看本机文…

    Linux干货 2016-09-13
  • 【26期】Linux第八周学习小总结

        前言     本周的学习已经过去了,虽然本周学习中老师一直都有说,哎呀,这个不重要,以后有网络管理员给你们来做,了解一下就行,然而话锋一转就又说,其实小公司没有网络管理员,如果你们不好好学,以后就会做得更多更杂的工作,这一周的知识点基本上都是在一个pdf上的,大概有200…

    2017-09-02
  • 马哥教育网络班22期第5周课程作业

    1、显示当前系统上root、fedora或user1用户的默认shell; cat /etc/passwd | grep ^root | cut -d: -f7 2、找出/etc/rc.d/init.d/functions文件中某单词后面跟一组小括号的行,形如:hello(); …

    Linux干货 2016-12-05
  •  编译安装步骤     大致过程:(源代码–预处理–编译–汇编–链接–执行)   第一步 下载安装开发工具“Development toos” 第二步 下载解压源代码包 仔细阅读“Install和 Read me” 第三步 使用./conf…

    Linux干货 2017-04-24