Redis常用命令集,清空redis缓存数据库

Redis常用命令集,包括:连接操作命令,持久化命令,远程服务控制命令,对value操作的命令String、List、Set、Hash、Redis高级应用查看keys个数,清空redis缓存数据库。

1)连接操作命令

  • quit:关闭连接(connection)
  • auth:简单密码认证
  • help cmd: 查看cmd帮助,例如:help quit

2)持久化

  • save:将数据同步保存到磁盘
  • bgsave:将数据异步保存到磁盘
  • lastsave:返回上次成功将数据保存到磁盘的Unix时戳
  • shundown:将数据同步保存到磁盘,然后关闭服务



3)远程服务控制

  • info:提供服务器的信息和统计
  • monitor:实时转储收到的请求
  • slaveof:改变复制策略设置
  • config:在运行时配置Redis服务器



4)对value操作的命令

  • exists(key):确认一个key是否存在
  • del(key):删除一个key
  • type(key):返回值的类型
  • keys(pattern):返回满足给定pattern的所有key
  • randomkey:随机返回key空间的一个
  • keyrename(oldname, newname):重命名key
  • dbsize:返回当前数据库中key的数目
  • expire:设定一个key的活动时间(s)
  • ttl:获得一个key的活动时间
  • select(index):按索引查询
  • move(key, dbindex):移动当前数据库中的key到dbindex数据库
  • flushdb:删除当前选择数据库中的所有key
  • flushall:删除所有数据库中的所有key



5)String

  • set(key, value):给数据库中名称为key的string赋予值value
  • get(key):返回数据库中名称为key的string的value
  • getset(key, value):给名称为key的string赋予上一次的value
  • mget(key1, key2,…, key N):返回库中多个string的value
  • setnx(key, value):添加string,名称为key,值为value
  • setex(key, time, value):向库中添加string,设定过期时间time
  • mset(key N, value N):批量设置多个string的值
  • msetnx(key N, value N):如果所有名称为key i的string都不存在
  • incr(key):名称为key的string增1操作
  • incrby(key, integer):名称为key的string增加integer
  • decr(key):名称为key的string减1操作
  • decrby(key, integer):名称为key的string减少integer
  • append(key, value):名称为key的string的值附加value
  • substr(key, start, end):返回名称为key的string的value的子串



6)List 

  • rpush(key, value):在名称为key的list尾添加一个值为value的元素
  • lpush(key, value):在名称为key的list头添加一个值为value的 元素
  • llen(key):返回名称为key的list的长度
  • lrange(key, start, end):返回名称为key的list中start至end之间的元素
  • ltrim(key, start, end):截取名称为key的list
  • lindex(key, index):返回名称为key的list中index位置的元素
  • lset(key, index, value):给名称为key的list中index位置的元素赋值
  • lrem(key, count, value):删除count个key的list中值为value的元素
  • lpop(key):返回并删除名称为key的list中的首元素
  • rpop(key):返回并删除名称为key的list中的尾元素
  • blpop(key1, key2,… key N, timeout):lpop命令的block版本。
  • brpop(key1, key2,… key N, timeout):rpop的block版本。
  • rpoplpush(srckey, dstkey):返回并删除名称为srckey的list的尾元素,并将该元素添加到名称为dstkey的list的头部



7)Set

  • sadd(key, member):向名称为key的set中添加元素member
  • srem(key, member) :删除名称为key的set中的元素member
  • spop(key) :随机返回并删除名称为key的set中一个元素
  • smove(srckey, dstkey, member) :移到集合元素
  • scard(key) :返回名称为key的set的基数
  • sismember(key, member) :member是否是名称为key的set的元素
  • sinter(key1, key2,…key N) :求交集
  • sinterstore(dstkey, (keys)) :求交集并将交集保存到dstkey的集合
  • sunion(key1, (keys)) :求并集
  • sunionstore(dstkey, (keys)) :求并集并将并集保存到dstkey的集合
  • sdiff(key1, (keys)) :求差集
  • sdiffstore(dstkey, (keys)) :求差集并将差集保存到dstkey的集合
  • smembers(key) :返回名称为key的set的所有元素
  • srandmember(key) :随机返回名称为key的set的一个元素



8)Hash

  • hset(key, field, value):向名称为key的hash中添加元素field
  • hget(key, field):返回名称为key的hash中field对应的value
  • hmget(key, (fields)):返回名称为key的hash中field i对应的value
  • hmset(key, (fields)):向名称为key的hash中添加元素field 
  • hincrby(key, field, integer):将名称为key的hash中field的value增加integer
  • hexists(key, field):名称为key的hash中是否存在键为field的域
  • hdel(key, field):删除名称为key的hash中键为field的域
  • hlen(key):返回名称为key的hash中元素个数
  • hkeys(key):返回名称为key的hash中所有键
  • hvals(key):返回名称为key的hash中所有键对应的value
  • hgetall(key):返回名称为key的hash中所有的键(field)及其对应的value


Redis高级应用
1、安全性
    设置客户端连接后进行任何操作指定前需要密码,一个外部用户可以再一秒钟进行150W次访问,具体操作密码修改设置redis.conf里面的requirepass属性给予密码,当然我这里给的是primos 
之后如果想操作可以采用登陆的时候就授权使用:
sudo /opt/java/redis/bin/redis-cli -a primos
或者是进入以后auth primos然后就可以随意操作了
2、主从复制
做这个操作的时候我准备了两个虚拟机,ip分别是192.168.15.128和192.168.15.133
    通过主从复制可以允许多个slave server拥有和master server相同的数据库副本
具体配置是在slave上面配置slave
slaveof 192.168.15.128 6379
masterauth primos
如果没有主从同步那么就检查一下是不是防火墙的问题,我用的是ufw,设置一下sudo ufw allow 6379就可以了
这个时候可以通过info查看具体的情况
 
3、事务处理
redis对事务的支持还比较简单,redis只能保证一个client发起的事务中的命令可以连续执行,而中间不会插入其他client的命令。当一个client在一个连接中发出multi命令时,这个连接会进入一个事务的上下文,连接后续命令不会立即执行,而是先放到一个队列中,当执行exec命令时,redis会顺序的执行队列中的所有命令。
比如我下面的一个例子
set age 100
multi
set age 10
set age 20
exec
get age –这个内容就应该是20
multi
set age 20
set age 10
exec 
get age –这个时候的内容就成了10,充分体现了一下按照队列顺序执行的方式
discard  取消所有事务,也就是事务回滚
不过在redis事务执行有个别错误的时候,事务不会回滚,会把不错误的内容执行,错误的内容直接放弃,目前最新的是2.6.7也有这个问题的
乐观锁
watch key如果没watch的key有改动那么outdate的事务是不能执行的
4、持久化机制 
redis是一个支持持久化的内存数据库
snapshotting快照方式,默认的存储方式,默认写入dump.rdb的二进制文件中,可以配置redis在n秒内如果超过m个key被修改过就自动做快照
append-only file aof方式,使用aof时候redis会将每一次的函 数都追加到文件中,当redis重启时会重新执行文件中的保存的写命
令在内存中。
5、发布订阅消息 sbusribe publish操作,其实就类似linux下面的消息发布
6、虚拟内存的使用
可以配置vm功能,保存路径,最大内存上线,页面多少,页面大小,最大工作线程
临时修改ip地址ifconfig eth0 192.168.15.129

redis-cli参数

Usage: redis-cli [OPTIONS] [cmd [arg [arg …]]]

  -h <hostname>    Server hostname (default: 127.0.0.1)

  -p <port>        Server port (default: 6379)

  -s <socket>      Server socket (overrides hostname and port)

  -a <password>    Password to use when connecting to the server

  -r <repeat>      Execute specified command N times

  -i <interval>    When -r is used, waits <interval> seconds per command.

                   It is possible to specify sub-second times like -i 0.1

  -n <db>          Database number

  -x               Read last argument from STDIN

  -d <delimiter>   Multi-bulk delimiter in for raw formatting (default: \n)

  -c               Enable cluster mode (follow -ASK and -MOVED redirections)

  –raw            Use raw formatting for replies (default when STDOUT is not a  tty)

  –latency        Enter a special mode continuously sampling latency

  –slave          Simulate a slave showing commands received from the master

  –pipe           Transfer raw Redis protocol from stdin to server

  –bigkeys        Sample Redis keys looking for big keys

  –eval <file>    Send an EVAL command using the Lua script at <file>

  –help           Output this help and exit

  –version        Output version and exit



Examples:

  cat /etc/passwd | redis-cli -x set mypasswd

  redis-cli get mypasswd

  redis-cli -r 100 lpush mylist x

  redis-cli -r 100 -i 1 info | grep used_memory_human:

  redis-cli –eval myscript.lua key1 key2 , arg1 arg2 arg3

  (Note: when using –eval the comma separates KEYS[] from ARGV[] items)

常用命令:

1) 查看keys个数

keys *      // 查看所有keys

keys prefix_*     // 查看前缀为”prefix_”的所有keys

2) 清空数据库

flushdb   // 清除当前数据库的所有keys

flushall    // 清除所有数据库的所有keys

top3云服务器磁盘IO性能对比测试(阿里云、腾讯云、ucloud)–结果阿里云就是一坨屎

top3云服务器磁盘IO性能对比测试,测试对象包括阿里云、腾讯云、ucloud,测试磁盘包括系统盘,云盘(其中阿里云包括高速云盘),结果腾讯云本地硬盘最快达到600MB/s,因服务器没有云盘但官网说明有60MB/s,Ucloud磁盘读达到400多MB/s,阿里云垃圾仅有50MB/s,只能说阿里云真的很坑爹!很坑爹!!很坑爹!!

1)腾讯云服务器系统盘(641.98 MB/sec)及云盘( 627.78 MB/sec)IO读性能测试

[root@~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1       7.9G  3.5G  4.0G  47% /
/dev/vdb        197G  5.3G  182G   3% /home
[root@ ~]# hdparm -Tt /dev/vda1 

/dev/vda1:
 Timing cached reads:   20212 MB in  2.00 seconds = 10122.68 MB/sec
 Timing buffered disk reads: 1926 MB in  3.00 seconds = 641.98 MB/sec
[root@~]# hdparm -Tt /dev/vdb 

/dev/vdb:
 Timing cached reads:   19774 MB in  2.00 seconds = 9903.22 MB/sec
 Timing buffered disk reads: 1884 MB in  3.00 seconds = 627.78 MB/sec

腾讯云硬盘与本地硬盘的对比

云硬盘 本地硬盘
约0.30元/GB月。 约0.30元/GB月。
可靠性更高:数据冗余存储,且分布在多台服务器。 数据冗余存储,分布在本服务器。
容量更大:最大支持4TB的数据盘。 最大支持500GB。
性能:顺序读写约60MBPS。 性能更高:顺序读写超过200MBPS。
选购云硬盘的服务器支持升级CPU,内存,硬盘容量及带宽升级。   选购本地盘的服务器不支持配置升级,仅支持带宽的升级。

详细参考:https://buy.cloud.tencent.com/price/cbs

2)ucloud系统盘(513.27 MB/sec)及云盘(256.60 MB/sec)IO读性能测试

[root@ ~]# hdparm -Tt /dev/vda1^C
[root@ ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/vda1       20641404 4259668  15333212  22% /
/dev/vdb        20642428 3620124  15973728  19% /data
[root@10-10-133-43 ~]# hdparm -Tt /dev/vda1

/dev/vda1:
 Timing cached reads:   14662 MB in  2.00 seconds = 7337.32 MB/sec
 Timing buffered disk reads: 1540 MB in  3.00 seconds = 513.27 MB/sec
[root@ ~]# hdparm -Tt /dev/vdb

/dev/vdb:
 Timing cached reads:   14728 MB in  2.00 seconds = 7370.36 MB/sec
 Timing buffered disk reads: 770 MB in  3.00 seconds = 256.60 MB/sec

Ucloud的Udisk没有公布磁盘详细IO情况:https://docs.ucloud.cn/storage_cdn/udisk/price.html

3)阿里云系统盘(51.57 MB/sec)、普通云盘(65.63 MB/sec)、高速云盘(57.05 MB/sec)IO读性能测试,SSD云盘99.78 MB/sec

[root@~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1       40G  6.0G   32G  16% /
/dev/xvdc        99G   48G   46G  52% /home/mysql
/dev/xvdb       985G  317G  618G  34% /data

[root@~]# hdparm -Tt /dev/xvda1

/dev/xvda1:
 Timing cached reads:   14908 MB in  2.00 seconds = 7462.28 MB/sec
 Timing buffered disk reads: 156 MB in  3.03 seconds =  51.57 MB/sec
[root@iZ94fp4872nZ ~]# hdparm -Tt /dev/xvdb

/dev/xvdb:
 Timing cached reads:   14866 MB in  2.00 seconds = 7440.43 MB/sec
 Timing buffered disk reads: 198 MB in  3.02 seconds =  65.63 MB/sec


[root@]# hdparm -Tt /dev/xvdc

/dev/xvdc:
 Timing cached reads:   15070 MB in  2.00 seconds = 7541.93 MB/sec
 Timing buffered disk reads: 172 MB in  3.01 seconds =  57.05 MB/sec

阿里云盘SSD测试

# hdparm -Tt /dev/vda1

/dev/vda1:
 Timing cached reads:   16966 MB in  2.00 seconds = 8496.07 MB/sec
 Timing buffered disk reads: 300 MB in  3.01 seconds =  99.78 MB/sec

阿里云磁盘、SSD盘、搞笑云盘、普通云盘、本地SSD硬盘对比

块存储 SSD云盘 高效云盘 普通云盘 本地SSD盘
最大容量 2048 GB 2048 GB 2000 GB 800 GB
最大 IOPS 20000 3000 数百 12000
最大吞吐量 256 MBps 80 MBps 20 – 40 MBps 250 – 300 MBps
性能计算公式 IOPS=min{30*容量,20000}

吞吐量=min{50+0.5*容量,256}MBps
IOPS=min{1000+6*容量,3000}

吞吐量=min{50+0.1*容量,80}MBps
不适用 不适用
访问时延 0.5 – 2 ms 1 – 3 ms 5 – 10 ms 0.5 – 2 ms
数据可靠性 99.9999999% 99.9999999% 99.9999999% 仅物理机可靠性、无SLA保证
API名称 cloud_ssd cloud_efficiency cloud ephemeral_ssd
价格* 1.0元/GB/月 0.5元/GB/月 0.3元/GB/月 0.8元/GB/月
典型应用场景
  • I/O密集型应用
  • 中大型关系数据库
  • NoSQL数据库
  • 中小型数据库
  • 大型开发测试
  • Web服务器日志
不被经常访问或者低I/O负载的应用场景

Hadoop、NoSQL等分布式应用,应用本身有极高的可靠性,需要低时延、高I/O的存储。

供大家对云服务器的数据参考,2017.10.09增加普通电脑及服务器IO读写性能测试

1)DELL 1U PowerEdge R410服务器,RAID1 SAS 300G硬盘,测试比阿里云SSD云盘还要快。

# hdparm -Tt /dev/sda3

/dev/sda3:
 Timing cached reads:   11298 MB in  2.00 seconds = 5656.25 MB/sec
 Timing buffered disk reads:  442 MB in  3.01 seconds = 146.85 MB/sec

2)普通家庭电脑 希捷1T盘

# hdparm -Tt /dev/sda1

/dev/sda1:
 Timing cached reads:   19500 MB in  2.00 seconds = 9760.70 MB/sec
 Timing buffered disk reads: 436 MB in  3.01 seconds = 144.87 MB/sec

3)普通家庭电脑 西数4T盘

# hdparm -Tt /dev/sdb

/dev/sdb:
 Timing cached reads:   24872 MB in  2.00 seconds = 12455.68 MB/sec
 Timing buffered disk reads: 464 MB in  3.01 seconds = 154.13 MB/sec

phpcms phpsso通信失败原因解决办法

服务器其它配置正确,通信始终失败原因已经找到:

由于有防火墙的服务器一般是端口映射,这样就导致外网可以通过域名正常访问网站,而内网则无法通过域名访问网站。而v9与phpsso通信接口地址是通过域名链接,从而始终导致通信失败。这是v9的自身缺陷问题,开发者没有充分考虑到这一点。

修改hosts文件,把你的域名绑定到127.0.0.1,如

[root@localhost configs]# vi /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 www.qqqnm.com

nginx或者apache日志统计前十访问的URI

 下面两种方式统计nginx或者apache等http服务日志,所有URI接口的调用次数并显示出现次数最多的前十的URL,哪个更准确?

方法一:统计URI包括所有参数

cat /tmp/log |awk ‘{print $7}’ | sort | uniq -c | sort -nr |head -10

方法一:统计URI忽略所有参数
cat /tmp/log |awk ‘{split($7,b,”?”);COUNT[b[1]]++;}END{for(a in COUNT) print  COUNT[a], a}’|sort -k1 -nr|head -10 

其实是不通的统计方式

去掉http响应头Cache-Control及Pragma造成的缓存问题

最近在折腾CDN缓存配置,就发现在伪静态环境下,缓存命中率还是非常低,一番折腾后发现如果源站的http头部包含一些不缓存的信息,那么CDN”也许“会相应的继承源站发出的HTTP状态。
通常喜欢用LNMP安装包的朋友会发现,在动态及伪静态的环境中,HTTP头部信息会包含Cache-Control: no-store,no-cache,must-revalidate,post-check=0,pre-check=0 和 Pragma: no-cache,就是这种状态影响了CDN对源站缓存的判断,proxy。

如何去掉Cache-Control及Pragma在http头部中的状态呢?
如果没有看到此文的话,你会非常痛苦的认为是网站程序本身所发出的状态,然后一番查找修改后发现依然无解,我理解这个过程,因为我就是这么干的。非常之痛苦。。。。

其实解决Cache-Control: no-store,no-cache.....和Pragma: no-cache很简单,只需修改php.ini中的session.cache_limiter参数,军哥lnmp默认值是nocache,只要修改为none即可解决这个HTTP状态中的缓存问题。耶!耶!耶!耶!耶~~~~~~~~~

老外vps无特别说明(即使用优惠码)都按优惠后的价格续费。此vps无爱可看之前其它文章
发现Out of Stock说明缺货中,可考虑购买其它VPS。自备谷歌浏览器有简单的翻译功能。

linux centos 中OpenSSL升级方法详解

OpenSSL升级前段时间出现天大bug了,这样导致大家都急着去升级OpenSSL来初安全了,但是很多的朋友在家linux并不知道如何去升级OpenSSL了,下面我整理了一文章大家一起参考一下。

相关软件下载地址
Apache:http://httpd.apache.org/
Nginx:http://nginx.org/en/download.html
OpenSSL:http://www.openssl.org/
openssl-poc
附件说明
PoC.py : 漏洞利用测试PoC脚本
showssl.pl:OpenSSL动态库版本检测脚本
安装OpenSSL步骤

由于运营环境不同,以下过程仅供参考。openssl属于系统应用,被较多应用依赖,由于环境不同等因素,请先在测试环境进行充分测试。
从官方下载最新版本的opensssl库
wget https://www.openssl.org/source/openssl-1.0.1g.tar.gz
解压下载的openssl压缩包
tar -zxvf openssl-1.0.1g.tar.gz
进入解压后的openssl文件夹
cd openssl-1.0.1g
执行文件夹中的config文件,这里openssl的安装目录默认是/usr/local/ssl(由于系统环境差异路径可能不一致,下同),注意添加zlib-dynamic参数,使其编译成动态库

 代码如下 复制代码
./config shared zlib-dynamic
config完成后执行 make 命令
make
make 命令执行完后再执行 make install 命令,安装openssl
make install
重命名原来的openssl命令
mv /usr/bin/openssl  /usr/bin/openssl.old
重命名原来的openssl目录
mv /usr/include/openssl  /usr/include/openssl.old
将安装好的openssl 的openssl命令软连到/usr/bin/openssl
ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl
将安装好的openssl 的openssl目录软连到/usr/include/openssl
ln -s /usr/local/ssl/include/openssl  /usr/include/openssl
修改系统自带的openssl库文件,如/usr/local/lib64/libssl.so(根据机器环境而定) 软链到升级后的libssl.so
ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so
执行命令查看openssl依赖库版本是否为1.0.1g:
strings /usr/local/lib64/libssl.so |grep OpenSSL
在/etc/ld.so.conf文件中写入openssl库文件的搜索路径
echo “/usr/local/ssl/lib” >> /etc/ld.so.conf
使修改后的/etc/ld.so.conf生效

ldconfig -v
查看现在openssl的版本是否是升级后的版本
openssl version
更新Webserver的 OpenSSL依赖库
如果webserver在安装编译时加载了openssl,还需对webserver进行重启或者重新编译操作。因webserver安装时分为动态编译和静态编译openssl两种方式,所以具体操作方式也不同。
判断webserver是否为动态编译ssl的两种方法

wget -c https://www.openssl.org/source/openssl-1.0.1s.tar.gz
tar -zxvf openssl-1.0.1s.tar.gz 
cd openssl-1.0.1s
./config shared zlib-dynamic
make && make install
mv /usr/bin/openssl  /usr/bin/openssl.old
mv /usr/include/openssl  /usr/include/openssl.old
ln -s /usr/local/ssl/bin/openssl  /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl  /usr/include/openssl
ln -s /usr/local/ssl/lib/libssl.so /usr/local/lib64/libssl.so
strings /usr/local/lib64/libssl.so |grep OpenSSL
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v
openssl version

通过ldd命令查看依赖库


ssl1

ldd查看程序依赖库,存在libssl.so则为动态编译ssl(如上图),反之为静态(如下图):

ssl2

查看编译参数
如输入以命令/usr/sbin/nginx -V,查看nginx的编译参数,参数中不存在–with-openssl则为动态编译ssl的,反之为静态:
ssl3

更新OpenSSL库
a) 如果webserver是动态编译ssl安装的,直接重启apache,nginx等相应webserver服务即可。
b) 如果webserver是静态编译ssl安装的,可参照以下方法更新:
apache静态编译ssl的情况:
源码重新安装apache,使用ssl静态编译:
执行apache的configure文件时,除了业务需要的参数外,需要指定ssl为静态编译

 代码如下 复制代码
./configure –enable-ssl=static –with-ssl=/usr/local/ssl
(openssl的安装路径)

安装apache

 代码如下 复制代码
make && make install

恢复原有apache配置,重启服务即可
nginx静态编译ssl的情况:
源码重新安装nginx,使用ssl静态编译:
执行nginx的configure文件时,除了业务需要的参数外,需要指定ssl为静态编译,编译参数带上–with-openssl便表明为静态编译ssl

 代码如下 复制代码
./configure  –with-http_ssl_module –with-openssl=/usr/local/ssl
(openssl的安装路径)

安装nginx

 代码如下 复制代码
make && make install

恢复原有nginx配置,重启服务即可
如有其他使用openssl的情况,参照apache和nginx的解决方式。
测试漏洞是否存在
使用附件PoC.py根据脚本提示检测是否存在漏洞。
如:
测试https://192.168.0.1漏洞是否存在执行命令如下

 代码如下 复制代码
python PoC.py -p 443,8443 192.168.0.1

检测动态库libssl.so版本
检测当前进程使用的libssl.so版本
执行附件showssl.pl检查脚本,无信息输出或无漏洞版本openssl输出,表示升级成功;如输出中有unknown,请业务自查libssl.so.1.0.0的版本是否是受影响的版本。
(详情见附件)

 代码如下 复制代码
#!/usr/bin/perl -w
my @listInfo = `lsof |grep libssl|awk ‘{print $1″ “$2” “$NF}’|sort -u`;
foreach my $info (@listInfo)
{
my ($procName, $procPid, $libPath) = split(/s/, $info);
next if (!defined($procName) || !defined($procPid)|| !defined($libPath));
my $version = `strings $libPath|grep -E “^OpenSSL [0-9]+.[0-9]+”`;
chomp $version;
if ($version =~ /s*OpenSSLs*1.0.1[a-f]{0,2}/)
{
print “$procName($procPid) : $libPath ($version).n”;
}
}

检测系统使用的libssl.so版本
执行命令:

 代码如下 复制代码
strings /usr/local/lib64/libssl.so |grep OpenSSL

查看openssl依赖库版本是否为1.0.1g
注:/usr/local/lib64/libssl.so 路径仅供参考,由具体机器环境决定,参考升级步骤

CentOS升级Git

Git现在的版本(我在写下本文时)已经是1.7.12了,然而CentOS的Git的版本却是1.7.1,而且用yum安装的Git的最高版本也只是去1.7.1,当然,如果你在工作使用中没有遇到问题,使用这个版本当然没有什么问题,但是如果你在工作中遇到只有高版本的Git才能支持的任务时,如何升级我们的Git呢?事实上,GitHub和许多Git服务依赖的Git版本不低于1.7.2。下面就以CentOS-6.5为例来说明,如何升级我们的Git。


一、安装证书
使用rpm的强大功能,从以下的地址中,导入安装所需要的证书,命令如下:

[plain] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # rpm –import http://apt.sw.be/RPM-GPG-KEY.dag.txt  

二、安装RPMForge
RPMForge源是什么呢?RPMForgeCentOS系统下的软件仓库,拥有4000多种的软件包,被CentOS社区认为是最安全也是最稳定的一个软件仓库。而CentOS默认自带CentOS-Base.repo源,但官方源中去除了很多有版权争议的软件,而且安装的软件也不是最新的稳定版。所以在这里,我们使用这个rpm软件仓库。其地址如下:

因为不同的CentOS版本的Git所对应的rpm包不同,所以在下载安装RPMForge时可先到该网站找到适合自己系统安装的RPMForgerpm。其地址如下:


因为我的CentOS是CentOS-6.5 32 位,所以我对应的rpm安装包就是:rpmforge-release-0.5.3-1.el6.rf.i686.rpm,所以可用以下命令来安装:

[plain] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # rpm -i http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm  
通过rpm的在线安装功能,我们也可以不下载rpm包,而直接在线安装

三、使用rpmforge-extra源更新
因为yum命令下载的软件依赖于其所使用的软件仓库,所以我们只要更改其指定的软件仓库,就能使用yum来方便地下载安装RPMForge源中的软件来更新本机的软件,从而简化安装操作。其命令如下:

[plain] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # yum –enablerepo=rpmforge-extras update  
你会看到由于软件仓库的切换,导致会有大量的软件可更新,你可以选择安装或不安装。若选择安装,则输入‘y’,那么当安装完成时,Git也就变为最新的版本了,我就是用这种方式的。但由于要更新的软件实在太多,所以,也可以选择只安装Git,输入了‘n’。

注:上面的命令其实与yum update是一样的,只是上面的命令指定更新对比的软件仓库为RPMForge。经过我的观察,选项–enablerepo=rpmforge-extras并不会改变yum的默认软件仓库,所以每次要想从下载软件,都需要该选项。要想一直使用第三方的源,应需要安装yum-priorities插件,并配置相关文件/etc/yum.repos.d/CentOS-Base.repo。(这里如有错误还望指出)

四、查看可用的git模块
由于我们并不知道,我们的系统可以安装哪些版本的Git,所以可用如下命令来查看,并选择一个最新版本的git来安装。其命令如下:

[cpp] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # yum –enablerepo=rpmforge-extras provides git  
五、安装Git
由于我们使用的是RPMForge的软件仓库,所以在安装时,如果没有运行上第四点的命令,而又想知道,自己的系统应该选择哪个版本来安装,我们可以到其仓库中找到我们版本所对应的Git,其地址如下:

由于我的是CentOS-6,所以最新的就是gitk-1.7.12.4-1.el6.rfx.i686.rpm了。

其命令如下:

[plain] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # yum –enablerepo=rpmforge-extras install gitk-1.7.12.4-1.el6.rfx.i686.rpm  
六、版本检查
至此,我们的Git已经升级好了,旧的Git会被新的覆盖,我们可以通过如下命令来查看,git的版本:

[plain] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # git –version  

[cpp] view plain copy

 print?在CODE上查看代码片派生到我的代码片

  1. # rpm -q git  

CentOS如何升级 Subversion (SVN) 1.8.15

感谢WANdisco,是维持最新的颠覆版的RPM包。这篇文章将帮助您安装Subversion(SVN)1.8.15 CentOS / RHEL 7 / 6 / 5系统。如果要配置颠覆服务器访问本文。

Thanks to Wandisco, which is maintaining the rpm packages for latest Subversion version. This article will help you to Install Subversion 1.8.15 ( SVN Client ) on CentOS/RHEL 7/6/5 Systems. If you want to configure Subversion server visit this article.

Step 1: Setup Yum Repository

首先,我们需要在我们的系统中配置yum仓库。创建一个新的回购文件/ etc / yum.repos.d/wandisco-svn.repo并添加以下内容按你的操作系统版本。

Firstly we need to configure yum repository in our system. Create a new repo file/etc/yum.repos.d/wandisco-svn.repo and add following content as per your operating system version.

[WandiscoSVN]
name=Wandisco SVN Repo
baseurl=http://opensource.wandisco.com/centos/$releasever/svn-1.8/RPMS/$basearch/
enabled=1
gpgcheck=0

Step 2: Install Subversion Package

Before installing latest package remove existing subversion packages from system to remove conflict.

在安装最新方案之前,从系统中删除现有的颠覆软件,以消除冲突。

# yum remove subversion*

Now install latest available Subversion package using yum command line package manager utility.现在安装新的颠覆包使用yum命令行软件包管理器。

# yum clean all
# yum install subversion

Step 3: Verify Subversion Version

At this stage you have successfully install Subversion client on your system. Lets use following command to verify version of svn client.在这个阶段,您已经成功地安装了系统的颠覆客户端。让我们用以下命令来验证SVN客户端版本。

# svn --version


svn, version 1.8.15 (r1718365)
   compiled Dec 11 2015, 14:28:48 on x86_64-redhat-linux-gnu

Copyright (C) 2015 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository access (RA) modules are available:

* ra_svn : Module for accessing a repository using the svn network protocol.
  - with Cyrus SASL authentication
  - handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
  - handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
  - using serf 1.3.7
  - handles 'http' scheme
  - handles 'https' scheme

References: 
1. http://opensource.wandisco.com/

在Linux CentOS 6.6上升级Python 2.7.9

CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上,必须升级Python 

checking for python... /usr/bin/python
checking for python >= 2.7... not found
configure: error: found python 2.6.6 (/usr/bin/python); required >= 2.7

yum中最新的也是Python 2.6.6,只能下载Python 2.7.9的源代码自己编译安装。

操作步骤如下:

1)安装devtoolset

yum groupinstall "Development tools"

2)安装编译Python需要的包包

yum install zlib-devel
yum install bzip2-devel
yum install openssl-devel
yum install ncurses-devel
yum install sqlite-devel

3)下载并解压Python 2.7.9的源代码

cd /opt
wget --no-check-certificate https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
tar xf Python-2.7.9.tar.xz
cd Python-2.7.9

4)编译与安装Python 2.7.9

./configure --prefix=/usr/local
make && make altinstall

5)将python命令指向Python 2.7.9

ln -s /usr/local/bin/python2.7 /usr/local/bin/python

6)检查Python版本

sh
sh-4.1# python -V
Python 2.7.9

网站502与504错误分析及解决办法

不管你是做运维还是做开发,哪怕你是游客,时不时会遇到502 Bad Gateway或504 Gateway Time-out。出现这页面,把服务重启下,再实在不行重启下服务器,问题就解决了,但是,这问题还是会困扰着你,特别是做运维的人员。夜黑风高正酣睡时,一个电话响起,让你重启服务或IISRESET,肯定是极大不爽,立马要问候他妈了。呵呵,本文总结502与504故障分析与解决方法。

二. 状态码解释

502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

三. 502 Bad Gateway原因分析

将请求提交给网关如php-fpm执行,但是由于某些原因没有执行完毕导致php-fpm进程终止执行。说到此,这个问题就很明了了,与网关服务如php-fpm的配置有关了。

php-fpm.conf配置文件中有两个参数就需要你考虑到,分别是max_children和request_terminate_timeout。

max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误的。可以通过netstat命令来查看当前连接数。

request_terminate_timeout设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。

当积累了大量的php请求,你重启php-fpm释放资源,但一两分钟不到,502又再次呈现,这是什么原因导致的呢? 这时还应该考虑到数据库,查看下数据库进程是否有大量的locked进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。

对于长时间的请求可以考虑使用异步方式,可以参阅《关于PHP实现异步操作的研究》。

四. 504 Gateway Time-out原因分析

504错误一般是与nginx.conf配置有关了。主要与以下几个参数有关:fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout、fastcgi_buffer_size、fastcgi_buffers、fastcgi_busy_buffers_size、fastcgi_temp_file_write_size、fastcgi_intercept_errors。特别是前三个超时时间。如果fastcgi缓冲区太小会导致fastcgi进程被挂起从而演变为504错误。

五. 小结

总而言之,502错误主要从四个方向入手:

1. max_children

2. request_terminate_timeout、max_execution_time

3. 数据库

4. 网关服务是否启动如php-fpm

504错误主要查看nginx.conf关于网关如fastcgi的配置。