2018年11月

NC(netcat)瑞士军刀使用使用方法参数

NC官网地址:https://eternallybored.org/misc/netcat/
截至目前最新版本:netcat 1.12
netcat被誉为网络安全界的'瑞士军刀',简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据,它被设计成一个稳定的后门工具, 能够直接由其它程序和脚本轻松驱动。同时,它也是一个功能强大的网络调试和探测工具,能够建立你需要的几
乎所有类型的网络连接。
Netcat.jpg
RHEL/CentOS安装:

yum install nc -y

Windows直接下载https://eternallybored.org/misc/netcat/netcat-win32-1.12.zip解压即可使用

参数说明:

-h 查看帮助信息 
-d 后台模式 
-e prog程序重定向,一但连接就执行[危险] 
-i secs延时的间隔 
-l 监听模式,用于入站连接 
-L 监听模式,连接天闭后仍然继续监听,直到CTR+C 
-n IP地址,不能用域名 
-o film记录16进制的传输 
-p[空格]端口 本地端口号 
-r 随机本地及远程端口 
-t 使用Telnet交互方式 
-u UDP模式 
-v 详细输出,用-vv将更详细 
-w数字 timeout延时间隔 
-z 将输入,输出关掉(用于扫锚时) 





---阅读剩余部分---

pipenv安装部署python虚拟环境

为解决python不同版本混用的尴尬,避免污染系统python的依赖包环境, 我们需要创建虚拟环境, 将python2和python3隔离使用,之前使用virtualenv创建,需要将虚拟环境依赖包的导出为requirements.txt, 一旦依赖包变动,就要重新导出,而pipenv会自动帮我们生成Pipfile和Pipfile.lock, Pipfile会随着项目,当我们安装时只需在Pipfile和Pipfile.lock所在的目录下运行pipenv install就可以了,非常方便。
官网地址:https://pipenv.readthedocs.io/en/latest/
pipenv.png

安装pipenv:
方法一: ubuntu用apt安装

sudo apt install software-properties-common python-software-properties
sudo add-apt-repository ppa:pypa/ppa
sudo apt update
sudo apt install pipenv

方法二: windows用pip安装

pip install pipenv



---阅读剩余部分---

2018全球互联网架构大会上海站略影

周六去参加了2018全球互联网架构大会上海站,感悟良多;

云服务是趋势,关注区块链的人反而没有数据库和微服务架构的人多,
可能看到了太多的圈币跑路,目前区块链技术在互联网公司用的还是较少;

2018年热点技术还是容器Docker、微服务、框架及相关技术,也可以说是容器微服务的元年;

阿里系在容器方面走的比较远,特别是蚂蚁金服;

“容器本身没有价值,有价值的是容器编排”,


---阅读剩余部分---

Nginx按天或按小时切割日志

Nginx日志访问量大的时候,日志文件增长很快,查询日志很不方便,以下为实现按天或者小时将access文件切割:
按天切割方法如下:
创建log.sh脚本:

vim /usr/local/nginx/logs/log.sh
#!/bin/bash
LOG_PATH=/usr/local/nginx/logs/
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log
/usr/local/nginx/sbin/nginx -s reload

给权限

chmod +x /usr/local/nginx/logs/log.sh

crontal -e 加入定时执行,每天凌晨的时候,对日志进行切割,并reload

00 00 * * * /usr/local/nginx/logs/log.sh

按小时切割:
创建log.sh脚本:

vim /usr/local/nginx/logs/log.sh
#!/bin/bash
LOG_PATH=/usr/local/nginx/logs/
YESTERDAY=$(date -d "-1hours" +%Y-%m-%d_%H)
mv ${LOG_PATH}access.log ${LOG_PATH}access-${YESTERDAY}.log
mv ${LOG_PATH}error.log ${LOG_PATH}error-${YESTERDAY}.log
/usr/local/nginx/sbin/nginx -s reload

给权限

chmod +x /usr/local/nginx/logs/log.sh

crontal -e 加入定时执行,每个整点的时候,对日志进行切割,并reload

*/60  * * * * /usr/local/nginx/logs/log.sh

Redis客户端输出缓冲区限制调整

Redis为了解决输出缓冲区消息大量堆积的隐患,设置了一些保护机制,主要采用两种限制措施:
大小限制,当某一客户端缓冲区超过设定值后直接关闭连接;
持续性限制,当某一客户端缓冲区持续一段时间占用过大空间时关闭连接。
通过CONFIG GET *查看,可以找到客户端输出缓冲区的默认配置:

client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

对于普通客户端来说,限制为0,也就是不限制。因为普通客户端通常采用阻塞式的消息应答模式,何谓阻塞式呢?如:发送请求,等待返回,再发送请求,再等待返回。这种模式下,通常不会导致Redis服务器输出缓冲区的堆积膨胀;
对于Pub/Sub客户端(也就是发布/订阅模式),大小限制是8M,当输出缓冲区超过8M时,会关闭连接。持续性限制是,当客户端缓冲区大小持续60秒超过2M,则关闭客户端连接;
对于slave客户端来说,大小限制是256M,持续性限制是当客户端缓冲区大小持续60秒超过64M,则关闭客户端连接。






---阅读剩余部分---

MySQL视图查看及权限说明

查看视图是指查看数据库中,已经存在的视图的定义 必须要有SHOW VIEW的权限
查看视图有三种方式:
DESCRIBE语句
使用DESCRIBE语句,查看视图
MySQL中,使用DESCRIBE可以查看视图的字段信息,其中,包括字段名、字段类型等信息
语法格式:

DESCRIBE 视图名; 
或者
DESC 视图名;
root@sso_db_69 17:58:  [escdb]> desc oa_org;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| id          | varchar(36)  | NO   |     | NULL    |       |
| name        | varchar(255) | NO   |     | NULL    |       |
| fullName    | varchar(255) | YES  |     | NULL    |       |
| resource_id | varchar(255) | YES  |     | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
4 rows in set (0.01 sec)





---阅读剩余部分---

MySQL:Incorrect integer value: '' for column 'id' at row 1警告信息

MySQL5.x在insert into插入时,如果不带id写成为空如下:

INSERT INTO `server` VALUE ('',
'SSO系统',
'sso-db',
'192.168.6.37',
'/',
'运行',
'生产',
'4',
'8',
'100',
'CentOS Linux release 7.5',
'IDC机房',
'zuul',
'8000',
'/',
'王二小',
'2018-06-30',
server_update = NOW(),
'test11111111111111111111'
);

就会警告如下:

Warning Code : 1366
Incorrect integer value: '' for column 'id' at row 1

MySQL5的都会遇到这样的问题,插入空字符要使用NULL,改成如下:

INSERT INTO `server` VALUE (NULL,
'SSO系统',
'sso-db',
'192.168.6.37',
'/',
'运行',
'生产',
'4',
'8',
'100',
'CentOS Linux release 7.5',
'IDC机房',
'zuul',
'8000',
'/',
'王二小',
'2018-06-30',
server_update = NOW(),
'test11111111111111111111'
);

即可插入成功,同时也无警告信息。

php的session过期时间

PHP从4.0中加入了对Session的支持,方便了我们开发,Session储存在服务器端,根据客户端 提供的SessionID来得到这个用户的文件,然后读取文件,取得变量的值,SessionID可以使用客户端的Cookie或者Http1.1协议的 Query_String(就是访问的URL的“?”后面的部分)来传送给服务器,然后服务器读取Session的目录。

先来看看在php.ini中session怎么设置,打开 php.ini,查找Session设置部分中以下一项,代码如下:

session.save_path = "N;/path"
session.save_path = "C:/Temp"  #此处以你自己设定的路径为准

这项设置提供给我们可以给session存放目录进行多级散列,其中“N”表示要设置的目录级数,后面的“/path”表示session文件存放的根目录路径,比如我们设置为下面的格式,代码如下:

session.save_path = "2;C:/Temp"

上面的设置表示我们把php的session文件进行两级目录存储,每一级目录分别是0-9和a-z共36个字母数字为目录名,这样存放session的目录可以达到36*36个,共1332个文件夹,相信作为单台服务器来说,这是完全够用了,如果说您的系统架构设计为多台服务器共享session数据,可以把目录级增加到3级或者更多。

session.gc_maxlifetime = 1440 #(PHP5默认24分钟)
session.gc_probability = 1
session.gc_divisor = 1000   #garbage collection 有个概率的,1/1000就是session 1000次才有一次被回收。

将session.gc_divisor = 0,这样就能明显的看到SESSION过期的效果了.

session有过期的机制:
session.gc_maxlifetime 原来session 过期是一个小概率的事件,分别使用session.gc_probability和session.gc_divisor 来确定运行session 中gc 的概率 session.gc_probability和session.gc_divisor的默认值分别为 1和100。分别为分子和分母 所以session中gc的概率运行机会为1% 。如果修改这两个值,则会降低php的效率。

概率是gc_probability/gc_divisor

session.gc_probability = 1
session.gc_divisor = 100

注意1:假设这种情况gc_maxlifetime=120,如果某个session文件最后修改时间是120秒之前,那么在下一次回收(1/100的概率)发生前,这个session仍然是有效的。

注意2:如果你的session使用session.save_path中使用别的地方保存session,session回收机制有可能不会自动处理过期session文件。这时需要定时手动(或者crontab)的删除过期的session:

cd /path/to/sessions; find -cmin +24 | xargs rm

PHP中的session永不过期

不修改程序是最好的方法了,因为如果修改程序,测试部一定非常郁闷,那么只能修改系统环境配置,其实很 简单,打开php.ini设置文件,修改三行如下:

1、session.use_cookies

把这个的值设置为1,利用cookie来传递sessionid

2、session.cookie_lifetime

这个代表SessionID在客户端Cookie储存的时间,默认是0,代表浏览器一关闭SessionID就作废……就是因为这个所以PHP的 session不能永久使用! 那么我们把它设置为一个我们认为很大的数字吧,999999999怎么样,可以的!就这样。

3、session.gc_maxlifetime

这个是Session数据在服务器端储存的时间,如果超过这个时间,那么Session数据就自动删除! 那么我们也把它设置为99999999。

就这样一切ok了,当然你不相信的话就测试一下看看——设置一个session值过个10天半个月的回来看看,如果你的电脑没有断电或者宕机,你仍然可以看见这个sessionid。

via: http://php.net/manual/zh/session.configuration.php#ini.session.gc-divisor

Nginx记录请求分发日志及后端负载的IP

前端nginx接收到请求之后, 需把请求分发到后端WEB服务集群,需要记录分发日志, 来分析后端每台WEB服务器处理的请求数目,日志里面需要记录客户端IP、每个URL请求是哪个后端处理的,nginx配置文件如下:

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"'
              '$connection $upstream_addr '
              'upstream_response_time $upstream_response_time request_time $request_time ';
    access_log  logs/access.log  main;

参数说明:

$server_name:虚拟主机名称。
$remote_addr:远程客户端的IP地址,请求者IP。
-:空白,用一个“-”占位符替代,历史原因导致还存在。
$remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
[$time_local]:访问的时间与时区,比如07/Jun/2016:08:54:27 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
$request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
$status:记录请求返回的http状态码,比如成功是200。
$uptream_status:upstream状态,比如成功是200.
$body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。
$http_referer:记录从哪个页面链接访问过来的。
$http_user_agent:客户端浏览器信息
$http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
$ssl_protocol:SSL协议版本,比如TLSv1。
$ssl_cipher:交换数据中的算法,比如RC4-SHA。
$upstream_addr:upstream的地址,即真正提供服务的主机地址。
$request_time:整个请求的总时间。
$upstream_response_time:请求过程中,upstream的响应时间。

---阅读剩余部分---

RHEL/CentOS.x服务器CPU相关信息查看

可以使用lscpu快速查看:
lscpu命令参数

-a, –all: 包含上线和下线的cpu的数量,此选项只能与选项e或-p一起指定 
-b, –online: 只显示出上线的cpu数量,此选项只能与选项e或者-p一起指定 
-c, –offline: 只显示出离线的cpu数量,此选项只能与选项e或者-p一起指定 
 -e, –extended [=list]: 以人性化的格式显示cpu信息,如果list参数省略,输出所有可用数据的列,在指定了list参数时,选项的字符串、等号(=)和列表必须不包含任何空格或其他空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’ 
-h, –help:帮助 
-p, –parse [=list]: 优化命令输出,便于分析.如果省略list,则命令的输出与早期版本的lscpu兼容,兼容格式以两个逗号用于分隔cpu缓存列,如果没有发现cpu缓存,则省略缓存列,如果使用list参数,则缓存列以冒号(:)分隔。在指定了list参数时,选项的字符串、等号(=)和列表必须不包含空格或者其它空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’ 
-s, –sysroot directory: 为一个Linux实例收集CPU数据,而不是发出lscpu命令的实例。指定的目录是要检查Linux实例的系统根 
-x, –hex:使用十六进制来表示cpu集合,默认情况是打印列表格式的集合(例如:0,1)

---阅读剩余部分---

Keepalived 2.0.9 + Redis5.0部署redis主从高可用

项目需要部署搭建redis主从高可用环境,对外使用VIP提供服务,以下是实现步骤:
Keepalived 实现VRRP(虚拟路由冗余)协议,从路由级别实现VIP切换,可以完全避免类似heartbeat脑裂问题,可以很好的实现主从、主备、互备方案。
实现切换逻辑如下:A和B两台机器

1)A 、B机器依次启动,A机作为主、B机为从。
2)主A挂掉,B接管业务并作为主。
3)A机起来,作为从SLAVEOF B。
4)B机挂掉,A机再切回主。

在Keepalived 有两个角色:Master(一个)、Backup(多个),如果设置一个为Master,但Master挂了后再起来,必然再次业务又一次切换,这对于有状态服务是不可接受的。解决方案就是两台机器都设置为Backup,而且优先级高的Backup设置为nopreemt 不抢占主。
服务器环境:




---阅读剩余部分---

WARNING: The TCP backlog setting of 511 ......报错解决

安装好redis后,如果系统没有调优,启动的时候会报错:

WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
警告:TCP backlog的值设定是511,这是无法启动的,因为/proc/sys/net/core/somaxconn的设定值是128,比你的511要低。

解决方法:

echo 2048 > /proc/sys/net/core/somaxconn
echo 'net.core.somaxconn=1024' >> /etc/sysctl.conf
sysctl -p

在重启redis服务即可,log里面无报错了·
net.core.somaxconn参数说明:

net.core.somaxconn是linux中的一个kernel参数,表示socket监听(listen)的backlog上限。
backlog是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。
而socket server可以一次性处理backlog中的所有请求,处理后的请求不再位于监听队列中。
当server处理请求较慢,以至于监听队列被填满后,新来的请求会被拒绝。
所以说net.core.somaxconn限制了接收新 TCP 连接侦听队列的大小。
对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。
大多数环境这个值建议增加到 2048 或者更多。

CentOS6/7中禁用Transparent Huge Pages(大页)

RHEL6/CentOS6版本开始引入了Transparent Huge Pages(THP),从CentOS7版本开始,该特性默认就会启用。尽管THP的本意是为提升内存的性能,不过某些数据库厂商还是建议直接关闭THP(Oracle、MariaDB、MongoDB、Redis等),否则可能会导致性能出现下降,
查看THP的启用状态:

[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never

这个状态就说明都是启用.
禁用THP立即生效:

echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag

写入启动项,下次重启时生效:

chmod +x /etc/rc.d/rc.local
vim /etc/rc.d/rc.local
if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
 echo 'never' > /sys/kernel/mm/transparent_hugepage/enabled
 fi
 if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
 echo 'never' > /sys/kernel/mm/transparent_hugepage/defrag
 fi

最后重启系统,以后再检查THP应该就是被禁用了

[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
 always madvise [never]
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/defrag 
 always madvise [never]

Zabbix housekeeper processes more than 75% busy

收到Zabbix housekeeper processes more than 75% busy 报警,
问题原因
为了防止数据库持续增大,zabbix有个自动删除历史数据的机制,就是housekeeper,而mysql数据库删数据的时候,性能会降低,就会报这个错误,
解决方法如下:
调整HousekeepingFrequency参数,设置为3小时执行一次

vim /usr/local/zabbix/etc/zabbix_server.conf
HousekeepingFrequency=3            #间隔时间
MaxHousekeeperDelete=3000       #最大删除量

重新启动zabbix_server生效:

/etc/init.d/zabbix_server restart

查看log发现删除时已经带上了最大3000行

tail -f /tmp/zabbix_server.log
 10622:20181109:162644.037 resuming Zabbix agent checks on host "ETS-DB": connection restored
 10005:20181109:162646.629 slow query: 6.579011 sec, "delete from history_uint where itemid=40531 limit 3000"
 10005:20181109:162659.356 slow query: 4.364114 sec, "delete from history_uint where itemid=40399 limit 3000"
 10024:20181109:162701.359 item "dbnode1:uptime" became not supported: Unsupported item key.
 10033:20181109:162713.585 item "OA-DB:uptime" became not supported: Unsupported item key.
 10676:20181109:162718.903 cannot send list of active checks to "192.168.255.148": host [PingAn-Bank] not found
 10005:20181109:162722.824 slow query: 23.467607 sec, "delete from history_uint where itemid=40510 limit 3000"
 10680:20181109:162724.601 cannot send list of active checks to "192.168.255.132": host [WINN5F1QHDELEP] not found
 10038:20181109:162735.390 item "dbnode1_zs:uptime" became supported
 10005:20181109:162745.124 slow query: 22.299782 sec, "delete from history_uint where itemid=40515 limit 3000"
 10025:20181109:162757.104 item "dbnode1_zs:uptime" became not supported: Unsupported item key.
 10005:20181109:162806.766 slow query: 21.642425 sec, "delete from history_uint where itemid=40505 limit 3000"
 10005:20181109:162812.225 slow query: 5.458863 sec, "delete from history_uint where itemid=40511 limit 3000"
 10016:20181109:162817.036 item "dbnode1_zs:uptime" became supported
 10005:20181109:162818.444 slow query: 6.217885 sec, "delete from history_uint where itemid=40516 limit 3000"
 10005:20181109:162824.287 slow query: 5.843189 sec, "delete from history_uint where itemid=40506 limit 3000"

平滑升级Nginx到最新版本

Nginx目前爆出在HTTP/2 和 MP4 模块中存在安全漏洞,容易被DOS攻击。
8cf51541726528.jpg

Nginx官方于11月6日发布了新版本,用于修复影响 1.15.6, 1.14.1 之前版本的多个安全问题,被发现的安全问题有一种这样的情况 —— 允许潜在的攻击者触发拒绝服务(DoS)状态并访问敏感的信息,见官方公告:http://nginx.org/en/security_advisories.html
低版本升级到目前最新版nginx-1.14.1方法步骤如下:
1、查看原来安装nginx的版本以及编译的参数:

[root@xshell ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.0.2o  27 Mar 2018
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/data/lnmp1.5-full/src/openssl-1.0.2o

2、下载nginx最新稳定版本

wget http://nginx.org/download/nginx-1.14.1.tar.gz

3、解压ningx压缩包并编译make

tar xvf nginx-1.14.1.tar.gz
cd nginx-1.14.1
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/data/lnmp1.5-full/src/openssl-1.0.2o
make

4、make编译完后会在安装目录下生成一个objs目录且在该目录下有一个nginx执行文件

[root@xshell nginx-1.14.1]# ll
total 756
-rw-r--r-- 1 www  www  287441 Nov  6 21:52 CHANGES
-rw-r--r-- 1 www  www  438114 Nov  6 21:52 CHANGES.ru
-rw-r--r-- 1 www  www    1397 Nov  6 21:52 LICENSE
-rw-r--r-- 1 root root    376 Nov  9 10:56 Makefile
-rw-r--r-- 1 www  www      49 Nov  6 21:52 README
drwxr-xr-x 6 www  www    4096 Nov  9 10:55 auto
drwxr-xr-x 2 www  www    4096 Nov  9 10:55 conf
-rwxr-xr-x 1 www  www    2502 Nov  6 21:52 configure
drwxr-xr-x 4 www  www    4096 Nov  9 10:55 contrib
drwxr-xr-x 2 www  www    4096 Nov  9 10:55 html
drwxr-xr-x 2 www  www    4096 Nov  9 10:55 man
drwxr-xr-x 3 root root   4096 Nov  9 11:00 objs
drwxr-xr-x 9 www  www    4096 Nov  9 10:55 src
[root@xshell nginx-1.14.1]# ll objs/
total 10348
-rw-r--r-- 1 root root    52252 Nov  9 10:56 Makefile
-rw-r--r-- 1 root root    17763 Nov  9 10:55 autoconf.err
-rwxr-xr-x 1 root root 10394568 Nov  9 11:00 nginx
-rw-r--r-- 1 root root     5341 Nov  9 11:00 nginx.8
-rw-r--r-- 1 root root     7555 Nov  9 10:56 ngx_auto_config.h
-rw-r--r-- 1 root root      657 Nov  9 10:55 ngx_auto_headers.h
-rw-r--r-- 1 root root     8401 Nov  9 10:55 ngx_modules.c
-rw-r--r-- 1 root root    89712 Nov  9 11:00 ngx_modules.o
drwxr-xr-x 9 root root     4096 Nov  9 10:55 src

5、备份老的nginx文件,复制新文件

mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_bak
cp objs/nginx /usr/local/nginx/sbin/

6、检测配置文件是否正常

/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

7、使用make upgrade替换老的nginx进程

make upgrade
/usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
sleep 1
test -f /usr/local/nginx/logs/nginx.pid.oldbin
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

8、执行/usr/local/nginx2/sbin/nginx -V查看nginx最新的版本及编译的参数

/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.14.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-28) (GCC) 
built with OpenSSL 1.0.2o  27 Mar 2018
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_gzip_static_module --with-http_sub_module --with-stream --with-stream_ssl_module --with-openssl=/data/lnmp1.5-full/src/openssl-1.0.2o

9、重新reload服务

/usr/local/nginx/sbin/nginx -s reload

至此平滑升级完成

CentOS安装VMware Tools

vmtools有以下功能:

正常执行虚拟机的电源操作。
在执行各种电源操作期间在客户机操作系统中运行 VMware 提供的脚本或用户配置的脚本。
在客户机操作系统中运行应用程序、命令和文件系统操作,以增强客户机自动化。
针对客户机用户操作进行身份验证。
定期从客户机收集网络、磁盘和内存使用情况信息。
生成从客户机操作系统到主机的检测信号,以便 VMware High Availability 可以确定客户机操作系统的可用性。
在客户机操作系统与主机或客户端桌面之间同步时钟。
使客户机文件系统进入静默状态,以便主机可以捕获与文件系统一致的客户机快照。
在使客户机文件系统进入静默状态时,运行 pre-freeze-script.bat 和 post-thaw-script.bat。
打开虚拟机电源后立即自定义客户机操作系统。
在 VMware Workstation 和 VMware Fusion 上,在主机文件系统与客户机文件系统之间启用“共享文件夹”。
支持在客户机操作系统与主机或客户端桌面之间复制和粘贴文本、图形和文件。
没有安装vmtools的虚拟机,通过vsphere client查看虚拟机信息时,是看不到虚拟机IP地址与hostname.

VMware Tools安装步骤:
1、登录vsphere控制台在要安装的虚机上,更改配置,将光驱设置为客户端设备。
1.png
2、右键客户机操作系统--安装VMware Tools
3、ssh登陆要安装的虚机,挂载vmtools镜像

mkdir /root/cdrom
mount /dev/cdrom /root/cdrom

4、解压

cd /root/cdrom
tar zvxf VMwareTools-10.2.1-8267844.tar.gz -C /root/

5、开始安装:

yum install perl -y  #安装perl包
cd /root/cdrom/VMwareTools
./vmware-install.pl 
# 询问是否继续安装,默认为否
open-vm-tools packages are available from the OS vendor and VMware recommends 
using open-vm-tools packages. See http://kb.vmware.com/kb/2073803 for more 
information.
Do you still want to proceed with this installation? [no] yes
 
# 安装路径,默认即可
Creating a new VMware Tools installer database using the tar4 format.
 
Installing VMware Tools.
 
In which directory do you want to install the binary files? 
[/usr/bin] 
 
# 自动启动文件路径,默认即可
What is the directory that contains the init directories (rc0.d/ to rc6.d/)? 
[/etc/rc.d] 
 
# init文件夹路径,默认即可
What is the directory that contains the init scripts? 
[/etc/rc.d/init.d] 
 
# sbin文件夹路径,默认即可
In which directory do you want to install the daemon files? 
[/usr/sbin] 
 
# vmware-tools库目录路径,默认即可
In which directory do you want to install the library files? 
[/usr/lib/vmware-tools] 
 
# vmware-tools库目录不存在,需要创建,默认即可
The path "/usr/lib/vmware-tools" does not exist currently. This program is 
going to create it, including needed parent directories. Is this what you want?
[yes] 
 
# agent library文件夹路径,默认即可
In which directory do you want to install the common agent library files? 
[/usr/lib] 
 
# agent transient文件夹路径,默认即可
In which directory do you want to install the common agent transient files? 
[/var/lib] 
 
# 帮助文档路径,默认即可
In which directory do you want to install the documentation files? 
[/usr/share/doc/vmware-tools] 
 
# 帮助文档文件夹并不存在,需要创建,默认即可
The path "/usr/share/doc/vmware-tools" does not exist currently. This program 
is going to create it, including needed parent directories. Is this what you 
want? [yes] 
 
# 执行configure脚本,默认即可
Before running VMware Tools for the first time, you need to configure it by 
invoking the following command: "/usr/bin/vmware-config-tools.pl". Do you want 
this program to invoke the command for you now? [yes] 
 
# 是否启用文件文件夹共享,esxi环境无法使用,默认即可
The VMware Host-Guest Filesystem allows for shared folders between the host OS 
and the guest OS in a Fusion or Workstation virtual environment.  Do you wish 
to enable this feature? [no] 
 
# vmblock,不支持esxi环境,默认即可
The vmblock enables dragging or copying files between host and guest in a 
Fusion or Workstation virtual environment.  Do you wish to enable this feature?
[no] 
 
# 是否启用VMware automatic kernel modules,默认即可
Would you like to enable VMware automatic kernel modules?
[yes] 
 
# 是否启用vgauth,默认即可
Do you want to enable Guest Authentication (vgauth)? Enabling vgauth is needed 
if you want to enable Common Agent (caf). [yes] 
 
# 是否启用Common Agent,默认即可
Do you want to enable Common Agent (caf)? [no] 
No X install found.

开始安装:

Creating a new initrd boot image for the kernel.
Generating the key and certificate files.
Successfully generated the key and certificate files.
manageSELinux install: The 'semanage' utility was not found.
There was an error configuring the SELinux security context for VMware Tools.  
Please make certain that SELinux is configured correctly.
 
The configuration of VMware Tools 10.2.1 build-8267844 for Linux for this 
running kernel completed successfully.
 
You must restart your X session before any mouse or graphics changes take 
effect.
 
To enable advanced X features (e.g., guest resolution fit, drag and drop, and 
file and text copy/paste), you will need to do one (or more) of the following:
1. Manually start /usr/bin/vmware-user
2. Log out and log back into your desktop session
3. Restart your X session.
 
Enjoy,
 
--the VMware team
 
Found VMware Tools CDROM mounted at /root/cdrom. Ejecting device /dev/sr0 ...

安装完成后会自动卸载cdrom.
6、删除安装包:

rm /root/cdrom /root/VMwareTools -rf

7、查看vmtools服务状态:

systemctl status vmware-tools

参考文档:
https://www.vmware.com/files/cn/pdf/vmware-tools-installation-configuration.pdf
https://ngx.hk/2018/08/22/vmware-tools%E7%AE%80%E4%BB%8B%E4%B8%8E%E5%AE%89%E8%A3%85.html

CentOS 7.5快速安装ss服务

gfw
1、安装epel源:

yum install epel-release -y

2、更新当前系统:

yum update -y

3、安装升级pip

yum install python-pip -y
pip install -U pip

4、pip安装shadowsocks

pip install shadowsocks

5、创建配置文件:

cat <<EOF>> /etc/shadowsocks.json
{
    "server":"VPS IP",
    "local_address":"127.0.0.1",
    "local_port":8888,
    "port_password":{
         "9991":"PASSWORD",    #根据需要增减
         "9992":"PASSWORD"
    },
    "timeout":600,
    "method":"aes-256-cfb",
    "fast_open": false
}
EOF

参数说明:

server:主机名或服务器IP(IPv4/IPv6)。
server_port:服务器端口号。
local_port:本地端口号。
port_password:用于加密传输的端口和密码。
timeout:连接超时(以秒为单位)。
method:加密方法,“bf-cfb”,“aes-256-cfb”,“des-cfb”,“rc4”等。默认为表,不安全。建议使用“aes-256-cfb”。
auth:一次性认证,设置为true以启用一次性认证功能。
fast_open:true 或 false。Linux 内核在3.7+,可以开启 fast_open 以降低延迟。

6、启动服务并加入开机启动项:

/usr/bin/python2 /usr/bin/ssserver -c /etc/shadowsocks.json >> /data/ss.log 2>&1 &
echo "/usr/bin/python2 /usr/bin/ssserver -c /etc/shadowsocks.json >> /data/ss.log 2>&1 &" >> /etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local 

至此,安装完成,直接在ShadowsocksR客户端配置相关IP和端口密码、加密算法即可。

Docker环境下安装部署Redis5.0挂载外部配置和数据

作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
docker-redis.png
本文记录docker下安装部署redis5.0的过程:
os版本centos7.5
先更新 yum 软件管理器,然后再安装 Docker

[root@localhost /] yum -y update
[root@localhost /] yum install -y docker

验证安装,查看 Docker 版本信息

[root@localhost /] docker -v
Docker version 1.13.1, build 8633870/1.13.1
You have new mail in /var/spool/mail/root

启动、停止、重启docker服务、加入开机启动

systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker

安装redis5.0镜像

[root@sso-nginx-b ~]# systemctl start docker
[root@sso-nginx-b ~]# docker pull redis:5.0
Trying to pull repository docker.io/library/redis ... 
5.0: Pulling from docker.io/library/redis
f17d81b4b692: Pull complete 
b32474098757: Pull complete 
8980cabe8bc2: Pull complete 
2719bdbf9516: Pull complete 
f306130d78e3: Pull complete 
3e09204f8155: Pull complete 
Digest: sha256:481678b4b5ea1cb4e8d38ed6677b2da9b9e057cf7e1b6c988ba96651c6f6eff3
Status: Downloaded newer image for docker.io/redis:5.0

创建redis运行目录及文件

mkdir -p /data/docker/redis
touch /data/docker/redis/redis.conf

redis.conf文件内容如下:

bind 172.17.0.2 127.0.0.1
#bind 0.0.0.0
protected-mode yes
port 6380
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no   #如果daemonize yes无法启动容器
supervised no
pidfile /data/docker/redis/6380.pid
loglevel notice
logfile "6380.log"
databases 16
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
slave-lazy-flush no
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble no
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

创建redis实例:

docker run -d --privileged=true --restart=always -p 6380:6380 -v /data/docker/redis/redis.conf:/etc/redis/redis.conf -v /data/docker/redis:/data --name redistest1 redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes

实例说明如下:

--privileged=true 容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
--restart=always 开机启动容器
-p 6380:6380 映射宿主机6380端口到docker端口6380
-v /data/docker/redis/redis.conf:/etc/redis/redis.conf   映射配置文件
-v /data/docker/redis:/data  映射数据目录地址
--name redistest1 redis:5.0 redis-server /etc/redis/redis.conf   #docker名字 redis实例名 配置文件
--appendonly yes:开启持久化

查看redistest1容器的IP地址:

docker inspect redistest1 | grep -i address
            "LinkLocalIPv6Address": "",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "GlobalIPv6Address": "",
            "IPAddress": "172.17.0.2",
            "MacAddress": "02:42:ac:11:00:02",
                    "IPAddress": "172.17.0.2",
                    "GlobalIPv6Address": "",
                    "MacAddress": "02:42:ac:11:00:02"

将/data/docker/redis/redis.conf里面的bind地址修改为

bind 172.17.0.2 127.0.0.1

重启redistest1容器:

docker restart redistest1

进入redis控制台:

redis-cli -h 172.17.0.2 -p 6380  #172.17.0.2是redistest1容器的IP地址,也可以用宿主机IP地址进入

启动另外一个redis实例:

docker run -d --privileged=true --restart=always -p 6381:6381 -v /data/docker/redis-6381/redis.conf:/etc/redis/redis.conf -v /data/docker/redis-6381:/data --name redistest2 redis:5.0 redis-server /etc/redis/redis.conf --appendonly yes

至此,docker上安装部署redis完毕.

最新

分类

归档

评论

  • 安安: 都是af
  • Liang: 嗯,有点不通顺·
  • 王庭威: “MySQL互为主从...
  • Liang: 贴下编译参数和步骤,...
  • shao3911: 您好,为什么我在编译...
  • aliang: 先看是yum安装还是...
  • aliang: 将原来的nginx安...
  • yen: 3、如果要回滚的话,...
  • yen: 刚好需要升级ngin...
  • 文雨: 一些新的method...

其它