1 | 1. redis 批量删除key |
postgresql master slave info
1 | postgres在9.0之后引入了主从的流复制机制,所谓流复制,就是从库通过tcp流从主库中同步相应的数据 |
redis error
1 | 1.install error |
redis install
redis standard install
1 |
|
1 | [root@localhost app]# tar xzf redis-3.2.6.tar.gz |
1 | [root@localhost redis-3.2.6]# echo 'export REDIS_HOME=/mnt/app/redis'|tee /etc/profile.d/redis.sh |
1 | [root@localhost redis-3.2.6]# mkdir -p /mnt/app/redis/conf |
1 | [root@localhost redis-3.2.6]# su - wisdom |
redis master slave install
1 | [root@localhost app]# tar xzf redis-3.2.8.tar.gz |
1 | [root@localhost redis-3.2.8]# echo 'export REDIS_HOME=/mnt/app/redis' | tee /etc/profile.d/redis.sh |
1 | [root@localhost redis-3.2.8]# mkdir -p /mnt/app/redis/conf/6379 |
1 | redis-master: |
1 | redis-slave: |
redis cluster install
1 | [root@localhost app]# tar xzf redis-3.2.6.tar.gz |
1 | [root@localhost redis-3.2.6]# echo 'export REDIS_HOME=/mnt/app/redis'|tee /etc/profile.d/redis.sh |
1 | [root@localhost redis-3.2.6]# mkdir -p /mnt/app/redis/conf/{7001,7002,7003,7004,7005,7006} |
1 | [root@localhost redis-3.2.6]# vim /mnt/app/redis/conf/7001/redis.conf |
1 | [root@localhost redis-3.2.6]# su - wisdom |
1 | [root@localhost app]# yum -y install ruby rubygem-redis |
zookeeper use
1 | Zookeeper Server持久化两类数据:Transaction和Snapshot. |
zookeeper基本操作
查看当前ZK角色
1
2
3
4
5penn@ubuntu:~$ cd /mnt/app/zookeeper.1/bin/
penn@ubuntu:/mnt/app/zookeeper.1/bin$ ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /mnt/app/zookeeper.1/bin/../conf/zoo.cfg
Mode: follower登录ZK
1
penn@ubuntu:/mnt/app/zookeeper.1/bin$ ./zkCli.sh -server 10.0.2.15:2181
查看帮助
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23help
ZooKeeper -server host:port cmd args
stat path [watch]
set path data [version]
ls path [watch]
delquota [-n|-b] path
ls2 path [watch]
setAcl path acl
setquota -n|-b val path
history
redo cmdno
printwatches on|off
delete path [version]
sync path
listquota path
rmr path
get path [watch]
create [-s] [-e] path data acl
addauth scheme auth
quit
getAcl path
close
connect host:port查询
1
2[zk: 10.0.2.15:2181(CONNECTED) 0] ls /
[zookeeper]创建znode节点”zk”并关联其字符串”MyData”
1
2
3
4[zk: 10.0.2.15:2181(CONNECTED) 1] create /zk "MyData"
Created /zk
[zk: 10.0.2.15:2181(CONNECTED) 2] ls /
[zk, zookeeper]1
2
3
4//注意: 如果不关联字符串,并不会创建新的znode
[zk: 10.0.2.15:2181(CONNECTED) 3] create /test
[zk: 10.0.2.15:2181(CONNECTED) 4] ls /
[zk, zookeeper]查看是否包含所创建的字符串
1
2
3
4
5
6
7
8
9
10
11
12
13[zk: 10.0.2.15:2181(CONNECTED) 5] get /zk
MyData
cZxid = 0x100000006
ctime = Thu Nov 03 14:46:39 CST 2016
mZxid = 0x100000006
mtime = Thu Nov 03 14:46:39 CST 2016
pZxid = 0x100000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 6
numChildren = 0现在对关联的字符串进行设置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26[zk: 10.0.2.15:2181(CONNECTED) 6] set /zk "zsl"
cZxid = 0x100000006
ctime = Thu Nov 03 14:46:39 CST 2016
mZxid = 0x100000007
mtime = Thu Nov 03 14:51:12 CST 2016
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: 10.0.2.15:2181(CONNECTED) 8] get /zk
zsl
cZxid = 0x100000006
ctime = Thu Nov 03 14:46:39 CST 2016
mZxid = 0x100000007
mtime = Thu Nov 03 14:51:12 CST 2016
pZxid = 0x100000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0删除zk node
1
2
3[zk: 10.0.2.15:2181(CONNECTED) 9] delete /zk
[zk: 10.0.2.15:2181(CONNECTED) 10] ls /
[zookeeper]
zookeeper 进阶操作
1 | [zk: 10.0.2.15:2181(CONNECTED) 13] create /zk "test" |
zookeeper quota
zookeeper quota机制支持节点个数(znode)和空间大小(字节数)
1 | //查看,默认是没有限制的 |
1 | //设置quota |
1 | //查看quota |
1 | //测试 |
1 | //查看quota内容 |
zookeeper 权限认证
1 | ZooKeeper 的权限管理亦即 ACL 控制功能通过 Server , Client 两端协调完成: |
1 | //查看ACL |
1 | 2.设置ip策略 |
1 | 3.设置digest策略 |
1 | 4.设置超级管理员 |
1 | 5.ACL请求过程 |
1 | 6.ACL缺陷 |
zookeeper install
java install
1 | [root@localhost app]# tar xzf jdk-8u73-linux-x64.tar.gz |
zookeeper standard install
1 | [root@10 app]# tar xzf zookeeper-3.4.6.tar.gz |
1 | [root@10 app]# echo 'export ZK_HOME=/mnt/app/zookeeper' | tee /etc/profile.d/zookeeper.sh |
1 | [root@10 app]# cat > /mnt/app/zookeeper/conf/zoo.cfg <<EOF |
1 | [root@10 app]# cat > /mnt/app/zookeeper/conf/zookeeper-env.sh <<EOF |
1 | [root@10 ~]# cat > /mnt/app/zookeeper/conf/java.env <<EOF |
1 | [root@10 app]# su - wisdom |
zookeeper cluster install
1 | [root@localhost app]# tar xzf zookeeper-3.4.6.tar.gz |
1 | [root@localhost app]# echo 'export ZK_HOME=/mnt/app/zookeeper' | tee /etc/profile.d/zookeeper.sh |
1 | ZK-cluster-1: |
1 | ZK-cluster-2: |
1 | ZK-cluster-3: |
zookeeper cluster info
1 | [root@localhost app]# cat /mnt/app/zookeeper/conf/zoo.cfg |
rsync install
rsync介绍
1 | rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync |
rsync 安装
安装
1
[root@localhost ~]# yum -y install rsync* inotify-tools*
创建rsyncd用户
1
[root@localhost ~]# useradd -M -s /sbin/nologin rsyncd
创建配置文件目录
1
[root@localhost ~]# mkdir -p /etc/rsyncd
创建配置文件
1
2
3
4
5
6
7
8
9
10[root@localhost ~]# touch /etc/rsyncd/rsyncd.conf
[root@localhost ~]# touch /etc/rsyncd/rsyncd.secrets
[root@localhost ~]# touch /etc/rsyncd/rsyncd.motd
说明:
rsyncd.conf 主配置文件
rsyncd.secrets 用户名密码文件,一组用户一行,用户名和密码使用:分割
rsyncd.motd 非必须,连接上rsyncd显示的欢迎信息
[root@localhost ~]# chmod 600 /etc/rsyncd/rsyncd.secrets
注意: rsyncd.secrets权限必须是600编辑配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57[root@localhost ~]# vim /etc/rsyncd/rsyncd.conf
#rsyncd 守护进程运行系统用户全局配置,也可在具体的块中独立配置,
uid = root
gid = root
# 守护进程监听ip
address = 0.0.0.0
# 护进程监听端口
port = 873
# 守护进程pid文件
pid file = /var/run/rsyncd.pid
# 守护进程lock文件
lock file = /var/run/rsyncd.lock
#允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下
#chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
use chroot = yes
#只读
read only = no
#只写
write only = no
#允许访问rsyncd服务的ip,ip端或者单独ip之间使用空格隔开
hosts allow = 0.0.0.0/0
#不允许访问rsyncd服务的ip,*是全部(不涵盖在hosts allow中声明的ip,注意和hosts allow的先后顺序)
hosts deny = *
#客户端最大连接数
max connections = 20
#欢迎文件路径,可选的
#motd file = /etc/rsyncd/rsyncd.motd
# 是否记录传输文件日志
transfer logging = yes
# 日志文件格式
log format = %t %a %m %f %b
# 指定rsync发送消息日志文件,而不是发送给syslog,如果不填这个参数默认发送给syslog
log file = /var/log/rsyncd.log
# syslog facility rsync发送消息给syslog时的消息级别
syslog facility = local3
# timeout连接超时时间
timeout = 300
# 模块 模块名称必须使用[]环绕
# 比如:要访问data1,则地址应该是data1user@192.168.1.2::data1
[test]
#模块根目录,必须指定
path = /home/vsftpduser/ftpdata/test
#只读
read only = yes
#是否允许列出模块里的内容
list=no
# 忽略错误
# ignore errors
# 模块验证用户名称,可使用空格或者逗号隔开多个用户名
auth users = testsync
# 模块验证密码文件 可放在全局配置里
secrets file = /etc/rsyncd/rsyncd.secrets
# 注释
comment = test ftp data
# 排除目录,多个之间使用空格隔开
exclude = test/1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16补充:
# 主要定义符及含义:
# %h远程主机名
# %a远程IP地址
# %l文件长度字符数
# %p该次rsync会话的进程id
# %o操作类型:"send"或"recv"
# %f文件名
# %P模块路径
# %m模块名
# %t当前时间
# %u认证的用户名(匿名时是null)
# %b实际传输的字节数
# %c当发送文件时,该字段记录该文件的校验码
#默认log格式为:"%o %h [%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。
log format=%o %h [%a] %m (%u) %f %l启动rsyncd服务
1
[root@localhost ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
客户端测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19方式一: 通过SSH同步
1.将当前key拷贝到服务端用户目录
[ec2-user@god ~]$ ssh-keygen
[ec2-user@god ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@1.1.1.1 -p22
2.通过客户端进行同步
//表示同步目录
[ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 -e "ssh -p 22" root@1.1.1.1:/home/vsftpduser/ftpdata/test ./test
//表示同步目录下的文件(不包含目录本身)
[ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 -e "ssh -p 22" root@1.1.1.1:/home/vsftpduser/ftpdata/test/ ./test
注意:
a 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件,块设备在内的所有文件
v 显示传输信息
P 显示传输进度
H 保留硬链接
z 压缩传输内容进行传输
--delete 删除那些DST中SRC没有的文件
--progress 显示备份过程
--bwlimit 限制带宽,字节/秒1
2
3
4
5
6
7
8方式二:通过rsync账号和密码同步
客户端:
[ec2-user@god ~]$ vim rsync.pass //注意文件中只保存密码
qxn9fav
[ec2-user@god ~]$ chmod 600 rsync.pass //密码文件必须是600
//表示同步目录下的文件
[ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 --port 52003 --password-file=rsync.pass sspsync@1.1.1.1::test ./test
inotify-tools安装
安装后文件存放在:
1
2/usr/local/bin/inotifywait
/usr/local/bin/inotifywatch修改内核参数:
1
2
3
4
5vim /etc/sysctl.conf
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65536
sysctl -p1
2
3
4说明:
max_queued_events inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches 要同步的文件包含多少目录,可以用:"find /home/www.osyunwei.com -type d | wc -l"统计,必须保证max_user_watches值大于统计结果
max_user_instances 每个用户创建inotify实例最大值编写脚本进行实时推送
1
2
3
4
5
6
7
8
9
10
11rsync_inotify.sh
src=/opt/test/
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file;do
/usr/bin/rsync -arzuq $src 192.168.0.2::www/
echo " ${file} was rsynced" >>/opt/soft/log/rsync.log 2>&1
done
chmod +x rsync_inotify.sh
./rsync_inotify.sh &拓展
1
2
3
4-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指"监听 创建 移动 删除 写入 权限"事件
python modules path
查看当前python的模块路径
1
2
3>>> import sys
>>> print(sys.path)
['', '/root/.pyenv/versions/2.7.13/lib/python27.zip', '/root/.pyenv/versions/2.7.13/lib/python2.7', '/root/.pyenv/versions/2.7.13/lib/python2.7/plat-linux2', '/root/.pyenv/versions/2.7.13/lib/python2.7/lib-tk', '/root/.pyenv/versions/2.7.13/lib/python2.7/lib-old', '/root/.pyenv/versions/2.7.13/lib/python2.7/lib-dynload', '/root/.pyenv/versions/2.7.13/lib/python2.7/site-packages']添加模块路径
1
[root@localhost ~]# export PYTHONPATH=/path/to/pylib:$PYTHONPATH
python modules use
- pylint
pylint 说明
1
pylint是一个python代码检查工具,可以帮助python程序员方便地检查程序代码的语法和风格
pylint安装
1
[root@penn mnt]# pip install pylint
- ipython
ipython 说明
1
ipython 是交互式的一个友好插件
ipython 安装
1
[root@localhost ~]# pip install ipython
python pyenv install
pyenv 安装依赖包
1
[root@dev ~]# yum -y install readline readline-devel readline-static openssl openssl-devel openssl-static sqlite-devel bzip2-devel bzip2-libs
pyenv 安装
1
2
3[root@localhost ~]# git clone https://github.com/yyuu/pyenv.git ~/.pyenv
or:
[root@localhost ~]# git clone https://github.com/yyuu/pyenv.git /mnt/app/pyenvpyenv 环境变量
1
2
3
4
5
6
7
8[root@localhost ~]# echo 'export PYENV_ROOT="$HOME/.pyenv"' | tee /etc/profile.d/pyenv.sh
or:
[root@localhost ~]# echo 'export PYENV_ROOT="/mnt/app/pyenv"' | tee /etc/profile.d/pyenv.sh
[root@localhost ~]# echo 'export PATH="$PYENV_ROOT/bin:$PATH"' | tee -a /etc/profile.d/pyenv.sh
[root@localhost ~]# echo 'eval "$(pyenv init -)"' | tee -a /etc/profile.d/pyenv.sh
[root@localhost ~]# source /etc/profile
[root@localhost ~]# exec $SHELLpyenv-virtual 安装
1
[root@localhost ~]# git clone https://github.com/yyuu/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
pyenv-virtual 环境变量设置
1
2
3[root@localhost ~]# echo 'eval "$(pyenv virtualenv-init -)"' | tee -a /etc/profile.d/pyenv.sh
[root@localhost ~]# source /etc/profile
[root@localhost ~]# exec $SHELL
pyenv 更新
1
2[root@localhost ~]# cd $(pyenv root)
[root@localhost .pyenv]# git pullpyenv 删除
1
2
3
4[root@localhost ~]# rm -rf $(pyenv root)
[root@localhost ~]# rm -rf /etc/profile.d/pyenv.sh
[root@localhost ~]# source /etc/profile
[root@localhost ~]# exec $SHELLpyenv 查看当前版本(系统版本)
1
2[root@localhost ~]# pyenv versions
* system (set by /root/.pyenv/version)pyenv 查看版本列表
1
[root@localhost ~]# pyenv install --list
pyenv 安装python
1
2
3
4
5
6[root@localhost ~]# pyenv install 2.7.13
[root@localhost ~]# pyenv rehash
or:
[root@localhost ~]# mkdir -p ${PYENV_ROOT}/cache
[root@localhost ~]# v=2.7.13;wget -P /usr/local/pyenv/cache/ http://mirrors.sohu.com/python/$v/Python-$v.tar.xz;python install $vpyenv 设置全局版本
1
2
3
4
5
6[root@localhost ~]# pyenv global 2.7.13
[root@localhost ~]# pyenv versions
system
* 2.7.13 (set by /root/.pyenv/version)
[root@localhost ~]# python -V
Python 2.7.13pyenv 设置本地版本,优先级高于global
1
[root@localhost ~]# pyenv local 2.7.13
pyenv 设置shell版本,优先级高于local,global
1
2[root@localhost ~]# pyenv shell 2.7.13
[root@localhost ~]# pyenv shell --unset 2.7.13python 卸载python
1
2[root@localhost ~]# pyenv uninstall 2.7.13
[root@localhost ~]# pyenv rehash
创建虚拟环境
1
[root@localhost ~]# pyenv virtualenv 2.7.13 myenv
查看当前的虚拟环境
1
2
3[root@localhost ~]# pyenv virtualenvs
2.7.13/envs/myenv (created from /root/.pyenv/versions/2.7.13)
myenv (created from /root/.pyenv/versions/2.7.13)删除虚拟环境
1
[root@localhost ~]# pyenv uninstall myenv
切换到虚拟环境
1
2
3
4
5
6
7[root@localhost ~]# pyenv activate myenv
pyenv-virtualenv: prompt changing will be removed from future release. configure `export PYENV_VIRTUALENV_DISABLE_PROMPT=1' to simulate the behavior.
(myenv) [root@localhost ~]#
注意:
export PYENV_VIRTUALENV_DISABLE_PROMPT=1 表示关闭(myenv)
export PYENV_VIRTUALENV_DISABLE_PROMPT=$1 表示打开(myenv)退出虚拟环境
1
2(myenv) [root@localhost ~]# source deactivate
pyenv-virtualenv: deactivate 2.7.13/envs/myenv