通知设置 新通知
vsftp虚拟用户建立 | (干货笔记)
运维 空心菜 发表了文章 0 个评论 3201 次浏览 2015-11-26 00:33
1.安装vsftpd服务,和测试命令ftp
# yum -y install vsftpd
# yum -y install ftp
2.建立虚拟用户的用户名/密码数据库
vsftpd服务的虚拟用户数据库使用的是Berkeley DB格式的数据文件。建立数据库文件要用到db_load命令工具,所以要安装db4软件包
# yum -y install db4*(一)建立文本格式的用户名/密码列表文件,奇数行为用户名,偶数行对应为上一行用户名密码。
# vi /etc/vsftpd/vusers.list(二)用db_load工具将列表文件转化为DB数据库文件。
mike
123.com
john
123.com
kankan
kankan[i]app.com[/i]
# cd /etc/vsftpd/
# db_load -T -t hash -f vusers.list vusers.db
# chmod 600 /etc/vsftpd/vuser.* //降低文件权限以提高安全性
3.建立FTP访问根目录以及虚拟用户对应的系统账号
# useradd -d /data/pub -s /sbin/nologin ftpuser
# useradd -d /home/ytb/www/cms.yuntongbu/ -s /sbin/nologin kankanftpuser
# chmod 777 /data/pub
创建测试文件
#ls -lh /boot > /data/pub/vutest.file
4.建立PAM认证文件
#vi /etc/pam.d/vsftpd 添加如下内容
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
5.修改vsftpd的主配置文件,添加对虚拟用户的支持。
# vi /etc/vsftpd/vsftpd.conf #内容如下
anonymous_enable=NO
local_enable=YES
anon_umask=022
write_enable=YES
guest_enable=YES
guest_username=ftpuser
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
6.为不同的虚拟用户配置独立的配置文件
# vi /etc/vsftpd/vsftpd.conf #在末尾添加如下一行
user_config_dir=/etc/vsftpd/vusers_dir
7.为mike和john建立独立配置目录及文件
# mkdir -p /etc/vsftpd/vusers_dir
# cd /etc/vsftpd/vusers_dir
# vi john [size=16]#添加如下内容[/size]
anon_upload_enable=YES
anon_mkdir_write_enable=YES
#touch mike 建立空文件,默认配置文件中的权限
8.启动vsftpd服务
# service vsftpd start权限说明:
权限:john可以登录到ftp服务器,可以浏览,下载,也可以上传文件本地测试:
mike可以登录到ftp服务器,可以浏览,下载,但是不可以上传
(一)john的测试
[root@YTB-APP-1 ~]# ls(二)mike的测试
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): john
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,82,29).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,103,164).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.4e-05 secs (16882.35 Kbytes/sec)
ftp> put install.log
local: install.log remote: install.log
227 Entering Passive Mode (127,0,0,1,115,162).
150 Ok to send data.
226 Transfer complete.
29388 bytes sent in 0.024 secs (1222.97 Kbytes/sec)
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]#
[root@YTB-APP-1 ~]# ls好久之前的笔记,分享出来,方便后来者!
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# rm -rf vutest.file
[root@YTB-APP-1 ~]# ftp localhost
Trying ::1...
ftp: connect to address ::1Connection refused
Trying 127.0.0.1...
Connected to localhost (127.0.0.1).
220 (vsFTPd 2.2.2)
Name (localhost:ytb): mike
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,223,141).
150 Here comes the directory listing.
-rw-r--r-- 1 503 503 29388 Jul 03 02:23 install.log
-rw-r--r-- 1 0 0 574 Jul 01 14:50 vutest.file
226 Directory send OK.
ftp> get vutest.file
local: vutest.file remote: vutest.file
227 Entering Passive Mode (127,0,0,1,154,230).
150 Opening BINARY mode data connection for vutest.file (574 bytes).
226 Transfer complete.
574 bytes received in 3.8e-05 secs (15105.26 Kbytes/sec)
ftp> put install.log.syslog
local: install.log.syslog remote: install.log.syslog
227 Entering Passive Mode (127,0,0,1,227,247).
550 Permission denied.
ftp> quit
221 Goodbye.
[root@YTB-APP-1 ~]# ls
anaconda-ks.cfg bin importipas.sh install.log install.log.syslog my.cnf.bak vutest.file
[root@YTB-APP-1 ~]# ls /dat/pub/
ls: cannot access /dat/pub/: No such file or directory
[root@YTB-APP-1 ~]# ls /data/pub/
install.log vutest.file
[root@YTB-APP-1 ~]#
三张图看清Linux性能监控、测试、优化工具
运维 push 发表了文章 1 个评论 4963 次浏览 2015-11-24 23:35
和 Brendan 去年的 talk 比较,今年增加了测试和优化两部分。下面的三张图片分别总结了 Linux 各个子系统以及监控、测试、优化这些子系统所用到的工具。
监控
测试
优化
分享原文:vpsee
监控Mysql主从同步脚本
运维 空心菜 发表了文章 2 个评论 3038 次浏览 2015-11-24 00:02
Shell版本
#!/bin/bash
#Auth: lucky.chen
hosts="192.168.3.9:3305
192.168.3.10:3306
"
for i in $hosts
do
alert=0
host=`echo $i|awk -F':' '{print $1}'`
port=`echo $i|awk -F':' '{print $2}'`
declare -i alert
IO=`mysql -uwrite -P$port -p'write@jkb' -h${host} -e "show slave status\G"|grep Slave_IO_Running: |awk '{print $NF}'`
SQL=`mysql -uwrite -P$port -p'write@jkb' -h${host} -e "show slave status\G"|grep Slave_SQL_Running: |awk '{print $NF}'`
declare -i BEHIN=`mysql -uwrite -P$port -p'write@jkb' -h${host} -e "show slave status\G"|grep Seconds_Behind_Master|awk '{print $NF}'`
if [ $IO != Yes ] ;then
status="${status} \n IO is $IO"
alert=1
fi
if [ $SQL != Yes ] ;then
stauts="${status} \n SQL is $SQL"
alert=1
fi
if [[ $BEHIN -gt 100 ]] ;then
status="${status} \n behind master $BEHIN second"
alert=1
fi
if [[ alert -eq 1 ]] ;then
echo -e "$host : $status"
php /usr/local/bin/sendmail/tongbu.php "$host $status" "$status"
fi
done
python简易版本
#!/usr/bin/env python
# _[i]_coding: utf8_[/i]_
import MySQLdb
from MySQLdb import cursors
import threading
slaveList = [
'ip list'
]
def getSlaveTime(host):
try:
username = 'username'
passwd = 'password'
conn = MySQLdb.connect(user = username, passwd = passwd, host = host, connect_timeout = 5, cursorclass = cursors.DictCursor)
cur = conn.cursor()
cur.execute('''show slave status''')
fallSec = cur.fetchone()['Seconds_Behind_Master']
cur.close()
conn.close()
print host + ' 落后 ' + str(fallSec)
except:
print host + ' 落后 ' + str(10000000)
for host in slaveList:
s = threading.Thread(target = getSlaveTime,args = (host,))
s.start()
MySQL临时目录浅谈
运维 koyo 发表了文章 0 个评论 3626 次浏览 2015-11-23 23:56
情景
MySQL数据目录/data/mysql所在的上层目录/data,磁盘空间不足导致MySQL启动失败,所以清理了/data目录下除了mysql子目录外的其他无用目录。重启发现还是失败。检查错误日志。看到如下错误:
/usr/local/mysql/bin/mysqld: Can't create/write to file '/data/tmp/ibbLmEoD' (Errcode: 13 - Permission denied)原来是清理无用目录时不小心把MySQL配置文件中指定的tmpdir--->/data/tmp目录也给删除了,导致MySQL Server启动时的一些临时文件或表无法写入,从而启动失败。重建目录并赋予正确的权限后,重启MySQL Server,正常启动。
查看临时文件存储目录
show variables like '%tmp%';
mysql> show variables like '%tmp%';临时目录参数:
+----------------------------+----------+
| Variable_name | Value |
+----------------------------+----------+
| default_tmp_storage_engine | InnoDB |
| max_tmp_tables | 32 |
| slave_load_tmpdir | /tmp |
| tmp_table_size | 16777216 |
| tmpdir | /data/tmp|
+----------------------------+----------+
5 rows in set (0.00 sec)
命令行参数格式: --tmpdir=path
配置文件参格式: tmpdir=path
临时目录解析
临时目录用于存储临时文件或临时表。值可以是一个使用“:”(Unix)或“;”(Windows)分隔的路径列表,这些路径可被轮流使用,以便将负载分到不同磁盘。
若MySQL server是作为Slave的角色,则不能将该目录指向基于内存文件系统的目录或者当主机重启时会被清理掉的目录,因为Slave需要这些文件复制临时表或执行LOAD DATA INFILE操作,这些文件丢失会导致复制失败。
这意味着不能将slave的tmpdir设置为linux系统默认的/tmp目录。对于Slave可以使用另一配置项slave_load_tmpdir来设置其临时目录,这样Slave可以不使用通用选项tmpdir设置的临时目录。对于非Slave角色的MySQL server没此限制。
若临时目录不存在或权限不正确不仅会引起MySQL Server启动失败,还会导致其他可能使用到临时目录的MySQL实用程序运行异常。
很多MySQL相关程序会从MySQL Server的配置文件读取选项值,比如全备程序xtrabackup,下面这个错误就是因为MySQL Server配置文件中指定的临时目录不存在造成的。
xtrabackup_56: Can't create/write to file '/data/tmp/ibHbumcM' (Errcode: 2 - No such file or directory)
2015-11-23 16:04:42 7f1b25c607e0 InnoDB: Error: unable to create temporary file; errno: 2
xtrabackup: innodb_init(): Error occured.
innobackupex: Error:
innobackupex: ibbackup failed at /usr/bin/innobackupex line 389.
Msyql主从复制原理介绍
数据库 koyo 发表了文章 2 个评论 2357 次浏览 2015-11-22 22:27
主从复制的原理:
分为同步复制和异步复制,实际复制架构中大部分为异步复制。 复制的基本过程如下:
1).Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2).Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave 的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
3).Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4).Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
MySQL-Proxy实现MySQL读写分离提高并发负载
数据库 koyo 发表了文章 1 个评论 2923 次浏览 2015-11-22 20:55
MySQL Proxy有一项强大功能是实现“读写分离”,基本原理是让主数据库处理写方面事务,让从库处理SELECT查询。
Amoeba for MySQL是一款优秀的中间件软件,同样可以实现读写分离,负载均衡等功能,并且稳定性也高于MySQL Proxy,有兴趣的可以测试一下。
环境描述:
操作系统:CentOS6.3_x64
- []主服务器Master:192.168.0.202[/][]从服务器Slave:192.168.0.203[/][]调度服务器MySQL-Proxy:192.168.0.204[/]
一、Mysql主从复制
主从复制这里就不多说了,可以参考:http://openskill.cn/article/110
二、Mysql-proxy读写分离实现
1、安装mysql-proxy
实现读写分离是有lua脚本实现的,现在mysql-proxy里面已经集成,无需再安装
下载:http://dev.mysql.com/downloads/mysql-proxy/
tar zxvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz2、配置mysql-proxy,创建主配置文件
mv mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy
cd /usr/local/mysql-proxy3、修改读写分离配置文件
mkdir lua #创建脚本存放目录
mkdir logs #创建日志目录
cp share/doc/mysql-proxy/rw-splitting.lua ./lua #复制读写分离配置文件
cp share/doc/mysql-proxy/admin-sql.lua ./lua #复制管理脚本
vi /etc/mysql-proxy.cnf #创建配置文件
[mysql-proxy]
user=root #运行mysql-proxy用户
admin-username=proxy #主从mysql共有的用户
admin-password=123.com #用户的密码
proxy-address=192.168.0.204:4000 #mysql-proxy运行ip和端口,不加端口,默认4040
proxy-read-only-backend-addresses=192.168.0.203 #指定后端从slave读取数据
proxy-backend-addresses=192.168.0.202 #指定后端主master写入数据
proxy-lua-script=/usr/local/mysql-proxy/lua/rw-splitting.lua #指定读写分离配置文件位置
admin-lua-script=/usr/local/mysql-proxy/lua/admin-sql.lua #指定管理脚本
log-file=/usr/local/mysql-proxy/logs/mysql-proxy.log #日志位置
log-level=info #定义log日志级别,由高到低分别有(error|warning|info|message|debug)
daemon=true #以守护进程方式运行
keepalive=true #mysql-proxy崩溃时,尝试重启
保存退出!
chmod 660 /etc/mysql-porxy.cnf
vi /usr/local/mysql-proxy/lua/rw-splitting.lua4、启动mysql-proxy
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
min_idle_connections = 1, #默认超过4个连接数时,才开始读写分离,改为1
max_idle_connections = 1, #默认8,改为1
is_debug = false
}
end
/usr/local/mysql-proxy/bin/mysql-proxy --defaults-file=/etc/mysql-proxy.cnf5、测试读写分离
netstat -tupln | grep 4000 #已经启动
tcp 0 0 192.168.0.204:4000 0.0.0.0:* LISTEN 1264/mysql-proxy
关闭mysql-proxy使用:killall -9 mysql-proxy
1>.在主服务器创建proxy用户用于mysql-proxy使用,从服务器也会同步这个操作
mysql> grant all on [i].[/i] to 'proxy'@'192.168.0.204' identified by '123.com';2>.使用客户端连接mysql-proxy
mysql -u proxy -h 192.168.0.204 -P 4000 -p123.com创建数据库和表,这时的数据只写入主mysql,然后再同步从slave,可以先把slave的关了,看能不能写入,这里我就不测试了,下面测试下读的数据!
mysql> create table user (number INT(10),name VARCHAR(255));3>.登陆主从mysq查看新写入的数据如下
mysql> insert into test values(01,'zhangsan');
mysql> insert into user values(02,'lisi');
mysql> use test;4>.再登陆到mysql-proxy,查询数据,看出能正常查询
Database changed
mysql> select * from user;
+--------+----------+
| number | name |
+--------+----------+
| 1 | zhangsan |
| 2 | lisi |
+--------+----------+
mysql -u proxy -h 192.168.0.204 -P 4000 -p123.com5>.登陆从服务器关闭mysql同步进程,这时再登陆mysql-proxy肯定会查询不出数据
mysql> use test;
mysql> select * from user;
+--------+----------+
| number | name |
+--------+----------+
| 1 | zhangsan |
| 2 | lisi |
+--------+----------+
slave stop;6>.登陆mysql-proxy查询数据,下面看来,能看到表,查询不出数据
mysql> use test;配置成功!真正实现了读写分离的效果!
Database changed
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| user |
+----------------+
mysql> select * from user;
ERROR 1146 (42S02): Table 'test.user' doesn't exist
原文作者:李振良
分享原文地址:http://lizhenliang.blog.51cto.com/7876557/1305083
python的tab键补齐code
编程 空心菜 发表了文章 0 个评论 2047 次浏览 2015-11-21 23:19
# python startup file
import sys
import readline
import rlcompleter
import atexit
import os
# tab completion
readline.parse_and_bind('tab: complete')
# history file
histfile = os.path.join(os.environ['HOME'], '.pythonhistory')
try:
readline.read_history_file(histfile)
except IOError:
pass
atexit.register(readline.write_history_file, histfile)
互联网江湖归你们,火车票归我
科技前沿 koyo 发表了文章 0 个评论 2803 次浏览 2015-11-20 01:11
BAT分别掌握着一般型数据、交易型数据和关系型数据领域的话语权,但彼此间并不开放,试图颠覆BAT将变得更难,它们已经控制了整个中国的互联网江湖。
中国最大的三家互联网公司百度、阿里巴巴和腾讯(简称BAT)如何通过对外投资,控制了整个中国互联网江湖?《商业周刊/中文版》根据公开信息,梳理并归纳了三家公司超过200桩投资交易,试图用一张图表,展示投资信息和投资版图,并邀请互联网分析师尹生撰文,分析这一轮轮由BAT主导或参与的密集投资,会对中国互联网行业产生怎样的深远影响。
过去中国创业者们最担心的是中国最大的三家互联网公司百度、阿里巴巴和腾讯(简称BAT)是否会复制它们。现在,这个话题已经演变为,BAT是否会投资甚至收购它们。在过去那种“被复制”的情况下,创业者们还有成为下一个BAT级存在的机会——前提是克服BAT的关注;而在当前的境况下,中国的创业者,必须要面对的现实则是:如果不能入局BAT(被投资或收购),往往就意味着衰落甚至死亡。
这种变化的影响在最近已经集中爆发:几个月前还怀着“成就千亿美元市值”梦的美团创始人王兴,以及梦想将大众点评打造为本地生活入口级公司的张涛,突然之间宣布两家公司将合并;此前一直打得不可开交、都希望做中国的Priceline的去哪儿和携程,也闪电宣布结合;各自承载着中国版Uber梦、相互刺刀见红的滴滴和快的,已然携手入梦。
所有这些看似不可能的整合背后,都离不开BAT的排兵布阵。
在一日千里的中国互联网行业大战中,表面上的主角是这些陷入剧烈竞争的创业公司,但实际上,它们不过是BAT的代理人——尽管有时这些公司自己对此也可能不自知。道理简单而直接:对一家互联网创业公司而言,要想成功,就必须有持续不断的资金投入,以及用户流量等方面的支持,而BAT有这些资源。
根据最近一期季报,截至9月底,百度手握现金、现金等价物和短期投资110亿美元,阿里巴巴为166亿美元,而腾讯的现金净额和股权与金融资产价值合计也超过100亿美元。这还没有计算这些公司利用杠杆的融资能力。
据不完全统计,在过去3年不到的时间里,BAT用于外部投资和收购的资金,累计可能超过了人民币上千亿元。规模最大的一起,是今年10月中旬阿里巴巴斥资45亿美元对优酷土豆发起的全资购案(截至发稿,该交易尚未最终完成)。
不仅对外出手阔绰,在对内投资上,这些公司也毫不手软,比如百度几个月前就高调宣布要在自己看重的本地生活O2O领域投入30亿美元,有分析指出,正是这笔投资直接迫使美团和大众点评走向合并。
对BAT而言,资本市场的战争只是业务市场竞争的延续。
全屏可看清生态图
看着生态圈越发感觉创业公司不容易啊!容易归不容易,但是15年就快结束了,身为互联网的你,改早点回家看看父母,看看孩子,看看老婆,早点回去,再怎么努力,你也挣不过BAT。过年最怕抢票了,先下手为强吧!
早点回家过年喽!