HTML5-Geolocation

HTML5 Geolocation API 封装在 navigator.geolocation 属性里,各种接口即是 navigator.geolocation 对象的方法。

1、getCurrentPosition()

getCurrentPosition 用来获取用户当前的位置信息,该方法带有三个参数:

1、successCallback:成功获取用户位置信息后的回调函数
2、errorCallback:获取用户位置信息失败时的回调函数
3、positionOptions:可选。获取用户位置信息的配置参数

i)successCallback
successCallback 函数带有一个参数,对象字面量格式,表示获取到的用户位置数据。该对象包含两个属性 coords 和 timestamp。其中 coords 属性包含以下7个值:

1、accuracy:精确度
2、latitude:纬度
3、longitude:经度
4、altitude:海拔
5、altitudeAcuracy:海拔高度的精确度
6、heading:朝向
7、speed:

ii)errorCallback和 successCallback 函数一样带有一个参数,对象字面量格式,表示返回的错误代码。它包含以下两个属性:

1、message:错误信息
2、code:错误代码。

其中错误代码包括以下四个值:

0 — UNKNOW_ERROR:表示不包括在其它错误代码中的错误,这里可以在 message 中查找错误信息
1 — PERMISSION_DENIED:表示用户拒绝浏览器获取位置信息的请求
2 — POSITION_UNAVALIABLE:表示网络不可用或者连接不到卫星
3 — TIMEOUT:表示获取超时。必须在options中指定了timeout值时才有可能发生这种错误

iii)positionOptions
positionOptions 的数据格式为JSON,有三个可选的属性:

1、enableHighAcuracy — 布尔值: 表示是否启用高精确度模式,如果启用这种模式,浏览器在获取位置信息时可能需要耗费更多的时间。
2、timeout — 整数: 表示浏览需要在指定的时间内获取位置信息,否则触发errorCallback。
3、maximumAge — 整数/常量: 表示浏览器重新获取位置信息的时间间隔。

2、watchPosition()
watchPosition 的三个参数和 getCurrentPosition 完全一样,不同的是 watchPosition 是设计用来实时获取\检测用户的位置信息。它像一个追踪器一样时刻监视用户的位置,只要发生变化,浏览器就会触发 watchPosition 的回调函数。成功则触发 successCallback ,否则触发 errorCallback。另外和  getCurrentPosition 不同的地方就是有返回值。类似于延迟函数/间隔函数(setTimeout/setInterval)那样,返回一个 ID ,可以被清除掉。这里是用接下来介绍的 clearWatch 清除。

3、clearWatch()

接受一个 watchPosition 返回的 ID,功能是清除对用户位置的循环监视。

一款不错的Mysql Proxy–Amoeba

amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。

amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的 Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。

amoeba主要解决以下问题:

a). 数据切分后复杂数据源整合
b). 提供数据切分规则并降低数据切分规则给数据库带来的影响
c). 降低数据库与客户端连接
d). 读写分离路由

PS:网上看到文章说Amoeba比较占内存,有待考证。

参考:http://docs.hexnova.com/amoeba/

VSFTP安装配置

VSFTP是一款相当不错的Linux FTP服务。管理起来很方便。

1. 安装

使用chkconfig –-list vsftp来查看是否装有vsftpd服务;
使用yum命令直接安装:yum -y install vsftpd
然后为它创建日志文件:touch /var/log/vsftpd.log
这样简单的两个命令就完成了vsftp的安装,但是如果你现在想这样ftp://your_ip来访问的话,那还不行,还需要配置权限!

2. 启动与配置自启动

使用chkconfig –-list vsftp来查看vsftpd服务启动项情况;
如果看到的是如下显示的结果:
vsftpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
服务全部都是off的,注意这里的off表示的是服务器启动的时候是否会自启动服务,我们使用如下命令来配置其自启动:

chkconfig –level 2345 vsftpd on #2345对应的是上面对应的0-6项

查看与管理ftp服务:
启动ftp服务:service vsftpd start
查看ftp服务状态:service vsftpd status
重启ftp服务:service vsftpd restart
关闭ftp服务:service vsftpd stop

3. 配置vsftp服务

编辑/etc/vsftpd/vsftpd.conf文件,配置vsftp服务:
#vi /etc/vsftpd/vsftpd.conf

3.1 编辑修改如下项目:

anonymous_enable=NO #设定不允许匿名访问
local_enable=YES #设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问。
chroot_list_enable=YES #使用户不能离开主目录
xferlog_file=/var/log/vsftpd.log #设定vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来
ascii_upload_enable=YES #允许使用ASCII模式上传
ascii_download_enable=YES #设定支持ASCII模式的上传和下载功能。
pam_service_name=vsftpd #PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证

#以下这些是关于Vsftpd虚拟用户支持的重要CentOS FTP服务配置项目。默认vsftpd.conf中不包含这些设定项目,需要自己手动添加RHEL/CentOS FTP服务配置。
guest_enable=YES #设定启用虚拟用户功能。
guest_username=vsftp #指定虚拟用户的宿主用户。-RHEL/CentOS中已经有内置的vsftp用户了,没有通过useradd vsftp    passwd vsftp新建
user_config_dir=/etc/vsftpd/vuser_conf #设定虚拟用户个人vsftp的RHEL/CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)

3.2 创建chroot list,将ftp用户加入其中:

touch /etc/vsftpd/chroot_list
echo vsftp >> /etc/vsftpd/chroot_list

3.3 进行认证:

首先,安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包。
yum install db4 db4-utils
然后,创建用户密码文本vi /etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码
ftpuser1
ftppass1
ftpuser2
ftppass2
接着,.生成虚拟用户认证的db文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db
随后,编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句
再增加以下两句
auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd
最后,创建虚拟用户个性RHEL/CentOS FTP服务文件
mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/ftpuser1
内容如下:

local_root=/opt/var/ftp1 虚拟用户的根目录(根据实际修改)
write_enable=YES 可写
anon_umask=022 掩码
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

4. 为目录附权限并重启动vsftp服务:

mkdir /opt/var/ftp/ftpuser1
chmod  777 /opt/var/ftp/ftpuser1
service vsftpd restart

git在linux上的安装配置

以下软件将被安装
Git
Gitosis
user1可以对于test仓库有读写权限,user2对于test仓库只有可读权限。

1. 增加yum repository

在CentOS中,在不增加repository情況下是找不到Git的套件的,所以需要增加一個repository。

rpm -Uvh http://yum.beta.gist.com/gist/centos/5/RPM/epel-release-5-3.noarch.rpm

2. 安裝Git, git-web以及gitosis

yum -y install git gitweb gitosis

3. 配置Git账号

useradd git # 使用"git"作為管理Git的用戶
passwd git # 更改"git"密码

4. 配置Gitosis

su - git # 使用"git"操作
cd ~
# Gitosis需要设置name和email才能进行commit动作
git config --global user.name "用戶显示的名称"
git config --global user.email "用戶邮件地址"
ssh-keygen -t rsa # "git"用户作为Git服务器的管员,#用它來生成public key

5. 初始化Gitosis

su – git
gitosis-init < ~/.ssh/id_rsa.pub

#Gitosis管理一个特殊的 Git 仓库。你只需要在这个特殊仓库内做好相应的设定,然后推送到服务器上,Gitosis 就会随之改变运行策略. #这样该公钥的拥有者就能修改用于配置 Gitosis 的那个特殊 Git 仓库了。接下来,需要手工对该仓库中的 post-update 脚本加上可执行权限:

 chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update 

6. 配置git服务选项,取出”gitosis-admin” repository

su - git
cd ~ 
git clone git@SERVER:/gitosis-admin.git # 取出儲存權限的repository 
#修改gitosis.conf配置文件 
su - git 
cd ~ 
vi ./gitosis-admin/gitosis.conf 
[gitosis] loglevel=DEBUG #增加这一句将开启debug模式显示更多的信息 
# 增加 
[group rw] 
writable = test 
members = user1 
[group rd] 
readonly = test 
members = user2 
# 格式 
[group 群组名称] 
writable = 项目名称 
members = 用戶 (用空白分开不同的用户) 
#将配置文件推到服务器上 
cd gitosis-admin 
git add . 
git commit -am "config1" 
git push origin master # 如果SSH port不是22 -> git push ssh://git@SERVER:SSH_PORT/gitosis-admin.git master

7. 建立第一个版本的”test” project

su - git
cd ~/repositories
mkdir test.git
chmod 750 test.git
cd test.git
git init --bare # 建立一個空的repository

在client上新建user1 user2用户

useradd user1
passwd user1
useradd user2
passwd user2

先测试是否可以clone

su – user1
cd ~
git clone git@192.168.1.245:repositories/test.git #!注意地址我这245是服务器的地址

提示将一个空仓库拉下来了

cd test/
echo "A" &gt;hello
git add .
git commit -am “162:user1:1” # 要先设定user.email和user.name,
git push origin master #推到服务器的版本库里

接着用git2测试落下test看有无user1添加的hello文件

su – user2
cd ~
git clone git@192.168.1.245:repositories/test.git

ls显示已经有hello文件了

8配置用户权限
建立user1,user2的公钥和密匙(默认是2048位的)
su – user1
ssh-keygen -t rsa
su – user2
ssh-keygen -t rsa

将user1和user2的公钥复制到git配置文件夹的keydir中
su – git #在服务器上操作
cd ~/gitosis-admin

vim keydir/ser1.pub
vim keydir/user2.pub #将公匙复制进去
git add keydir/user*
git commit -am “config3″
git push origin master

注意:将密匙加入后user1 和user2clone地址变化了,我也不知道为什么

su – user1;cd ~
git clone git@192.168.1.245:test.git
有写入权限
su – user2;cd ~
git clone git@192.168.1.245:test.git
只有读取权限无写权限

8. 通过私钥登陆(附)/strong>

1.安装Git Bash、TortoiseGit
2.运行Git Bash,输入ssh-keygen -t rsa -C “test@test.com”以后的验证码什么的留空就好
3.此后会在用户.ssh下生产id_rsa 和id_rsa.pub两个文件,为了方便可以改名test@test test@test.pub
4.进入TortoiseGit/bin运行puttygen,选择Conversions-Import Key,导入test@test文件,并保存private key命名为test_putty.ppk
5.把test@test.pub上次到git服务器/home/git/gitosis-admin/keydir,commit
6.clone时候选择test_putty.ppk

9. 通过gitblit管理(附)/strong>
参考http://gitblit.com/
gitblit还是一个很不错的git管理工具,用起来很方便,有点github的感觉,推荐使用

centos5.5 bind(DNS服务)快速安装总结

一、Bind 简介。

Bind是一款开放源码的DNS服务器软件,Bind由美国加州大学Berkeley分校开发和维护的,全名为Berkeley Internet Name Domain它是目前世界上使用最为广泛的DNS服务器软件,支持各种unix平台和windows平台。本文将介绍它在Centos5.5中最基本的安装和配置。

二、安装步骤

系统环境:CentOS 5.5

1、所在网络:公司内网,本机器一作为DNS服务器,IP:192.168.1.2, 主机名:hzbenhe;

网卡设置项: #cat /etc/sysconfig/network-scripts/ifcfg-eth0

#Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:40:45:20:79:e1
IPADDR=192.168.1.2
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
ONBOOT=yes
TYPE=Ethernet

是使用的静态IP:192.168.1.2。

2、我的需求:将此机器设置为DNS服务器,内网其它PC通过此DNS服务器解析上网,同时让内网PC通过域直接访问公司内网WEB服务器;如公司网站、ERP系统、邮件WEB登陆等等。

3. 安装Bind

# yum -y install bind*
# yum -y install caching-nameserver

4. 主配置文件named.conf的配置。

首先要进入目录,由于安装了chroot包(主要功能就不多介绍),所以主配置文件named.conf在/var/named/chroot/etc/下进行配置。命令如下:

[root@killgoogle ~]# cd /var/named/chroot/etc/

;

由于安装了上面六个包后,这个目录下就默认会生成一个named.conf文件,但这个named.conf文件只是个解释文档,所以我们要通过以下命令来把named.conf文件的模板拷贝一份。命令如下:

[root@killgoogle etc]# cp -p named.caching-nameserver.conf named.conf

现在就可以用named.conf文件进行配置了。命令如下:

[root@killgoogle etc]# vi named.conf   //改后内容如下
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
query-source port 53;
query-source-v6 port 53;
allow-query { any; };
};

logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};

view localhost_resolver {
match-clients { any; };
match-destinations { any; };
recursion yes;
include "/etc/named.rfc1912.zones";
};

在此目录下还有一个文件要配置,命令如下:

[root@killgoogle etc]# vi named.rfc1912.zones

添加以下内容: (hzbenhe.tst为需要自定义解析的域名)

zone "hzbenhe.tst" IN {
type master;
file "hzbenhe.tst.zone";
allow-update { none; };
};

zone "1.168.192.in-addr.arpa" IN {
type master;
file "192.168.1.zone";
allow-update { none; };
};

5. 配置正、反解文件。

正反解文件都在相同目录下,由于安装了chroot包后,所以配置正反解文件要到/var/named/chroot/var/named/目录下,而且在此目录下也有正反解的模板文件。具体用到的命令如下:

[root@killgoogle var]# cd /var/named/chroot/var/named/

[root@killgoogle var]# cp -p localdomain.zone hzbenhe.tst.zone

[root@killgoogle var]# cp -p named.local 192.168.1.zone

记得加参数P,不然很有可能启动不了named服务。现在就可以编辑正解(hzbenhe.tst.zone)、反解(192.168.1.zone)这两个文件了。

[root@killgoogle var]# vi jecks.cn.zone

$TTL    86400
@               IN SOA  localhost root (
                                        42              ; serial (d. adams)
                                        3H              ; refresh
                                        15M             ; retry
                                        1W              ; expiry
                                        1D )            ; minimum
                IN NS           hzbenhe.tst
localhost       IN A            192.168.1.2
nexus           IN A            192.168.1.2
bugz            IN A            192.168.1.2
wiki            IN A            192.168.1.2
dp              IN A            192.168.1.2
bbs             IN A            192.168.1.2
git             IN A            192.168.1.2
zd              IN A            192.168.1.2

黄色部分为兹定于域名解析的二级域名,有多少我们都需要再这里配置上

上面这是最基本的正解文件的配置。

[root@killgoogle var]# vi 192.168.1.zone

$TTL    86400
@       IN      SOA     localhost. root.localhost.  (
                                      1997022700 ; Serial
                                      28800      ; Refresh
                                      14400      ; Retry
                                      3600000    ; Expire
                                      86400 )    ; Minimum
        IN      NS      hzbenhe.tst.
2       IN      PTR     www.hzbenhe.tst.

这里2为DNS服务器的ip末尾,www.hzbenhe.tst.可以任意输,只是一个服务器名字

说明: 最后一句前面的那个2是指的我自己IP:192.168.1.110的最后一个数。

注:

到此为止,我们的DNS服务器的90%的工作基本结束,剩下的就是扫尾工作。

三、收尾工作

1、首先是修改/etc/resolv.conf文件。只有修改了这个文件才可以用自己的机器进行域名解析,命令如下:

[root@killgoogle var]# vi /etc/resolv.conf

只要加上一句:nameserver 192.168.1.2就行了。

2、配置selinux。命令如下:

[root@killgoogle var]# setup

弹出一个对话框。我们要进行的是防火墙配置,步骤如下:

选择“Firewall Configuration”—按 “Tab”键切换到“Run Tool”—回车—“Security Level”选项要在“Enabled”前面按一下“Tab”键—“SelLinux”选项要选“Disabled”—按一下“Tab”键—选中 “Customize”—弹出新对话框—在“Other Port”栏目里输入“53:tcp 53:udp”—“OK”—返回上一个对话框—“OK”—对话框自动关闭。配置完成。

3、开启服务。命令如下:

[root@killgoogle ~]# service named start

4、测试。

测试的命令是nslookup,我想,知道DNS的、想配置DNS的人,应该不会不知道nslookup,更不会不知道Nslookup怎么用,所以在这就不多解释了。

5、设置named服务随机启动。

chkconfg named on

也可这个操作:输入setup命令—选择“System Services”—按 “Tab”键切换到“Run Tool”—回车—新对话框中把光标下移到“named”前—用空格键使“named”选项前多出个“*”表示—-按 “Tab”键切换到“OK”—-按 “Tab”键切换到“Quit”

注:如果在正、反解文件中添加了记录后,别忘了用“service named restart”命令重启named服务,否则修改无法生效。

在另一台机器中设置如下:

IP地址,自由获得(或者设定为:IP:192.168.1.120;子网掩码:255.255.255.0;网关:192.168.1.1);

首选DNS:192.168.1.2

打开浏览器打开相关站点。此时一切正常。

CentOS安装bugzilla

Bugzilla是一套国外开源的缺陷跟踪系统,类似国内比较流行的禅道系统。

1.目前安装的版本没有中文版,曾经看到过说某几个版本已经有了中文版,不过英文看看用用也没什么难度的。
2.bugzilla用起来还是比较方便,主要邮件系统很不错。bug有更新或修改都可以通过邮件通知。
3.操作起来也很方便。能很快上手,没有很多没用复杂而庞大的功能。很适合像我这样懒人,喜欢简单明了的东西

CentOS安装bugzilla

mysqlbackup

#!/bin/sh
#backup mysql database
#一、如果没有密码用
#mysqldump -q -a -c -u root  --opt $DBName | gzip &gt; $BackupPath/$DBName.$rq.sql.gz
#二、定时任务 每天凌晨三点
#vi /etc/crontab
#01 3 * * * root /usr/sbin/mysql.sh
#三、重新启动crond
#/etc/rc.d/init.d/crond restart
#:set ff 或 :set fileformat
#:set ff=unix 或 :set fileformat=unix

DBName=test
DBUser=root
DBPasswd=
BackupPath=/data/backup/mysql

#delete file 删除7天前的备份
find $BackupPath -type f -mtime +7 -exec rm {} \;

rq=`date +%Y%m%d%H%M`
#backup each database
mysqldump -q -a -c -u root -p$DBPasswd --opt $DBName | gzip &gt; $BackupPath/$DBName.$rq.sql.gz

淘宝TFS分布式文件系统

淘宝TFS分布式文件系统

简介

TFS(Taobao File System)是淘宝开发的一个分布式文件系统,适用于海量小文件存储。

参考:http://code.taobao.org/p/tfs/wiki/intro/

系统环境

Red Hat 4.1.2-50 x64

gcc version 4.1.2 20080704

ip:192.168.1.2

PS:测试环境单台及其跑nameserver+dataserver。多台分布可以参考一下配置:

http://gdcsy.blog.163.com/blog/static/12734360920125624859906/

http://elf8848.iteye.com/blog/1724423

安装过程(!)

一、 配置基本环境

[root@locatfs local]#yum update

需要确保安装了automake autoconfig 和 libtool,使用auotmake –version查看,一般情况下已安装。 1.4以上版本需要安装libuuid-devel,zlib-devel,mysql-devel三个开发包 [root@locatfs local]# yum install readline-devel readline

[root@locatfs local]# yum install ncurses-devel.x86_64  ncurses.x86_64

[root@locatfs local]# yum install -y automake libtool  libxslt groff pcre-devel  gcc* zlib-devel

[root@locatfs local]# yum install  e4fsprogs e4fsprogs-devel

#ext4

#加载ext4模块,让系统支持ext4文件系统

[root@locatfs local]#  modprobe ext4

 

二、 升级安装高版本mysql

  1. 安装配置yum源

[root@locatfs local]#

wget http://centos.ustc.edu.cn/epel/5/x86_64/epel-release-5-4.noarch.rpm

[root@locatfs local]#

wget ftp://ftp.pbone.net/mirror/rpms.famillecollet.com/enterprise/5/remi/i386/remi-release-5-8.el5.remi.noarch.rpm

[root@locatfs local]#rpm -ivh epel-release-5-4.noarch.rpm

[root@locatfs local]#rpm -ivh remi-release-5-8.el5.remi.noarch.rpm

  1. 向以下3个文件尾部追加一个文本(可以不做)

[root@locatfs local]#echo ‘priority=1′ >> /etc/yum.repos.d/remi.repo

[root@locatfs local]#echo ‘priority=1′ >> /etc/yum.repos.d/epel-testing.repo

[root@locatfs local]#echo ‘priority=1′ >> /etc/yum.repos.d/epel.repo

  1. 检查是否有可升级版本并升级。发现有版本可以升级到mysql5.5.11。

[root@locatfs local]#yum –enablerepo=remi list mysql

[root@locatfs local]#yum –enablerepo=remi update mysql

PS:这里可能需要升级一些rpm,根据系统不同确定。如果yum没有那就下载rpm(http://rpm.pbone.net/),然后用rpm -Uvh升级

三、 下载安装TFS

  1. 安装svn(如果没有安装)

[root@locatfs local]# yum install subversion

  1. 获取源代码

[root@locatfs local]# cd /opt

[root@locatfs local]# svn co -r 18 http://code.taobao.org/svn/tb-common-utils/trunk tb-common-util

[root@locatfs local]# svn checkout http://code.taobao.org/svn/tfs/tags/release-2.2.16/ tfs-2.2.16

[root@locatfs local]# wget http://googletest.googlecode.com/files/gtest-1.6.0.zip

PS:注意版本,tb-common-util用18、tfs用2.2.16(比较稳定)、gtest用1.6.0

  1. 安装gtest

[root@locatfs local]# unzip gtest-1.6.0.zip

[root@locatfs local]# cd gtest-1.6.0

[root@locatfs local]# ./configure

[root@locatfs local]# make

[root@locatfs local]# cd make/

[root@locatfs local]# make

[root@locatfs local]# ./sample1_unittest

  1. 编译和安装tbnet, tbsys库

[root@locatfs local]# vi /etc/profile

添加tblib根目录

export TBLIB_ROOT=/usr/local/tb/lib

[root@locatfs local]# source /etc/profile

进入tb-common-utils文件夹, 执行build.sh进行安装.

[root@locatfs local]# cd tb-common-utils/

[root@locatfs local]# chmod +x *.sh

[root@locatfs local]# ./build.sh

  1. 编译安装tfs

[root@locatfs local]# cd /opt/tfs-2.2.16/

[root@locatfs local]# ./build.sh  init

[root@locatfs local]# ./configure –prefix=/usr/local/tfs –without-tcmalloc

[root@locatfs local]# make

[root@locatfs local]# make install

PS:

1) 如果提示找不到/usr/local/tfs/scripts/cs_sync:

把tfs下的cs_sync.sh复制成cs_sync 执行:cp -a ./scripts/cs_sync.sh /root/tfs_bin/scripts/cs_sync

2) 如果出错:checking for tc_cfree in -ltcmalloc… no:

这是因为后面的tfs版本使用tcmalloc库了,可以在config时加–without-tcmalloc参数,重新编译,或者装tcmalloc库。我试过前者,是可以编译的。

TCMalloc(Thread-Caching Malloc)是google开发的开源工具,与标准的glibc库的malloc相比,TCMalloc在内存的分配上效率和速度要高,可以在很大程度上提高服务器在高并发情况下的性能,降低系统负载。这个模块可以用来让MySQL在高并发下内存占用更加稳定。

参考 :http://blog.chinaunix.net/space.php?uid=10449864&do=blog&id=2956849

3)如果-ljemalloc报错:

yum install jemalloc jemalloc-devel

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

如果没有其它报错,那恭喜安装完成。

目前情况:

tfs安装在 /usr/local/tfs/

tbsys、tbnet 安装在  /usr/local/tb/

/usr/local/tfs/conf/共有三个文件需要配置:ns.conf、ads.conf和ds.conf;没有的话从源码conf中复制

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

四、 配置启动

说明:

ns.conf                                用于启动nameserver         //只运行dataserver的服务器不用配置。

ads.conf和ds.conf   用于启动dataserver     //只运行nameserver的服务器不用配置。

nameserver和dataserver的启动顺序不限

[nameserver]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  1. 配置nameserver(除了红字,其它可以保持默认)

[root@locatfs local]# vi ns.conf

[public]

#日志文件的size,默认 1GB

log_size=1073741824

 

#保留日志文件的个数,默认 64

log_num = 4

 

#日志文件的级别, 默认 debug

log_level = error       //不然日志会很大

 

#工作队列size,  默认  10240

task_max_queue_size = 10240

 

#nameserver监听端口,自行修改,这里我们用8108

port =8108

 

#工作目录,也就是tfs的安装目录

work_dir=/usr/local/tfs

 

#网络设备,即通信网卡,一般用内网,ifconfig查看

dev_name= eth0

 

#工作线程池 default  4

thread_count = 4

 

#本机IP地址(vip),配置ha时为vip,没配置可以为主ns的ip

ip_addr = 192.168.1.2

 

[nameserver]

 

#系统保护时间,单位(秒), default: 300

#保护时间内不进行任何操作,包括添加block等

safe_mode_time = 300

 

#nameserver IP地址列表(master, salve的ip地址,只能以’|’分隔)

#单台nameserver时,另一个ip配置为无效ip即可

ip_addr_list = 192.168.1.2|192.168.0.2

 

#Ip地址 mask

#用于区分dataserver所在的子网,选择不同子网的dataserver备份数据

group_mask = 255.255.255.255

 

#Block size的最大值, 单位(字节)

block_max_size = 83886080   //这个值到底怎么配置好,有待实验。 必须 >= dataserver的mainblock_size,推荐设置一致。

 

#Block 最大备份数, default: 2

#单台dataserver时,需要配置为1

max_replication = 1

 

#Block 最小备份数, default: 2

#单台dataserver时,需要配置为1

min_replication = 1

 

#DataServer 容量使用的百分比, default: 98

use_capacity_ratio = 98

 

#Block使用的百分比, default: 95

block_max_use_ratio = 98

 

#Dataserver 与 nameserver 的心跳时间, 单位(秒), default: 2

heart_interval = 2

 

# object 死亡的最大时间, 单位(秒), default: 86400

object_dead_max_time = 3600

 

# 集群号

cluster_id = 1

 

# Block当前备份数与最大备份数百分比,如果大于这个百分比,就开始复制

replicate_ratio_ = 50

 

#每个DataServer 主可写块的大小, default: 3

max_write_filecount = 16

 

#dataserver 与 nameserver 的心跳线程池的大小, default: 2

heart_thread_count = 2

 

#dataserver 与 nameserver 的心跳工作队列的大小, default: 10

heart_max_queue_size = 10

 

#block 缺失备份时, 需要等待多长时间才进行复制, 单位(秒), default: 240

repl_max_time = 60

 

#block进行压缩的比例, block 删除的文件的比例达到这个值时进行压缩

compact_delete_ratio =  15

 

#block进行压缩时, dataserver的最大负载,超出这个值dataserver,不进行压缩

compact_max_load = 200

 

# object 清理的时间, 单位(秒), default: 300

object_clear_max_time = 300

 

#nameserver上出现租约等待时, 阻塞线程最大个数, 这个值最好是工作线程的一半

max_wait_write_lease = 15

 

#租约删除的最长时间, 单位(小时), default: 1

lease_expired_time = 3

 

#最大租约超时时间

max_lease_timeout = 3000

 

#清理租约的阀值, default: 102400

cleanup_lease_threshold = 102400

 

#创建计划的间隔时间, 单位(秒), default: 30

build_plan_interval = 10

 

#计划超时时间, 单位(秒), default: 120

run_plan_expire_interval = 120

 

#创建计划的百分比, 计划数量 = dataserver 数量 * build_plan_ratio

build_plan_ratio = 25

 

#定时dump统计信息的间隔时间, 单位(微秒), default: 60000000

dump_stat_info_interval = 60000000

 

#创建计划等待时间, 主要用有很多紧急复制时,单位(秒), default: 2

build_plan_default_wait_time = 2

 

#负载均衡时block相关的个数(这个参数有点问题, 以后会改成百分比), default: 5

balance_max_diff_block_num = 5

 

#每次新增Block的个数, default: 3

add_primary_block_count = 3

 

#存储block桶的个数, default: 32

block_chunk_num = 32

 

#每个任务处理的预期时间, 单位(微秒), default: 200

task_percent_sec_size = 200

 

#每个任务队列的最大size

task_max_queue_size = 10000

 

#同步日志缓冲区slot的大小, 超出这个值会写入磁盘, default: 1

oplog_sync_max_slots_num = 1024

 

#同步日志线程池的大小, default: 1

oplog_sync_thread_num = 1

  1. 启动nameserver

执行scripts目录下的tfs

[root@locatfs local]# cd /usr/local/tfs/scripts

[root@locatfs local]#./tfs start_ns

执行正常返回:

 

查看监听端口:

 

说明nameserver启动成功。

[dataserver]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  1. 配置dataserver(除了红字,其它可以保持默认)

[root@locatfs local]# vi ds.conf

[public]

 

#日志文件的size,default 1GB

log_size=1073741824

 

#保留日志文件的个数,default 64

log_num = 64

 

#日志文件的级别, default debug

log_level=debug

 

#工作队列size, default 10240

task_max_queue_size = 10240

 

#监听端口, 1024 ~ 65535

port = 9998

 

#工作目录

work_dir=/usr/local/tfs/

 

#网络设备

dev_name= eth0

 

#工作线程池 default 4

thread_count = 4

 

#本机IP地址(vip)

ip_addr = 192.168.1.2

 

[dataserver]

 

#!NameServer vip地址

ip_addr = 192.168.1.2

 

#!nameserver IP地址列表(master, salve的ip地址,只能以’|’分隔) (ns.conf中配 置的一致)

ip_addr_list = 192.168.1.2|192.168.0.2

 

#!NameServer 监听的端口, 1024 ~ 55535(ns.conf中配置的一致)

port = 8108

 

#备集群NameServer的vip地址, 可以不用配置

#slave_nsip = 192.168.0.2

 

#备集群NameServer监听端口, 可以不用配置

#slave_nsport = 9999

 

#dataserver 与 nameserver心跳间隔时间, 单位(秒), default: 2

heart_interval = 2

 

check_interval = 2

 

#datafile失效时间, 单位(秒), default: 90

#expire_datafile_time = 90

 

#拷贝一个Block超时时间, 单位(秒), default: 180

#expire_clonedblock_time = 180

 

#压缩一个Block超时时间, 单位(秒), default: 600

#expire_compactblock_time = 600

 

#复制Block线程池的大小, default: 2

replicate_threadcount = 2

 

#是否写同步日志, defalut: 1

#write_sync_flag = 1

 

#block 最大size

block_max_size = 7549747

 

#定时dump统计信息的间隔时间, 单位(秒), default: 60

dump_visit_stat_interval = 60

 

#io操作的阀值, 超过此值时, 会警告

#max_io_warning_time = 0

 

#备件类型, 1: tfs, 2: nfs

backup_type = 1

 

#备件路径,(放文件的目录,磁盘挂载区)

backup_path = /data/tfs

 

#最大datafile值, default: 50

#max_data_file_nums = 50

 

#crc error的最大个数

#max_crc_error_nums = 4

 

#eio error的最大个数

#max_eio_error_nums_ = 6

 

#超时block检测时间, 单位(秒)

#expire_checkblock_time = 86000

 

#cpu使用率

#max_cpu_usage = 60

 

#dump 统计信息的间隔时间, 单位(微秒)

#dump_stat_info_interval = 60000000

 

#mount路径

mount_name = /data/tfs

 

#mount 时磁盘的大小, 单位(KB)

mount_maxsize = 4194304

//最大的挂载空间,如果你的/data/tfs1有1T,而这里是设置了4G ,那只有4G的块可用空间,剩下的全部浪费。如果实际空间不足4G,那会报错

 

#文件系统类型: 0: no initialize, 1: ext4, 2: ext3 posix fallocate, 3: ext3 ftruncate

base_filesystem_type = 1

 

#超级块存存储的保留位置,default: 0

superblock_reserve = 0

 

#平均文件的大小, 单位(字节)

avg_file_size = 40960

 

#主块的大小, 单位(字节)

mainblock_size = 83886080    //每个数据存储块的大小

 

#扩展块的大小, 单位(字节)

extblock_size = 419430

 

#主块与扩展的比例

block_ratio = 0.5

 

#hash桶的比例

hash_slot_ratio = 0.5

 

ds_thread_count = 4

 

#访问控制ip mask, 可选

#access_control_ipmask = 192.168.0.1

 

#访问控制文件路径, 可选

#access_control_file = /home/xxxxx/xxxxxx/tfs/control.file

 

[root@locatfs local]# vi ads.conf

[public]

 

#日志文件的size,default 1GB

log_size=1073741824

 

#保留日志文件的个数,default 64

log_num = 64

 

#日志文件的级别, default debug

log_level=debug

 

#工作队列size,default 10240

task_max_queue_size = 10240

 

#监听端口, 1024 ~ 65535

port = 12000

 

#工作目录

work_dir=/usr/local/tfs/

 

#网络设备

dev_name= eth0

 

#工作线程池size, default 4

thread_count = 4

 

#本机ip地址

ip_addr = 192.168.1.2

 

[adminserver]

 

#检测的间隔时间, 单位(秒), default: 5

check_interval = 5

 

#失败的次数的阀值, default: 5

check_count = 5

 

#死亡个数的阀值

warn_dead_count = 3

 

#kill server之前等待时间

ds_fkill_waittime = 15

 

#dataserver启动命令脚本

ds_script = /usr/local/tfs/bin/dataserver -f /usr/local/tfs/conf/ds.conf -d

 

#监控的dataserver列表

ds_index_list = 1,2,3

 

[nameserver]

 

#!NameServer的vip

ip_addr = 192.168.1.2

 

#!NameServer监听的端口

port = 8108

 

[dataserver]

 

#!DataServer监听的端口

port = 9998

 

#!DataServer lock file路径

lock_file = /usr/local/tfs/logs/dataserver

 

#!DataServer 加载点路径

mount_name = /data/tfs

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

到这里配置文件就结束了

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

  1. 启动dataserver

首先需要格式化一个分区为ext4文件系统,并挂载到/data/tfs1至/data/tfs(i),其中i为磁盘号。注意上面的 mount_name = /data/tfs  没有加(i)

1)         物理增加一个硬盘,或则已有的硬盘分区df -h或fdisk -l查看

2)         格式化为ext4 [root@locatfs local]# mkfs.ext4 /dev/sdb

3)         挂载磁盘  [root@locatfs local]# mount /dev/sdb /data/tfs1/

4)         设置开机自动挂载[root@locatfs local]# vi /etc/fstab

加一行:

/dev/sdb                /data/tfs1              ext4    defaults        1 2

5)         存储区预分配

执行scripts下的stfs format n (n为挂载点的序号,具体用法见stfs的Usage)。例如stfs format 2,4-6 则会对/data/tfs2,
/data/tfs4,/data/tfs5,/data/tfs6,进行预分配。运行完后会在生成/data/tfs2, /data/tfs4,/data/tfs5,/data/tfs6下预先创建主块,扩展块及相应的统计信息。

[root@locatfs scripts]# stfs format 1

(1为挂载点的序号 具体可以看官网说明) //分配第一个存储区

 

6)         运行data server

有两种方法:
1)通过adminserver来启动dataserver(推荐): 执行scripts下的./tfs admin_ds
2)直接启动dataserver,执行scripts下的./tfs start_ds 2,4-6, 则会启动dataserver2,dataserver4,dataserver5,dataserver6

[root@locatfs scripts]# ./tfs admin_ds

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

OK,启动问问题一切安装配置过程结束

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

五、 测试

  1. 查看dataserver连接情况

[root@locatfs scripts]# cd  /usr/local/tfs/bin/

[root@locatfs scripts]# ./ssm -s 192.168.1.2:8108

server -b \\随即列出dataserver的block块

server -w \\随机列出dataserver的可写块

machine -a \\列出dataserver的使用报道。

 

 

这里需要注意如果用server -b 、-w后面的BLOCK数字,如果是0,说明没有可写块。检测ns  ads ds的配置文件,包括备份个数、主块大小知否一致.

如果看到上面的信息,那基本没问题了。

  1. 用tfstool上传一张图片

“客户端首先向nameserver发起写请求,nameserver需要根据dataserver上的可写块,容量和负载加权平均来选择一个可写的 block。并且在该block所在的多个dataserver中选择一个作为写入的master,这个选择过程也需要根据dataserver的负载以 及当前作为master的次数来计算,使得每个dataserver作为master的机会均等。master一段选定,除非master宕机,不会更 换,一旦master宕机,需要在剩余的dataserver中选择新的master。返回一个dataserver列表。

客户端向master dataserver开始数据写入操作。master server将数据传输为其他的dataserver节点,只有当所有dataserver节点写入均成功时,master server才会向nameserver和客户端返回操作成功的信息。“

也就是说客户端发起一个请求,nameserver先根据dataserver的 容量和负载 来选择一个dataserver来做为所有dataserver的master(除非master宕机,不会更换,宕机则自动重新选择)然后根据ns.conf的配置的备份数全部写入,才向nameserver和客户端返回操作成功信息。

 

[root@locatfs scripts]# cd  /usr/local/tfs/bin/

[root@locatfs bin]#./tfstool -s 192.168.1.2:8108

 

这 里我使用put上传/opt/test.jpg这张图,顺便说下,TFS目 前限制了文件大小为2M, 适合于一些小于2M数 据的存放。终端默认上传命令put ,超过2M用putl,回车后会返回一大堆字符,注意看最后一行是fail还是success,如果是fail,请检测下配置文件、端口等。如果是 success则说明已经上传上去。

 

往返回的信息上找些我们要的数据 : Block ID和block中的File ID;我们传的文件大小为1997540,下图可以看到文件被割成2个块 1048576和948964 ;储存在192.168.0.25  blockid: 889, fileid: 1

 

到这里文件写入就完成了。

  1. 读取文件

[root@locatfs scripts]# cd  /usr/local/tfs/bin/

[root@locatfs bin]#./ds_client -d 192.168.1.2:9998

list_file 889

 

上图可以看到,block 889 里面只有一个文件fileid 1   size为1997540(跟我们上传的一样大)。
取出来:

read_file_data  889 1 /tmp/test1.jpg

没有报错。我们去看看/tmp/test141.jpg,看看是不是跟我们上传的一样大

 

 

有线路由器与无线路由器的连接设置

如何设置无线路由器?WAN口和LAN口是关键

接触过宽带路由器的用户,大都了解宽带路由器上的端口有WAN口和LAN口之分。宽带路由器在工作过程中有这样一个特点:从LAN到WAN方向上的数据流默认不受限制通过路由器,从WAN到LAN方向上默认不能通过。(注:无线宽带路由器的无线接入部分从属于LAN的范围)也就是说,默认情况从局域网内电脑上发出的数据包进入路由器的LAN口,可以顺利通过路由器从WAN口被发出,但是从WAN这一端主动过来的数据包进入WAN口以后,路由器默认是不让那些数据包通过的。

通过实际测试,其实从有线路由器接出的网线,可以通过连接无线路由器的WAN口和LAN口的方式,都可实现无线网络的使用。

注意,本文的前提是,你有一条从正常有线路由器中接出的网线;此网线连接无线路由器的WAN口,是通过静态IP的方式来实现连接,如连接无线路由器的LAN口,即是将无线路由器当做一个无线AP来使用。下面分别介绍两种连接方式:

设备分别为:有线路由器是TP-LINK R460,无线路由器是TP-LINK WR541G。因此第一种连接方式是:连接无线路由器的WAN口即:TP-LINK R460 LAN口—WR541G WAN口,第二种连接方式是:连接无线路由器的LAN口即:TP-LINK R460 LAN口—WR541G LAN口。

如何设置无线路由器?先来连接无线路由器的WAN口

无线路由器的WAN口即TP-LINK R460 LAN口—WR541G WAN口(这里假设TP-LINK R460的LAN口采用默认的IP地址192.168.1.1,即可以通过192.168.1.1进入TP-LINK R460路由器设置,并且TP-LINK R460已经正常设置好,可以上网)

首先在一台电脑上使用网线连接无线路由器(WR541G)LAN口,进入设置界面(默认也是192.168.1.1,其它无线路由器,根据实际默认IP地址);首先进入TP-LINK WR541G无线路由器中的LAN接口,将其设置成172.16.1.1,然后保存重启路由器,此时TP-LINK WR541G无线路由器默认IP将改成172.16.1.1。

有线路由器与无线路由器的连接设置

然后在当前电脑网卡属性中,将IP地址修改为172.16.1.X (X取自然数范围2—254),如下图:

有线路由器与无线路由器的连接设置

设置完成后,打开IE,在地址栏输入172.16.1.1,重新进入TP-LINK WR541G无线路由器设置界面,设置无线路由器的WAN口,在WAN口连接类型中选择静态IP,将其设置为:IP地址192.168.1.X (X取自然数范围2—254)  子网掩码255.255.255.0    默认网关192.168.1.1 。注意IP地址192.168.1.X,其中X,一定要是在局域网中没有用过IP地址,否则会造成冲突。

有线路由器与无线路由器的连接设置

连接完成后,查看TP-LINK WR541G无线路由器的连接状态如下:

有线路由器与无线路由器的连接设置

设置完成保存重启TP-LINK WR541G无线路由器即可。对于网络无线网络设置,请参考主页以前无线局域网(路由器)详细安装设置过程。

说明一下:为什么开始要先设置无线路由器的LAN IP。这是因为对于TP-LINK WR541G无线路由器 来说TP-LINK R460的LAN口IP地址就是它的默认网关地址,由于TP-LINK WR541G无线路由器的默认IP是192.168.1.1,而TP-LINK R460默认IP也是192.168.1.1;因此要避免二者IP冲突,必须设置TP-LINK WR541G无线路由器的默认IP。

注意:

1、此时无线网卡的IP一定要设置成172.16.1.X(X取自然数范围2—254),网关和DNS都设置成172.16.1.1即可。但如果TP-LINK WR541G无线路由器打开DHCP服务,可能不需要设置。

2、此时进入路由器设置IP地址,TP-LINK R460无线路由器是192.162.1.1   WR541G无线路由器是176.16.1.1

3、连接完成后,由于TP-LINK WR541G无线路由器,也起到路由器的功能。所以连接在TP-LINK WR541G无线路由器上面的电脑它们的TCP/IP属性要和TP-LINK WR541G无线路由器保持一致!

如何设置无线路由器?再来连接无线路由器的LAN口

无线路由器的LAN口即:TP-LINK R460 LAN口—WR541G LAN口(这里假设TP-LINK R460的LAN口采用默认的IP地址192.168.1.1,即可以通过192.168.1.1进入TP-LINK R460路由器设置,并且TP-LINK R460已经正常设置好,可以上网)

这种连接方式因为没有使用TP-LINK WR541G无线路由器的WAN口所以也就没有必要配置WAN口了,因此比较简单。

由于TP-LINK WR541G无线路由器默认IP为192.168.1.1,点击IE,输入192.168.1.1,进入TP-LINK WR541G无线路由器设置界面,点击DHCP服务器–DHCP服务,关闭DHCP服务器

<有线路由器与无线路由器的连接设置

然后,更改TP-LINK WR541G无线路由器的LAN口IP地址,比如改为 192.168.1.254 只要和别的已经使用的IP地址不冲突就可以了。

有线路由器与无线路由器的连接设置

设置完成后,TP-LINK WR541G无线路由器的连接状态如下,由于此是TP-LINK WR541G无线路由器只是起到无线路由的功能,因此连接状态全部为空.

有线路由器与无线路由器的连接设置

设置完成,保存重启后,即可。对于网络无线网络设置,请参考主页以前无线局域网(路由器)详细安装设置过程。

注意:1、由于TP-LINK WR541G无线路由器与有线路由器TP-LINK R460的IP都是192.168.1.1,因此在设置TP-LINK WR541G无线路由器时,一定先不要连接TP-LINK R460路由器接出的网络。

2、设置好TP-LINK WR541G无线路由器后,并连接到TP-LINK R460路由器后,进入TP-LINK WR541G无线路由器的IP地址为:192.162.1.254(这里你设置的无线路由器LAN口的IP地址是什么,就实际输入什么);TP-LINK R460路由器的连接IP为:192.168.1.1

3、由于连接后,TP-LINK WR541G无线路由器只起到无线路由的功能。因此在要进入不同的路由器设置时,一定要注意输入不同的IP地址,是进入不同的路由器设置的。TP-LINK WR541G无线路由器就相当于一台“无线交换机”,所以连接在WR541G上面的电脑它们的TCP/IP属性要和TP-LINK R460保持一致!就相当于这些电脑是连接在TP-LINK R460下面的!

如何设置无线路由器实现局域网内有线路由器连接无线路由器的过程就为你介绍完了,光看着这些图文是没有用的,还是按照上述步骤实际操作一下吧!

 

CSS3新样式

1.select去掉默认样式
background: transparent;
-webkit-appearance: none;

2.css实现按钮
background: -webkit-gradient(linear, 0 0, 0 100%, from(#40BF49), to(#0D9D22));
color: #fff;
border-color: #008F01;
width: 298px;
height: 41px;
line-height: 41px;
border: 1px solid #B3B3B3;
border-radius: 3px;
text-decoration: none;
text-align: center;