linux下rsync命令详细整理
发布于:2014-1-27 11:48 作者:admin 浏览:1585 分类:LinuxRsync的命令格式可以为以下六种:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@172.16.78.192::www /databack
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@172.16.78.192::www
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://172.16.78.192/www
rsync参数的具体解释如下:
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
一般都使用azv选项
Linux下常用SVN命令
发布于:2014-1-27 11:42 作者:admin 浏览:1538 分类:Linux1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain --username qinxiaohui
简写:svn co
2、往版本库中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加当前目录下所有的php文件)
3、将改动的文件提交到版本库
svn commit -m "LogMessage" [-N] [--no-unlock] PATH(如果选择了保持锁,就使用--no-unlock开关)
例如:svn commit -m "add test file for my test" test.php
简写:svn ci
4、加锁/解锁
svn lock -m "LockMessage" [--force] PATH
例如:svn lock -m "lock test file" test.php
svn unlock PATH
5、更新到某个版本
svn update -r m path
例如:
svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。
svn update -r 200 test.php(将版本库中的文件test.php还原到版本200)
svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件,然后清除svn resolved,最后再提交commit)
简写:svn up
6、查看文件或者目录状态
1)svn status path(目录下的文件和子目录的状态,正常状态不显示)
【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】
2)svn status -v path(显示文件和子目录状态)
第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。
注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。
简写:svn st
7、删除文件
svn delete path -m "delete test fle"
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m "delete test file"
或者直接svn delete test.php 然后再svn ci -m 'delete test file‘,推荐使用这种
简写:svn (del, remove, rm)
8、查看日志
svn log path
例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化
9、查看文件详细信息
svn info path
例如:svn info test.php
10、比较差异
svn diff path(将修改的文件与基础版本比较)
例如:svn diff test.php
svn diff -r m:n path(对版本m和版本n比较差异)
例如:svn diff -r 200:201 test.php
简写:svn di
11、将两个版本之间的差异合并到当前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)
12、SVN 帮助
svn help
svn help ci
------------------------------------------------------------------------------
以上是常用命令,下面写几个不经常用的
------------------------------------------------------------------------------
13、版本库下的文件和目录列表
svn list path
显示path目录下的所有属于版本库的文件和目录
简写:svn ls
14、创建纳入版本控制下的新目录
svn mkdir: 创建纳入版本控制下的新目录。
用法:
1、mkdir PATH...
2、mkdir URL...
创建版本控制的目录。
1、每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增
调度,以待下一次的提交。
2、每个以URL指定的目录,都会透过立即提交于仓库中创建。
在这两个情况下,所有的中间目录都必须事先存在。
15、恢复本地修改
svn revert: 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。
revert:
用法: revert PATH...
注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复
被删除的目录
16、代码库URL变更
svn switch (sw): 更新工作副本至不同的URL。
用法:
1、switch URL [PATH]
2、switch --relocate FROM TO [PATH...]
1、更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。
2、改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。
17、解决冲突
svn resolved: 移除工作副本的目录或文件的“冲突”状态。
用法: resolved PATH...
注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。
18、输出指定文件或URL的内容。
svn cat 目标[@版本]...如果指定了版本,将从指定的版本开始查找。
svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
HAProxy 配置
发布于:2014-1-20 18:31 作者:admin 浏览:1960 分类:系统架构
global
参数是进程级的,通常和操作系统(OS)相关。这些参数一般只设置一次,如果配置无
误,就不需要再次配置进行修改
defaults
配置默认参数的,这些参数可以被利用配置到 frontend,backend,listen 组件
frontend
接收请求的前端虚拟节点, Frontend 可以根据规则直接指定具体使用后端的
backend(可动态选择)。
backend
后端服务集群的配置,是真实的服务器,一个 Backend 对应一个或者多个实体服务器。
listen
Frontend 和 Backend 的组合体。
以上 5 个组件不是必选的,可以根据需要选择部分作为配置。
详细的配置信息,请查阅官方文档
http://haproxy.1wt.eu/
组件配置如下:
global
#全局的日志配置 其中日志级别是[err warning info debug]
#local0 是日志设备,必须为如下 24 种标准 syslog 设备的一种:
#kern user mail daemon auth syslog lpr news
#uucp cron auth2 ftp ntp audit alert cron2
#local0 local1 local2 local3 local4 local5 local6 local7
#但是之前在/etc/syslog.conf 文件中定义的是 local0 所以
#这里也是用 local0
#如果日志无法写到 haproxy.log,解决方案如下
#vi /etc/syslog.conf
#添加 local3.* /var/log/haproxy.log
#添加 local0.* /var/log/haproxy.log
#vi /etc/sysconfig/syslog
#把 SYSLOGD_OPTIONS="-m 0" 改成 SYSLOGD_OPTIONS="-r –m 0"
#重启 syslogd: /etc/init.d/syslog restart
log 127.0.0.1 local0 info #[err warning info debug]
#最大连接数
maxconn 4096
#用户
user admin
#组
group admin
#使 HAProxy 进程进入后台运行。这是推荐的运行模式
daemon
#创建 4 个进程进入 deamon 模式运行。此参数要求将运行模式设置为"daemon"
nbproc 4
#将所有进程的 pid 写入文件启动进程的用户必须有权限访问此文件。
pidfile /usr/local/haproxy/haproxy.pid
defaults
#默认的模式 mode { tcp|http|health },tcp 是 4 层,http 是 7 层,health 只会返回 OK
mode http
#采用 http 日志格式
option httplog
#三次连接失败就认为是服务器不可用,也可以通过后面设置
retries 3
如果 cookie 写入了 serverId 而客户端不会刷新 cookie,
#当 serverId 对应的服务器挂掉后,强制定向到其他健康的服务器
option redispatch
#当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option abortonclose
#默认的最大连接数
maxconn 4096
#连接超时
contimeout 5000
#客户端超时
clitimeout 30000
#服务器超时
srvtimeout 30000
#=心跳检测超时
timeout check 2000
#注:一些参数值为时间,比如说 timeout。时间值通常单位为毫秒(ms),但是也可以通过
加#后缀,来使用其他的单位。
#- us : microseconds. 1 microsecond = 1/1000000 second
#- ms : milliseconds. 1 millisecond = 1/1000 second. This is the default.
#- s : seconds. 1s = 1000ms
#- m : minutes. 1m = 60s = 60000ms
#- h : hours. 1h = 60m = 3600s = 3600000ms
#- d : days. 1d = 24h = 1440m = 86400s = 86400000ms
统计页面配置############
listen admin_stats
#监听端口
bind 0.0.0.0:1080
#http 的 7 层模式
mode http
#日志设置
log 127.0.0.1 local0 err #[err warning info debug]
#统计页面自动刷新时间
stats refresh 30s
#统计页面 url
stats uri /admin?stats
#统计页面密码框上提示文本
stats realm Gemini\ Haproxy
#统计页面用户名和密码设置
stats auth admin:admin
stats auth admin1:admin1
#隐藏统计页面上 HAProxy 的版本信息
stats hide-version
#######网站检测 listen 定义############
listen site_status
bind 0.0.0.0:1081
mode http
log 127.0.0.1 local0 err #[err warning info debug]
#网站健康检测 URL,用来检测 HAProxy 管理的网站是否可以用,正常返回 200,不正常返回
500
monitor-uri /site_status
#定义网站 down 时的策略
#当挂在负载均衡上的指定 backend 的中有效机器数小于 1 台时返回 true
acl site_dead nbsrv(denali_server) lt 1
acl site_dead nbsrv(tm_server) lt 1
acl site_dead nbsrv(mms_server) lt 1
#当满足策略的时候返回 500
monitor fail if site_dead
#如果 192.168.0.252 或者 192.168.0.31 这两天机器挂了
#认为网站挂了,这时候返回 500,判断标准是如果 mode 是
#http 返回 200 认为是正常的,如果 mode 是 tcp 认为端口畅通是好的
monitor-net 192.168.0.252/31
frontend 配置############
frontend http_80_in
#监听端口
bind 0.0.0.0:80
#http 的 7 层模式
mode http
#应用全局的日志配置
log global
#启用 http 的 log
option httplog
#每次请求完毕后主动关闭 http 通道,HA-Proxy 不支持 keep-alive 模式
option httpclose
#如果后端服务器需要获得客户端的真实 IP 需要配置次参数,将可以从 Http Header 中
#获得客户端 IP
option forwardfor
###########HAProxy 的日志记录内容配置##########
capture request header Host len 40
capture request header Content-Length len 10
capture request header Referer len 200
capture response header Server len 40
capture response header Content-Length len 10
capture response header Cache-Control len 8
####################acl 策略定义#########################
#如果请求的域名满足正则表达式返回 true -i 是忽略大小写
acl denali_policy hdr_reg(host) -i ^(www.xxx.net|...
#如果请求域名满足 trade.xxx.net 返回 true -i 是忽略大小写
acl tm_policy hdr_dom(host) -i trade.xxx.net
##在请求 url 中包含 sip_apiname=,则此控制策略返回 true,否则为 false
acl invalid_req url_sub -i sip_apiname=
##在请求 url 中存在 timetask 作为部分地址路径,则此控制策略返回 true,否则返回 false
acl timetask_req url_dir -i timetask
#当请求的 header 中 Content-length 等于 0 时返回 true
acl missing_cl hdr_cnt(Content-length) eq 0
######################acl 策略匹配相应###################
##当请求中 header 中 Content-length 等于 0 阻止请求返回 403
block if missing_cl
##block 表示阻止请求,返回 403 错误,当前表示如果不满足策略 invalid_req,或者满足策略 timetask_req,则阻止请求。
block if !invalid_req || timetask_req
#当满足 denali_policy 的策略时使用 denali_server 的 backend
use_backend denali_server if denali_policy
#当满足 tm_policy 的策略时使用 tm_server 的 backend
use_backend tm_server if tm_policy
#reqisetbe 关键字定义,根据定义的关键字选择 backend
reqisetbe ^Host:\ img dynamic
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic
reqisetbe ^[^\ ]*\ /admin/stats stats
#以上都不满足的时候使用默认 mms_server 的 backend
default_backend mms_server
#HAProxy 错误页面设置
errorfile 400 /usr/local/haproxy/errorfiles/400.http
errorfile 403 /usr/local/haproxy/errorfiles/403.http
errorfile 408 /usr/local/haproxy/errorfiles/408.http
errorfile 500 /usr/local/haproxy/errorfiles/500.http
errorfile 502 /usr/local/haproxy/errorfiles/502.http
errorfile 503 /usr/local/haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http
##########backend 的设置##############
backend mms_server
#http 的 7 层模式
mode http
#负载均衡的方式,roundrobin 平均方式
balance roundrobin
#允许插入 serverid 到 cookie 中,serverid 后面可以定义
cookie SERVERID
#心跳检测的 URL,HTTP/1.1¥r¥nHost:XXXX,指定了心跳检测 HTTP 的版本,XXX 为检测时请求
#服务器的 request 中的域名是什么,这个在应用的检测 URL 对应的功能有对域名依赖的话
需要设置
option httpchk GET /member/login.html HTTP/1.1\r\nHost:xxx.com
#服务器定义,cookie 1 表示 serverid 为 1,check inter 1500 是检测心跳频率
#rise 3 是 3 次正确认为服务器可用,fall 3 是 3 次失败认为服务器不可用,weight 代表
权重
server mms1 10.1.5.134:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1
server mms2 10.1.6.118:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2
backend denali_server
mode http
#负载均衡的方式,source 根据客户端 IP 进行哈希的方式
balance source
#但设置了 backup 的时候,默认第一个 backup 会优先,设置 option allbackups 后
#所有备份服务器权重一样
option allbackups
#心跳检测 URL 设置
option httpchk GET /xxx/xxx.html HTTP/1.1\r\nHost:xxx.com
#可以根据机器的性能不同,不使用默认的连接数配置而使用自己的特殊的连接数配置
#如 minconn 10 maxconn 20
server denlai1 10.1.5.114:80 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
server denlai2 10.1.6.104:80 minconn 10 maxconn 20 check inter 1500 rise 3 fall 3
#备份机器配置,正常情况下备机不会使用,当主机的全部服务器都 down 的时候备机会启用
server dnali-back1 10.1.7.114:80 check backup inter 1500 rise 3 fall 3
server dnali-back2 10.1.7.114:80 check backup inter 1500 rise 3 fall 3
backend tm_server
mode http
#负载均衡的方式,leastconn 根据服务器当前的请求数,取当前请求数最少的服务器
balance leastconn
option httpchk GET /xxx/xxx.htm HTTP/1.1\r\nHost:trade.xxx.com
server tm1 10.1.5.115:80 check inter 1500 rise 3 fall 3
server tm2 10.1.6.105:80 check inter 1500 rise 3 fall 3
######reqisetbe 自定义关键字匹配 backend 部分#######################
backend dynamic
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.xxx.net
server denlai1 10.3.5.114:80 check inter 1500 rise 3 fall 3
server denlai2 10.4.6.104:80 check inter 1500 rise 3 fall 3
backend stats
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.xxx.net
server denlai1 10.5.5.114:80 check inter 1500 rise 3 fall 3
server denlai2 10.6.6.104:80 check inter 1500 rise 3 fall 3
haproxy 的启动
/usr/local/haproxy/sbin/haproxy –f /usr/local/haproxy/haproxy.cfg
Haproxy 的重启
/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat
/usr/local/haproxy/haproxy.pid` (不要换行)
Haproxy 的停止
Killall -9 haproxy
启动参数
haproxy -f < 配置文件>
[-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p ] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m < 内存限制 M>] [{-sf|-st} pidlist...]
-d 前台,debug 模式
-D daemon 模式启动
-q 安静模式,不输出信息
-V 详细模式
-c 对配置文件进行语法检查
-s 显示统计数据
-l 显示详细统计数据
-dk 不使用 kqueue
-ds 不使用 speculative epoll
-de 不使用 epoll
-dp 不使用 poll
-db 禁用后台模式,程序跑在前台
-sf 程序启动后向 pidlist 里的进程发送 FINISH 信号,这个参数放在命令行的最后
-st 程序启动后向 pidlist 里的进程发送 TERMINATE 信号,这个参数放在命令行的最后
Haproxy 安装和调试。
发布于:2014-1-20 17:34 作者:admin 浏览:2649 分类:系统架构Haproxy 可以做4层(tcp)/7层(http)代理,利用Haproxy的7层代理实现一个负载均衡器
1. 测试环境
192.168.1.10 (Haproxy 负载均衡机器)
192.168.1.20 (WEB20服务器)
192.168.1.30 (WEB30服务器)
2.在 192.168.1.10 (Haproxy 负载均衡机器) 安装Haproxy
2.1 下载Haproxy
# wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz
2.2 解压安装
# tar -zxvf haproxy-1.4.24.tar.gz (解压文件)
# cd haproxy-1.4.24 (进入工作目录)
# uname -a (查看Liunx内核版本)
Linux localhost.localdomain 2.6.33.3-85.fc13.i686 #1 SMP Thu May 6 18:44:12 UTC 2010 i686 i686 i386 GNU/Linux
# make TARGET=linux26 PREFIX=/usr/local/haprpxy install (根据内核版本编译和安装haprpxy)
2.3 配置Haproxy.cfg (只要是负载均衡配置)
(...省略...)
listen haproxy.test.com
bind *:80
mode http
option httplog
balance roundrobin
option httpchk GET /index.html (WEB服务器一定要存在这个健康检查文件,负责服务检查失败,出现503错误)
server web20 192.168.1.20:80 weight 2 check inter 2000 rise 2 fall 3
server web30 192.168.1.30:80 weight 1 check inter 2000 rise 2 fall 3
2.4 启动haproxy
#/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg
3. 配置WEB服务器
在服务器 192.168.1.20(WEB20) 写入主页:echo 'IP=192.168.1.20(WEB20)' >> /index.html
在服务器 192.168.1.30(WEB30) 写入主页:echo 'IP=192.168.1.30(WEB30)' >> /index.html
4. 测试负载均衡
访问: http://192.168.1.20/index.html 出现 IP=192.168.1.20(WEB20)
访问: http://192.168.1.30/index.html 出现 IP=192.168.1.30(WEB30)
访问: http://192.168.1.10 出现 第1次:IP=192.168.1.20(WEB20) 第2次:IP=192.168.1.20(WEB20) 第3次:IP=192.168.1.30(WEB30) 【因为WEB20的机器权重为2,WEB30权重为1】
如果出现上述结果:表示成功安装haproxy并且成功配置负载均衡。
5.查看统计页面
编辑 haproxy.cfg,加入 stats uri /stats
访问: http://192.168.1.10/stats
MEMCACHE共享SESSION
发布于:2014-1-10 11:42 作者:admin 浏览:2118 分类:系统架构1. 实验环境(2个机器) 192.168.1.10(Memcached服务器) 192.168.1.20(WEB服务器)
2.配置Memcached服务器(192.168.1.10) 安装: yum install memcached 开启: memcached -d -m 32 -p 11211 -u root (开启11211端口提供服务,32M缓存,最好不要带-l 如 -l 127.0.0.1,否则会导致远程服务器连接不上)
3.在WEB机器上编写测试程序(192.168.1.20. 注意:一定要安装memcache扩展)
<?php header("Content-type:text/html; charset=utf-8"); echo "<pre>"; $mamcache_server_ip='192.168.1.10'; $mamcache_server_port='11211'; //设置MemcacheSession共享 ini_set("session.save_handler","memcache"); ini_set("session.save_path","tcp://$mamcache_server_ip:$mamcache_server_port"); session_start(); //session赋值 $session_id=session_id(); var_dump("session_id=".$session_id); $action=$_GET['action']; switch($action) { //清除$_SESSION['mem_session'] case 'clear': unset($_SESSION['mem_session']); var_dump($_SESSION['mem_session']); //session_destroy(); break; //存储SESSION case 'set': $_SESSION['mem_session']='测试SESSION='.date("Y-m-d H:i:s"); var_dump($_SESSION['mem_session']); break; //获取SESSION case 'get': var_dump($_SESSION['mem_session']); break; //查看Memcahce如何存储的SESSION case 'mem': //从MEMCACHE读取SESSION的值。 $memcache = new Memcache; $memcache->connect($mamcache_server_ip,$mamcache_server_port) or die ("连接服务器失败"); //key 来源 session_id(); $result = $memcache->get($session_id); var_dump("结果=".$result); break; } echo "</pre>"; ?>
4. 测试结果如下: 4.1. http://localhost/session.php?action=clear string(37) "session_id=o8lb038n05c6e185d0c882kp84" NULL 4.2. http://localhost/session.php?action=set string(37) "session_id=o8lb038n05c6e185d0c882kp84" string(33) "测试SESSION=2014-01-10 05:32:46" 4.3.http://localhost/session.php?action=get string(37) "session_id=o8lb038n05c6e185d0c882kp84" string(33) "测试SESSION=2014-01-10 05:32:46" 4.4.http://localhost/session.php?action=mem string(37) "session_id=o8lb038n05c6e185d0c882kp84" string(60) "结果=mem_session|s:33:"测试SESSION=2014-01-10 05:32:46";"
解决memcached不能远程访问的问题
发布于:2014-1-10 9:35 作者:admin 浏览:4613 分类:错误汇总一直 本地连接memcached 并且使用没有问题,但是远程连接的时候出现问题。
当我启动时使用了此命令:
memcached -d -m 32 -l 127.0.0.1 -p 11211 -u root
发现了问题存在的原因:我在启动时使用了 -l 参数,它指定了连接到memcached服务器的IP地址为 127.0.0.1。换句话说只有本地才能连接到memcached。既然找到了问题的原因,那么解决自然就不是问题了,启动时使用这个命令:
//usr/bin/memcached -d -m 32 -p 11211 -u root
去掉了 -l 参数,这样在没有指定连接到memcached服务器的IP地址时就允许任一IP来连接。问题终于解决了
设置session用memcache来存储
发布于:2014-1-9 16:42 作者:admin 浏览:1667 分类:系统架构方法I: 在 php.ini 中全局设置
- session.save_handler = memcache
- session.save_path = "tcp://127.0.0.1:11211"
方法II: 某个目录下的 .htaccess
- php_value session.save_handler "memcache"
- php_value session.save_path "tcp://127.0.0.1:11211"
方法III: 再或者在某个一个应用中
- ini_set("session.save_handler", "memcache");
- ini_set("session.save_path", "tcp://127.0.0.1:11211");
使用多个 memcached server 时用逗号","隔开,并且和 Memcache::addServer() 文档中说明的一样,可以带额外的参数"persistent"、"weight"、"timeout"、"retry_interval" 等等,类似这样的:"tcp://host1:port1?persistent=1&weight=2,tcp://host2:port2" 。
如果安装的PECL是memcached(依赖libmemcached库的那个扩展),则配置应为
- ini_set("session.save_handler", "memcached"); // 是memcached不是memcache
- ini_set("session.save_path", "127.0.0.1:11211"); // 不要tcp:[/b]
代码例子(不依赖libmemcached库的那个)
- <?php
- session_start();
- if (!isset($_SESSION['TEST'])) {
- $_SESSION['TEST'] = time();
- }
- $_SESSION['TEST3'] = time();
- print $_SESSION['TEST'];
- print "<br><br>";
- print $_SESSION['TEST3'];
- print "<br><br>";
- print session_id();
- ?>
用 sessionid 去 memcached 里查询一下:
- <?php
- $memcache = memcache_connect('localhost', 11211);
- var_dump($memcache->get('19216821213c65cedec65b0883238c278eeb573e077'));
- ?>
PHP共享SESSION之NFS篇
发布于:2014-1-9 15:50 作者:admin 浏览:2295 分类:系统架构1.环境3台机器 192.168.1.10(负载均衡机器) 192.168.1.11(NFS服务器) 192.168.1.20(WEB服务器1) 192.168.1.30(WEB服务器2) 2. 负载均衡机器配置 http { upstream test{ server 192.168.1.20:80 weight=2; server 192.168.1.30:80; server 192.168.1.50:80 backup; } location / { proxy_pass http://test; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 3. NFS服务器配置 vi /etc/exports /var/www/session/ 192.168.1.*(rw,no_root_squash) //设置共享目录 4. 配置WEB1服务器 4.1 挂载NFS目录 mount -t nfs 192.168.1.11:/var/www/session/ /mnt/session/ 4.2 编写session测试程序。(Session赋值) vi /var/www/html/session.php <?php session_start(); //开始记录SESSION。 session_save_path('/mnt/session/'); //设置SESSION存储路径为NFS方式 echo "SessionID=".session_id()."<br>"; //输出SessionID $_SESSION['myip']='192.168.1.20'; //设置Sesssion值 var_dump($_SESSION); //输出Sesssion值 ?> 5. 配置WEB2服务器 5.1 挂载NFS目录 mount -t nfs 192.168.1.11:/var/www/session/ /mnt/session/ 5.2 编写session测试程序。(仅仅用来读数据) vi /var/www/html/session.php <?php session_start(); //开始记录SESSION。 session_save_path('/mnt/session/'); //设置SESSION存储路径为NFS方式 echo "SessionID=".session_id()."<br>"; //输出SessionID var_dump($_SESSION); //输出Sesssion值 ?> 6. 注意权限问题(nginx可写可读) chown -R nginx:nginx /mnt/session/ chmod 0777 -R /mnt/session/ 7. 测试成果. 7.1 不共享SESSION方案 在测试代码中 //session_save_path('/mnt/session/'); 表示不共享SESSION。 测试结果: WEB1服务器结果:SessionID=cb3cud0jv5m2949ljapib2sgo3 array(1) { ["myip"]=> string(12) "192.168.1.20" } WEB2服务器结果:SessionID=cb3cud0jv5m2949ljapib2sgo3 array(1) {} 7.2 共享SESSION方案 session_save_path('/mnt/session/'); 表示共享SESSION,把两个服务器的SESSION都激励在NFS服务器上。 测试结果: WEB1服务器结果:SessionID=cb3cud0jv5m2949ljapib2sgo3 array(1) { ["myip"]=> string(12) "192.168.1.20" } WEB2服务器结果:SessionID=cb3cud0jv5m2949ljapib2sgo3 array(1) { ["myip"]=> string(12) "192.168.1.20" } 7.3 测试总结: 采用方案2,即可实现集群共享SESSION。
关于虚拟机网卡的问题
发布于:2014-1-9 11:28 作者:admin 浏览:1726 分类:Linux关于虚拟机网卡的问题。
关于配置IP的问题
http://www.jb51.net/LINUXjishu/64000.html
关于DNS上网的问题
http://www.cnblogs.com/happyhotty/articles/2539951.html
另DNS上网设置的问题。
问题1: 编辑 vi /etc/resolv.conf
增加: nameserver 192.168.1.1
然后重新启动 service network restart
发现:/etc/resolv.conf 保存的数据没有。
解决办法:
cd /etc/sysconfig/network-scripts/
vi ifcfg-eth0
增加:DNS1=192.168.1.1 保存
然后重新启动 service network restart
发现:/etc/resolv.conf 配置正确。
终于可以上网了。
PHP的SESSION机制
发布于:2014-1-9 9:11 作者:admin 浏览:1829 分类:PHP1.session.save_handler = files 1. session_start() 1. session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中, PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的, 但是有的系统是 session.gc_probability = 0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。 session.gc_probability = 1 session.gc_divisor = 1000 session.gc_maxlifetime = 1440//过期时间 默认24分钟
//概率是 session.gc_probability/session.gc_divisor 结果 1/1000, //不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。 session.save_path = //好像不同的系统默认不一样,有一种设置是 "N;/path" //这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本 2. session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值, 这个值可以从php.ini找到 session.name = PHPSESSID //默认值PHPSESSID 3. 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端. 相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的, 这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。 setcookie(session_name(), session_id(), session.cookie_lifetime,//默认0 session.cookie_path,//默认'/'当前程序跟目录下都有效 session.cookie_domain,//默认为空 ) 4. 如果存在那么session_id = $_COOKIE[session_name]; 然后去session.save_path指定的文件夹里去找名字为'SESS_' . session_id()的文件. 读取文件的内容反序列化,然后放到$_SESSION中 * 2. 为$_SESSION赋值 比如新添加一个值$_SESSION['test'] = 'blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候, 用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源. 这个阶段有可能执行更改session_id的操作, 比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上, 比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time() - 42000, '/');//旧session cookie过期 } session_regenerate_id();//这一步会生成新的session_id //session_id()返回的是新的值 3.写入SESSION操作 在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在, 可能需要创建新的文件。 4. 销毁SESSION SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期, 比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多, 4.1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行 4.2. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。 4.3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id 2.session.save_handler = user 用户自定义session处理机制,更加直观 * session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); 1.session_start(), 执行open($save_path, $session_name)打开session操作句柄 $save_path 在session.save_handler = files的情况下它就是session.save_path, 但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE 执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。 * 2.脚本执行结束 执行write($id, $sess_data) //两个参数,很简单 * 3.假如用户需要session_destroy() 先执行destroy.在执行第2步 一个实际例子: //SESSION初始化的时候调用 function open($save_path, $session_name) { global $sess_save_path; $sess_save_path = $save_path; return(true); } //关闭的时候调用 function close() { return(true); } function read($id) { global $sess_save_path; $sess_file = "$sess_save_path/sess_$id"; return (string) @file_get_contents($sess_file); } //脚本执行结束之前,执行写入操作 function write($id, $sess_data) { echo "sdfsf"; global $sess_save_path; $sess_file = "$sess_save_path/sess_$id"; if ($fp = @fopen($sess_file, "w")) { $return = fwrite($fp, $sess_data); fclose($fp); return $return; } else { return(false); } } function destroy($id) { global $sess_save_path; $sess_file = "$sess_save_path/sess_$id"; return(@unlink($sess_file)); } function gc($maxlifetime) { global $sess_save_path; foreach (glob("$sess_save_path/sess_*") as $filename) { if (filemtime($filename) + $maxlifetime < time()) { @unlink($filename); } } return true; }