当前位置: 操作系统/服务器>linux
本页文章导读:
▪nginx的FastDFS分布式存储模块测试方法
再回过头来看FastDFS更新很快,还看到fastdfs-nginx-module_v1.01.tar.gz nginx模块,所以今天在一台测试机上测试了·测试几天看稳定不稳定,在考虑换掉浪费资源的 lustre !
环境:storage1:192.168.6.100.........
▪Nginx geoip模块实现地区性负载均衡
相信做过awstats的都用过开源的geoip.dat ip数据库,刚好nginx wiki上有geoip 模块,这样就可以实现地区性的负载均衡,但是maxmind 的ip数据库对中国的支持不算太好,不过现在也不错了~
参考.........
▪nginx 目录密码保护的设置方法
那么 在 nginx.conf 文件中对应的 server 段中 添加 location ^~ /test/ { auth_basic TEST-Login; auth_basic_user_file /root/htpasswd; 再在 root 的主目录中 /root/ 创建一个新文件 htpasswd 此文件的书写格式是 用户名:密.........
[1]nginx的FastDFS分布式存储模块测试方法
来源: 互联网 发布时间: 2013-12-24
再回过头来看FastDFS更新很快,还看到fastdfs-nginx-module_v1.01.tar.gz nginx模块,所以今天在一台测试机上测试了·测试几天看稳定不稳定,在考虑换掉浪费资源的 lustre !
环境:
storage1:192.168.6.100 storage2:192.168.6.101 tracker:192.168.6.102
1. 在每个机器上,下载安装 FastDFS
nginx $> wget http://fastdfs.googlecode.com/files/FastDFS_v2.04.tar.gz # 解压 nginx $> tar zxvf FastDFS_v2.04.tar.gz nginx $> cd FastDFS # 因为我是给nginx添加fastdfs模块,所以不需要fastdfs支持 http 所以我就不需要去掉 #WITH_HTTPD=1 前的注释了,直接编译 nginx $> ./make.sh nginx $> ./make.sh install
2.修改tracker 和 storage 的配置文件
# tracker 的修改
tracker $> vim /etc/fdfs/tracker.conf
disabled=false #配置是否生效 bind_addr=192.168.6.102 #绑定IP port=22122 #服务端口 connect_timeout=30 #连接超时时间 network_timeout=60 # tracker server的网络超时,单位为秒。 base_path=/home/yangzi #目录地址,里面会创建data(存放存储服务器信息)、logs,日志文件 max_connections=256 #系统提供服务最大连接数 work_threads=4 #线程数,通常设置CPU数 store_lookup=2 上传组(卷) 的方式 0:轮询方式 1: 指定组 2: 平衡负载(选择最大剩余空间的组(卷)上传) 这里如果在应用层指定了上传到一个固定组,那么这个参数被绕过 store_group=group1 当上一个参数设定为1 时 (store_lookup=1,即指定组名时),必须设置本参数为系统中存在的一个组名。如果选择其他的上传方式,这个参数就没有效了 store_server=0 选择哪个storage server 进行上传操作(一个文件被上传后,这个storage server就相当于这个文件的storage server源,会对同组的storage server推送这个文件达到同步效果) # 0: 轮询方式 # 1: 根据ip 地址进行排序选择第一个服务器(IP地址最小者) # 2: 根据优先级进行排序(上传优先级由storage server来设置,参数名为upload_priority) store_path=0 选择storage server 中的哪个目录进行上传。storage server可以有多个存放文件的base path(可以理解为多个磁盘)。 # 0: 轮流方式,多个目录依次存放文件 # 2: 选择剩余空间最大的目录存放文件(注意:剩余磁盘空间是动态的,因此存储到的目录或磁盘可能也是变化的) download_server=0 选择哪个 storage server 作为下载服务器 # 0: 轮询方式,可以下载当前文件的任一storage server # 1: 哪个为源storage server 就用哪一个 (前面说过了这个storage server源 是怎样产生的) 就是之前上传到哪个storage server服务器就是哪个了 reserved_storage_space = 4GB storage server 上保留的空间,保证系统或其他应用需求空间(指出 如果同组的服务器的硬盘大小一样,以最小的为准,也就是只要同组中有一台服务器达到这个标准了,这个标准就生效,原因就是因为他们进行备份) log_level=info #选择日志级别 run_by_group= #操作系统运行FastDFS的用户组 run_by_user= #操作系统运行FastDFS的用户 allow_hosts=* #可以连接到此 tracker server 的ip范围(对所有类型的连接都有影响,包括客户端,storage server) sync_log_buff_interval = 10 # 同步或刷新日志信息到硬盘的时间间隔,单位为秒 # 注意:tracker server 的日志不是时时写硬盘的,而是先写内存。 check_active_interval = 120 # 检测 storage server 存活的时间隔,单位为秒。 # storage server定期向tracker server 发心跳,如果tracker server在一个check_active_interval内还没有收到storage server的一次心跳,那边将认为该storage server已经下线。所以本参数值必须大于storage server配置的心跳时间间隔。通常配置为storage server心跳时间间隔的2倍或3倍。 thread_stack_size = 64KB # 线程栈的大小。FastDFS server端采用了线程方式。更正一下,tracker server线程栈不应小于64KB,不是512KB。 # 线程栈越大,一个线程占用的系统资源就越多。如果要启动更多的线程(V1.x对应的参数为max_connections, V2.0为work_threads),可以适当降低本参数值。 storage_ip_changed_auto_adjust = true # 这个参数控制当storage server IP地址改变时,集群是否自动调整。注:只有在storage server进程重启时才完成自动调整。 storage_sync_file_max_delay = 86400 # V2.0引入的参数。存储服务器之间同步文件的最大延迟时间,缺省为1天。根据实际情况进行调整 storage_sync_file_max_time = 300 # V2.0引入的参数。存储服务器同步一个文件需要消耗的最大时间,缺省为300s,即5分钟。 http.disabled=true # HTTP服务是否不生效 当然编译的时候我已经把 with_httpd宏去掉了, http.server_port=80 # HTTP服务端口 # 下列参数只有 开启http服务才有用 http.check_alive_interval=30 http.check_alive_type=tcp http.check_alive_uri=/status.html http.need_find_content_type=true
#两台 storage.conf的修改
storage $> vim /etc/fdfs/storage.conf
disabled=false #配置是否生效 group_name=group1 #storage所在组(卷) bind_addr=192.168.6.100 # 绑定IP,另一太 storage IP为 192.168.6.101 client_bind=true #bind_addr通常是针对server的。当指定bind_addr时,本参数才有效。 port=23000 # 是storage 服务端口 connect_timeout=30 # 连接超时时间,针对socket套接字函数connect network_timeout=60 # storage server 网络超时时间,单位为秒。 heart_beat_interval=30 # 心跳间隔时间,单位为秒 stat_report_interval=60 # storage server向tracker server报告磁盘剩余空间的时间间隔,单位为秒。 base_path=/home/eric # base_path 目录地址,根目录必须存在 子目录会自动生成 # 会产生data(数据存储地方)、 logs日志文件 max_connections=256 # 最大连接数 buff_size = 256KB # 设置队列结点的buffer大小。 work_threads=4 # 工作线程数 disk_rw_separated = true # 磁盘IO读写是否分离,缺省是分离的。 disk_reader_threads = 1 # 针对单个存储路径的读线程数,缺省值为1 disk_writer_threads = 1 # 针对单个存储路径的写线程数,缺省值为1 sync_wait_msec=200 # 同步文件时,如果从binlog中没有读到要同步的文件,休眠N毫秒后重新读取,0表示不休眠,立即再次尝试读取。 sync_interval=0 # 同步上一个文件后,再同步下一个文件的时间间隔,单位为毫秒,0表示不休眠,直接同步下一个文件。 sync_start_time=00:00 sync_end_time=23:59 # 允许系统同步的时间段 (默认是全天) 。一般用于避免高峰同步产生一些问题而设定,相信sa都会明白。 write_mark_file_freq=500 # 把storage的mark文件定期同步到磁盘的时间间隔,单位为秒 store_path_count=1 # 存放文件时storage server支持多个路径(例如磁盘)。这里配置存放文件的基路径数目,通常只配一个目录。 store_path0=/home/eric # 逐一配置store_path个路径,索引号基于0。注意配置方法后面有0,1,2 ......,需要配置0到store_path - 1。 # 如果不配置base_path0,那边它就和base_path对应的路径一样。 subdir_count_per_path=32 # FastDFS存储文件时,采用了两级目录。这里配置存放文件的目录个数 tracker_server=192.168.6.188:22122 # tracker_server 的列表 要写端口的哦 log_level=info # 日志级别 run_by_group= # 运行storage 用户组 run_by_user= # 运行storage 用户 allow_hosts=* # 允许连接IP列表 file_distribute_path_mode=0 # 文件在data目录下分散存储策略。 # 0: 轮流存放 # 1: 随机存储 file_distribute_rotate_count=100 # 当上面的参数file_distribute_path_mode配置为0(轮流存放方式)时,本参数有效。 #当一个目录下的文件存放的文件数达到本参数值时,后续上传的文件存储到下一个目录中 fsync_after_written_bytes=0 # 当写入大文件时,每写入N个字节,调用一次系统函数fsync将内容强行同步到硬盘。0表示从不调用fsync sync_log_buff_interval=10 # 同步或刷新日志信息到硬盘的时间间隔,单位为秒 sync_binlog_buff_interval=60 # 同步binglog(更新操作日志)到硬盘的时间间隔,单位为秒 sync_stat_file_interval=300 # 把storage的stat文件同步到磁盘的时间间隔,单位为秒。 thread_stack_size=512KB # 线程栈的大小。FastDFS server端采用了线程方式。 # 线程栈越大,一个线程占用的系统资源就越多。 upload_priority=10 本storage server作为源服务器,上传文件的优先级,可以为负数。值越小,优先级越高。这里就和 tracker.conf 中store_server= 2时的配置相对应了 if_alias_prefix= check_file_duplicate=0 # 是否检测上传文件已经存在。如果已经存在,则不存在文件内容,建立一个符号链接以节省磁盘空间。 结合 fastdfh使用的。 1是检测,0是不检测,我们不使用fastdfh 当然 0 key_namespace=FastDFS # 当上个参数设定为1 或 yes时 (true/on也是可以的) , 在FastDHT中的命名空间 keep_alive=0 # 与FastDHT servers 的连接方式 (是否为持久连接) # 下面是http的配置了就不多说了 http.disabled=true http.domain_name= http.server_port=80 http.trunk_size=256KB http.need_find_content_type=true
3.建立tracker 和 storage 的根目录
# tracker tracker $> mkdir -p /home/eric # storage storage $> mkdir -p /home/yangzi
4.在 一台storage上下载,比如我在 192.168.6.100上下载 nginx 和 fastdfs-nginx-module 模块
storage $> wget http://www.nginx.org/download/nginx-0.8.53.tar.gz storage $> svn export http://fastdfs-nginx-module.googlecode.com/svn/trunk/ fastdfs-nginx-module-read-only
5.编译安装 nginx 附带 fastdfs-nginx-module 模块
storage $> tar zxvf nginx-0.8.53.tar.gz storage $> cd nginx-0.8.53 storage $> ./configure --prefix=/usr/local/nginx --add-module=/root/fastdfs-nginx-module-read-only/src storage $> make storage $> make install # 拷贝mod_fastdfs.conf 到/etc/fdfs/ storage $> cp /root/fastdfs-nginx-module-read-only/src/mod_fastdfs.conf /etc/fdfs/
6.修改 nginx 配置文件增加
storage $> vim /usr/local/nginx/conf/nginx.conf
# 增加一下
location /M00 {
alias /home/eric/data;
ngx_fastdfs_module;
}
7. 给 storage 的存储目录做一个软连接
storage $> ln -s /home/yangzi/data /home/yangzi/data/M00
8. 启动两台 storage 和tracker nginx
# 启动 tracker tracker $> /usr/local/bin/fdfs_trackerd /etc/fdfs/tracker.conf # 启动 storage storage $> /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf # 启动 storage2 storage2 $> /usr/local/bin/fdfs_storaged /etc/fdfs/storage.conf #在 storage启动 nginx storage $> /usr/local/nginx/sbin/nginx
9、上传文件测试。
# 修改客户端配置文件
storage $> vim /etc/fdfs/client.conf connect_timeout=30 network_timeout=60 base_path=/home/yangzi tracker_server=192.168.6.102:22122 log_level=info #下面参数无所谓了反正没有用到http 服务 http.tracker_server_port=80
storage $> vim a.html test FastDFS!
storage $> /usr/local/bin/fdfs_test /etc/fdfs/client.conf upload a.html This is FastDFS client test program v2.04 Copyright (C) 2008, Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU General Public License V3, which may be found in the FastDFS source kit. Please visit the FastDFS Home Page http://www.csource.org/ for more detail. base_path=/home/yangzi, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0 tracker_query_storage_store_list_without_group: server 1. group_name=group1, ip_addr=192.168.6.100, port=23000 group_name=group1, ip_addr=192.168.6.100, port=23000 storage_upload_by_filename group_name=group1, remote_filename=M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73.html source ip address: 192.168.6.100 file timestamp=2010-12-02 17:16:03 file size=14 file crc32=674197143 file url: http://192.168.6.100/group1/M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73.html storage_upload_slave_by_filename group_name=group1, remote_filename=M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73_big.html source ip address: 192.168.6.100 file timestamp=2010-12-02 17:16:03 file size=14 file crc32=674197143 file url: http://192.168.6.100/group1/M00/00/00/wKgGvEz3Y9MAAAAAAAAADigvbpc73_big.html
打开IE浏览器访问:
本文出自 “linuxer” 博客,请务必保留此出处http://deidara.blog.51cto.com/400447/440175
[2]Nginx geoip模块实现地区性负载均衡
来源: 互联网 发布时间: 2013-12-24
相信做过awstats的都用过开源的geoip.dat ip数据库,刚好nginx wiki上有geoip 模块,这样就可以实现地区性的负载均衡,但是maxmind 的ip数据库对中国的支持不算太好,不过现在也不错了~
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
geoip_city GeoLiteCity.dat;
server {
listen 80;
server_name 75.125.197.200;
root html;
index index.html index.htm;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
参考文章:http://wiki.nginx.org/NginxHttpGeoIPModule
说下我的环境,我有一台美国linux 服务器,一台美国的windows 2003 ,一台本的XP。机器,其他测试用户都是,QQ群里的朋友,好了开始测试
linux : 75.125.x.x //美国
win2003 : 74.55.x.x // 美国
XP :localhost // 北京
测试转发,美国用户~转发到 www.google.cn
电信转发到 我的一台 公网的 apache 默认页面
网通转发到 我的一台 公网业务服务器!!
1.下载安装nginx.
shell $> get http://sysoev.ru/nginx/nginx-0.8.13.tar.gz
shell $> tar zxvf nginx-0.8.13.tar.gz
shell $> cd nginx-0.8.13
shell $>apt-get install libgeoip-dev
shell $> ./configure --prefix=/usr/local/nginx --with-http_flv_module --user=www --group=www --with-http_gzip_static_module --with-http_geoip_module
shell $> make
shell $> make install
2.下载GeoLiteCity.dat.gz 数据库~
shell $> wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
shell $> gzip -d GeoLiteCity.dat.gz
shell $> mv GeoLiteCity.dat /usr/local/nginx/conf/GeoLiteCity.dat
3.修改配置文件实现 地区性质负载
shell $> cd /usr/local/nginx/conf
shell $> cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
geoip_city GeoLiteCity.dat;
upstream wangtong {
server 59.151.X.X;
}
upstream dianxin {
server 75.125.X.X;
}
upstream USA {
server www.google.cn;
}
server 59.151.X.X;
}
upstream dianxin {
server 75.125.X.X;
}
upstream USA {
server www.google.cn;
}
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 75.125.197.200;
root html;
index index.html index.htm;
location / {
if ($geoip_region ~ "(01|02|03|04|06|07|11|13|14|15|16|21|23|29|30|31|32|33)") {
proxy_pass http://dianxin$request_uri;
}
if ($geoip_region ~ "(05|08|09|10|12|17|18|19|20|24|25|26)") {
proxy_pass http://wangtong$request_uri;
}
if ($geoip_city_country_code ~ "US") {
proxy_pass http://USA$request_uri;
}
if ($geoip_region ~ "(01|02|03|04|06|07|11|13|14|15|16|21|23|29|30|31|32|33)") {
proxy_pass http://dianxin$request_uri;
}
if ($geoip_region ~ "(05|08|09|10|12|17|18|19|20|24|25|26)") {
proxy_pass http://wangtong$request_uri;
}
if ($geoip_city_country_code ~ "US") {
proxy_pass http://USA$request_uri;
}
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
4.测试,用不同地方的机器做测试~
我是北京用户,访问
我是北京用户访问的是默认页面是因为我没有 把 22 数字填加到 配置文件里。我是为了方便测试!大家要是用在生产上要把 22加到
if ($geoip_region ~ "(05|08|09|10|12|17|18|19|20|24|25|26)")
没有匹配到,就访问了默认页面~~
成都朋友帮忙访问:
广州的朋友帮忙访问:
河北朋友帮忙访问:
美国 win2003 访问:
直接访问 电信的 服务器 和 网通服务器
59.151.X.X; 75.125.X.X;
直接访问 网通 59.151.X.X
直接访问 电信服务器 75.125.X.X
下面我来解释一下
if ($geoip_region ~ "(01|02|03|04|06|07|11|13|14|15|16|21|23|29|30|31|32|33)")
这些数字代表的是中国省份地区~~
表如下:
CN,01,"Anhui"
CN,02,"Zhejiang"
CN,03,"Jiangxi"
CN,04,"Jiangsu"
CN,05,"Jilin"
CN,06,"Qinghai"
CN,07,"Fujian"
CN,08,"Heilongjiang"
CN,09,"Henan"
CN,10,"Hebei"
CN,11,"Hunan"
CN,12,"Hubei"
CN,13,"Xinjiang"
CN,14,"Xizang"
CN,15,"Gansu"
CN,16,"Guangxi"
CN,18,"Guizhou"
CN,19,"Liaoning"
CN,20,"Nei Mongol"
CN,21,"Ningxia"
CN,22,"Beijing"
CN,23,"Shanghai"
CN,24,"Shanxi"
CN,25,"Shandong"
CN,26,"Shaanxi"
CN,28,"Tianjin"
CN,29,"Yunnan"
CN,30,"Guangdong"
CN,31,"Hainan"
CN,32,"Sichuan"
CN,33,"Chongqing"
CN,02,"Zhejiang"
CN,03,"Jiangxi"
CN,04,"Jiangsu"
CN,05,"Jilin"
CN,06,"Qinghai"
CN,07,"Fujian"
CN,08,"Heilongjiang"
CN,09,"Henan"
CN,10,"Hebei"
CN,11,"Hunan"
CN,12,"Hubei"
CN,13,"Xinjiang"
CN,14,"Xizang"
CN,15,"Gansu"
CN,16,"Guangxi"
CN,18,"Guizhou"
CN,19,"Liaoning"
CN,20,"Nei Mongol"
CN,21,"Ningxia"
CN,22,"Beijing"
CN,23,"Shanghai"
CN,24,"Shanxi"
CN,25,"Shandong"
CN,26,"Shaanxi"
CN,28,"Tianjin"
CN,29,"Yunnan"
CN,30,"Guangdong"
CN,31,"Hainan"
CN,32,"Sichuan"
CN,33,"Chongqing"
GeoLiteCity.dat 更多变量请看 wiki 我这里只用到两个变量一个是$geoip_region 一个是$geoip_city_country 第一个是 地区,第二个变量是国家只取 两个字母简写!
geoip_city
syntax: geoip_city path/to/db.dat;
default: none
context: http
The directive indicates the path to the .dat file used for determining countries, regions and cities from IP-address of the client. When set the module makes available the following variables:
$geoip_city_country_code; - two-letter country code, for example, "RU", "US". $geoip_city_country_code3; - three-letter country code, for example, "RUS", "USA". $geoip_city_country_name; - the name of the country, for example, "Russian Federation", "United States". $geoip_region; - the name of region (province, region, state, province, federal land, and the like), for example, "Moscow City", "DC". $geoip_city; - the name of the city, for example, "Moscow", "Washington". $geoip_postal_code; - postal code. PS: 我只是根据南方电信,北方网通来区分的~~ 我是北京用户访问的是默认页面是因为我没有 把 22 数字填加到 配置文件里。我是为了方便测试!大家要是用在生产上要把 22加到
if ($geoip_region ~ "(05|08|09|10|12|17|18|19|20|24|25|26)")
网通里~ 不过 开源的 geoip 还是有些不准确的~~~只能给他 75 分~~
本文出自 “linuxer” 博客,请务必保留此出处http://deidara.blog.51cto.com/400447/198469
本文出自 “linuxer” 博客,请务必保留此出处http://deidara.blog.51cto.com/400447/198469
[3]nginx 目录密码保护的设置方法
来源: 互联网 发布时间: 2013-12-24
那么 在 nginx.conf 文件中对应的 server 段中 添加
location ^~ /test/ {
auth_basic TEST-Login;
auth_basic_user_file /root/htpasswd;
再在 root 的主目录中 /root/ 创建一个新文件 htpasswd
此文件的书写格式是
用户名:密码
每行一个账户
并且 密码必须使用函数 crypt(3) 加密
官方档说 可以用 Apache 的 htpasswd 工具来创建密码文件
当然也可以使用perl 创建密码文件 新建 一个 pw.pl 文件 其内容:
代码如下:
#!/usr/bin/perl
use strict;
my $pw=$ARGV[0] ;
print crypt($pw,$pw).”n”;
然后执行 chmod +x pw.pl
./pw.pl password
papAq5PwY/QQM
papAq5PwY/QQM 就是password 的crypt()密码
然后 将上面用 perl 生成的 加密后的密码
按照
用户名:密码
的格式写到 htpasswd 文件中
这样既完成了设置
如果 不用
^~ /test/
而用
/test
的话 那么 将只能对目录进行验证 直接访问其下的文件 将不会弹出登录验证
还有 htpasswd 这个文件的名字可以 自己随意设置
用户名 也是 自己随意设置 无需加密
密码必须使用函数 crypt(3) 加密
最新技术文章: