最近,因为业务需要,一下上架了27台服务器,这些服务器在交付之前,都要进行基础的系统初始化,如:修改密码、修改ssh端口、修改主机名、常见工具安装、yum源本地化、内核参数优化等。如果一台一台的手动操作,难免效率太低,所以偷了个懒,写了个小脚本来自动执行,废话少说,脚本内容如下:
Redis报错:Redis is configured to save RDB snapshots
上午刚上班没一会,测试的兄弟找过来内网的redis服务连不上了,web访问redis的时候报错:
-MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.
赶紧登录服务器检查;端口监听正常,进程正常,在服务器上使用redis-cli客户端进入redis,使用命令
1 | 127.0.0.1:6379> keys * |
顺利得到结果,说明redis服务是正常的,那么为毛web端无法连接呢?
赶紧查查redis日志,but,找了半天没发现redis日志在哪,翻了下配置文件,那一刻我震惊了!
1 | logfile "" |
不知道之前是哪位“大神”配置的,居然没有指定日志文件路径,我勒个擦擦!
好吧,那让我再仔细瞅瞅这个报错吧。
以我英语四级差一点就过了的水准,仔细瞅了瞅这一大串英文字母,貌似是在说redis不能在硬盘上持久化,那一刻瞬间灵光一闪:
这特么不会又是磁盘空间满了吧?(我为什么要说又呢)
编译安装openresty+php
1. 编译安装openresty
准备相关软件包
1 | # wget https://openresty.org/download/openresty-1.11.2.1.tar.gz |
解决依赖关系
1 | # yum install -y gcc gcc-c++ perl-devel perl-ExtUtils-Embed openssl-devel postgresql-devel libxml2-devel libxslt-devel gd-devel GeoIP-devel |
如果启用了–with-http_drizzle_module参数,则需要如下配置
1 | # tar xzvf drizzle7-2011.07.21.tar.gz |
编译安装zabbix
前言:
zabbix是一个基于WEB页面提供分布式系统监视以及网络监视功能的企业级开源解决方案。基于C/S架构,支持多种采集方式和采集客户端,有专用的Agent,也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上,它将采集到的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。
对于运维工作来说,zabbix是一个不可或缺的企业监控工具,本文主要出于学习的目的,对zabbix的编译安装做一下简单介绍,*在日常业务环境中还是建议直接通过yum方式或者自己打包rpm方式安装。***
1.安装Zabbix-Server
安装平台为CentOS 6.7,使用Zabbix版本为2.4.7,下载地址:http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.4.7/zabbix-2.4.7.tar.gz/download
1.1 安装依赖包
1 | # yum install -y gcc gcc-c++ autoconf httpd php mysql mysql-server php-mysql httpd-manual mod_ssl mod_perl mod_auth_mysql php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-bcmath mysql-connector-odbc mysql-devel libdbi-dbd-mysql net-snmp-devel curl-devel unixODBC-devel OpenIPMI-devel java-devel |
此处,为了方便,使用的MySQL、PHP环境为yum安装,当然如果你出于学习考虑,也可以自己编译安装MySQL、PHP。
1.2 配置PHP环境
1 | # vim /etc/php.ini |
使用Goodsync+FTP实现简单的跨服务器数据同步
前言
近来,入职了一家新公司,公司是一家垂直电商平台,当前的业务量很小,服务器数量也不多,之前并没有专职运维,所以很多工作都得从零开始。
目前的业务架构主要是.NET+WCF,其中后端两台WCF服务器(Windows)通过LVS来实现负载均衡,两台服务器上的程序文件一致;然而这两台服务器并没有使用共享存储的方式来确保数据一致,所以就造成了一个很痛苦的现实:每次发布程序更新的时候,我都需要在两台服务器上都操作一次,这样很没有必要,也很浪费时间。所以当务之急我需要解决两台WCF服务器数据不一致的问题。
理想的状态应该是两台服务器配置共享存储,将程序文件放在共享存储上,这样可以确保两台服务器的程序文件完全一致。
然而回到实际工作中,因为我们目前处于业务架构变更的阶段,整个线上业务将陆续放弃.NET环境,当前线上的.NET、WCF服务器也将在未来一段时间下线,所以从成本上考虑,使用共享存储并不实际;于是我开始考虑通过文件实时同步来实现两端程序文件一致。
作为一个Linuxer,理所当然的第一时间想到了rsync,然而在进一步研究之后,我选择放弃rsync。因为在Windows环境中并没有一种很好的类似inotify的机制来配合rsync实现文件的实时监控,要实现文件的实时同步,需要自己写脚本通过计划任务来执行,这样就比较麻烦。
在经过一番考量之后,忽然想起,在上家公司很久之前用过一款工具叫做Goodsync,还挺好用。于是又重新开始研究了一下,果然,Goodsync在Windows中简直是神器啊,配置简单,功能强大,支持通过FTP的方式传输数据,实时监控数据变化并同步变更后的数据,覆盖同步前先备份数据到特定目录,支持双向同步,这简直就是为我量身定制的。
说干就干,下面就来详细写一下部署过程。
使用Xshell来配置Linux服务器key认证登录
前言
在Linux运维工作中,当所负责维护的服务器规模达到一定程度后,管理大量的登录密码成为了一件非常麻烦的事,同时使用密码登录也存在被暴力破解的风险。
那么如何才能保证在不影响安全性的前提下提高运维工作效率呢,其实我们可以采用SSH-KEY认证的方式来实现免密码登录。在业务允许的前提下,我们可以很容易做到一套SSH-KEY管理所有服务器,从此告别繁琐的密码管理,节省大量时间,可以与白富美谈谈人生理想什么的也是极好的。
1.SSH-KEY认证的原理简介
在谈及如何配置SSH-KEY认证前,有必要花费少量篇幅来讲一讲SSH-KEY认证的原理,这样更有助于我们快速部署SSH-KEY认证。
所谓的密钥认证,实际上是使用一对加密字符串,一个称为公钥(public key),任何人都可以看到其内容,用于加密;另一个称为密钥(private key),只有拥有者才能看到,用于解密。通过公钥加密过的密文使用密钥可以轻松解密,但根据公钥来猜测密钥却十分困难。
ssh 的密钥认证就是使用了这一特性。服务器和客户端都各自拥有自己的公钥和密钥。在认证之前,将公钥上传到服务器,然后客户端使用密钥就可以顺利通过认证,登录服务器执行相关操作,整个过程无须输入密码,方便快捷。
2.使用Xshell客户端生成KEY
生成KEY的方式有很多种,其中在Linux系统下可以使用ssh-keygen -t rsa命令来生成KEY;同时目前市面上常见的SSH客户端工具(Xshell、SecureCRT、Putty等)都支持生成KEY。
本文由于作者个人习惯,采用Xshell客户端来生成KEY。
一个关于屏蔽恶意IP的shell脚本
最近,因为工作上的需求,需要写一个脚本来实现用户输入一个IP,然后自动添加到iptables拒绝列表以及hosts.deny文件中,以实现拦截恶意IP访问的目的。因为之前写过一个功能简单的脚本,为了省事就直接拿过来改了改,主要想实现以下几点需求:
1.拒绝IP访问:
提示用户输入一个IP,然后将此IP添加到iptables拒绝列表,同时将此IP添加到hosts.deny文件中,实现拒绝IP访问。
2.查找IP是否被拒绝并提示用户是否删除:
提示用户输入一个IP,然后查询此IP是否存在于iptables拒绝列表、hosts.deny文件、route list,将查询结果输出到屏幕;同时输出一个选项菜单,让用户选择是否从拒绝列表中删除IP。
Hello World !
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1 | $ hexo new "My New Post" |
More info: Writing
Run server
1 | $ hexo server |
More info: Server