lvs环境搭建

lvs环境搭建
lvs是linux virtual server的缩写,顾名思义:linux虚拟服务器,是一个虚拟的服务器集群系统。
作用:负载均衡。当多个客户端同时并发请求服务器的时候,将请求按一定规则分发给不同的真实服务器。
lvs有3种模式:nat模式、ip隧道模式、dr模式。 ip隧道模式基本已经被dr模式取代,所以只需要了解nat模式和dr模式即可。
nat模式和dr模式的优缺点
nat模式优点:只需要一个外网ip,供lvs使用,lvs与真实服务器通过内网连接(tcp/ip)
nat模式缺点:请求和响应都需要通过lvs服务器,如果真实服务器超过20个或更多时,lvs服务器将成为系统瓶颈。(对中小型企业无影响)
dr模式优点:lvs服务器只负责分发请求、不负责响应(响应是通过真实服务器直接返回给客户端),部署再多的真实服务器,lvs服务器也不会成为瓶颈。
缺点:要求负载均衡器的网卡必须与物理网卡在一个物理段上。

本文以nat模式为例配置lvs环境。

1

NAT(Network Address Translation)是一种外网和内网地址映射的技术。
NAT模式下,网络报的进出都要经过LVS的处理。LVS需要作为RS的网关。
RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。
这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

虚拟机搭建
我使用了一台linux client、一台lvs服务器、两台linux web服务器作为本次测试的环境。
虚拟机VirtualBox 4.3.24 linux系统 centos 6.3

首先将lvs服务器桥接连通网络,然后使用yum命令安装lvs相关软件

然后分别设置4台虚拟机的网卡

linux client

2

lvs服务器需要配置2个网卡,网卡1供外网访问,网卡2内网连接web服务器

3

4

web1服务器

5

web2服务器

6

接着,分别配置4台虚拟机

这里需要注意的是客户端ip与lvs服务器的外网ip必须在同一网段
两台web服务器的ip与lvs服务器的内网ip必须在同一网段
lvs服务器的外网ip与内网ip必须为不同网段
如何区分是否为同一网段:ip地址和子网掩码与运算,如果相同则为同一网段,反之则为不同网段

至此,配置已全部完成

通过客户端浏览器访问8.8.8.8每强刷一次就会在两台web服务器中切换。7

lvs理论请参考:

http://www.topthink.com/topic/4049.html#rd?sukey=39297060d6d3d5575308953957823c18f5a73e49de75d9efc8ac91c891ddaa173459806f0abbf4d44e676489280f52c6

mysql存储过程

存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。

MySQL存储过程创建的格式:CREATE PROCEDURE 过程名 ([IN|OUT|INOUT] 参数名 数据类型,…,…)[特性 …] 过程体

注意事项:
MySQL默认以”;”为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过程会报错,所以要事先用DELIMITER关键字申明当前段分隔符,这样MySQL才会将”;”当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。

存储过程根据需要可能会有输入、输出、输入输出参数,如果有多个参数用”,”分割开。

过程体的开始与结束使用BEGIN与END进行标识。

IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数:该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数:调用时指定,并且可被改变和返回

调用存储过程用 必须使用”@”符号 用户变量一般以@开头

 

定义变量
declare 变量名[多个用”,”隔开] 变量类型 [default value]; 变量类型如:int float date varchar(20)等
例如:
DECLARE l_int int unsigned default 4000000;
DECLARE l_numeric number(8,2) DEFAULT 9.95;
DECLARE l_date date DEFAULT ‘1999-12-31’;
DECLARE l_datetime datetime DEFAULT ‘1999-12-31 23:59:59’;
DECLARE l_varchar varchar(20) DEFAULT ‘hello world’;

变量赋值
set 变量名=表达式值 如:set test=test+1;

查看某库有哪些存储过程
select name from mysql.proc where db=’数据库名’;

查看存储过程详情
show create procedure 数据库名.存储过程名

注:mysql中处理字符串时,默认第一个字符下标为1,php中为0

常用函数:

 

参考地址:http://mp.weixin.qq.com/s?__biz=MjM5NDMwNjMzNA==&mid=203926493&idx=1&sn=6538524997d1df8c6e8563fe3d5d564e&scene=2#rd

swoole安装与调试

一.安装

1.下载swoole,尽量使用stable版本,即稳定版
地址:https://github.com/swoole/swoole-src/releases

2.通过ftp上传到linux服务器

3.解压与安装

安装完成后进入php.ini加入以下语句

extension=swoole.so

php.ini路径可通过 php –ini 查看

运行php -m 看看swoole扩展是否安装成功

重启nginx、php(不知道是否需要重启- – 保险起见还是重启一下)

/etc/init.d/nginx restart

/etc/init.d/php-fpm restart

二.调试

在网站根目录编写index.php,内容如下:

通过 php index.php 启动服务

此时,通过浏览器访问127.0.0.1即可访问swoole的http服务器。

负载均衡和集群之简单理解

负载均衡(以LVS为例):用户1访问网站,首先通过LVS,然后转发给服务器A,此时用户2也访问了网站,同样首先通过LVS,然后转发给服务器B。依次类推,来分担压力。

集群(冗余):用户在访问网站的时候,正好访问到服务器A,此时服务器A宕机了。而在服务器A背后还有一台服务器A1(服务器A的备用机),当服务器A宕机时,服务器A1则启动来替代A继续接收访问。

负载均衡

通俗点说:负载均衡就是通过一系列服务器来抗并发的。而集群就是通过一系列备用服务器来防止服务器宕机造成数据丢失或服务器无法访问的。

同理:mysql的主从属于负载均衡范畴,而mysql数据库集群则属于冗余技术。

linux文件系统–/dev/shm

一、/dev/shm理论
默认的Linux发行版中的内核配置都会开启tmpfs,映射到了/dev/下的shm目录。可以通过df 命令查看结果.
/dev/shm/是linux下一个非常有用的目录,因为这个目录不在硬盘上,而是在内存里。因此在linux下,就不需要大费周折去建ramdisk,直接使用/dev/shm/就可达到很好的优化效果。默认系统就会加载/dev/shm ,它就是所谓的tmpfs,有人说跟ramdisk(虚拟磁盘),但不一样。象虚拟磁盘一样,tmpfs 可以使用您的 RAM,但它也可以使用您的交换分区来存储。而且传统的虚拟磁盘是个块设备,并需要一个 mkfs 之类的命令才能真正地使用它,tmpfs 是一个文件系统,而不是块设备;您只是安装它,它就可以使用了。
tmpfs有以下优势:
1。动态文件系统的大小,/dev /shm/需要注意的一个是容量问题,在linux下,它默认最大为内存的一半大小,使用df -h命令可以看到。但它并不会真正的占用这块内存,如果/dev/shm/下没有任何文件,它占用的内存实际上就是0字节;如果它最大为1G,里头放有 100M文件,那剩余的900M仍然可为其它应用程序所使用,但它所占用的100M内存,是绝不会被系统回收重新划分的
2。tmpfs 的另一个主要的好处是它闪电般的速度。因为典型的 tmpfs 文件系统会完全驻留在 RAM 中,读写几乎可以是瞬间的。
3。tmpfs 数据在重新启动之后不会保留,因为虚拟内存本质上就是易失的。所以有必要做一些脚本做诸如加载,绑定的操作。

二、修改/dev/shm大小
默认的最大一半内存大小在某些场合可能不够用,并且默认的inode数量很低一般都要调高些,这时可以用mount命令来管理它。
#mount -o size=1500M -o nr_inodes=1000000 -o noatime,nodiratime -o remount /dev/shm
在2G的机器上,将最大容量调到1.5G,并且inode数量调到1000000,这意味着大致可存入最多一百万个小文件。
如果需要永久修改/dev/shm的值,需要修改/etc/fstab
tmpfs /dev/shm tmpfs defaults,size=1.5G 0 0
mount -o remount /dev/shm

三、/dev/shm应用
首先在/dev/shm建个tmp文件夹,然后与实际/tmp绑定
#mkdir /dev/shm/tmp
#chmod 1777 /dev/shm/tmp
#mount –bind /dev/shm/tmp /tmp(–bind )
在使用mount –bind olderdir newerdir命令来挂载一个目录到另一个目录后,newerdir的权限和所有者等所有信息会发生变化。挂载后的目录继承了被挂载目录的所有属性,除了名称。Oracle 11g的amm内存管理模式就是使用/dev/shm,所以有时候修改MEMORY_TARGET或者MEMORY_MAX_TARGET会出现ORA-00845的错误

测试demo如下:

 

本文理论部分摘自:http://blog.csdn.net/heyutao007/article/details/7051269

jsonp

一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、WCF,只要是跨域请求,一律不准。

不过我们又发现,Web页面上调用js文件时则不受是否跨域的影响(不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<script>、<img>、<iframe>)。

JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。

简单的说,jsonp就是通过script标签、src属性和callback回调来实现跨域的。

 

 

jquery把jsonp封装到了ajax里面,但是我们要知道,jsonp跟ajax其实是两回事。

 

ajax的核心是通过XmlHttpRequest获取非本页内容,而jsonp的核心则是动态添加<script>标签来调用服务器提供的js脚本。

所以说,其实ajax与jsonp的区别不在于是否跨域,ajax通过服务端代理一样可以实现跨域,jsonp本身也不排斥同域的数据的获取。

还有就是,jsonp是一种方式或者说非强制性协议,如同ajax一样,它也不一定非要用json格式来传递数据,如果你愿意,字符串都行,只不过这样不利于用jsonp提供公开服务。

本文参考:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html