Fork me on GitHub
Suzf  Blog

Archive Linux

数据备份 之网站镜像方案 sersync

网站镜像方案:sersync & rsync

spacer.gif

一、需要软件:sersync、rsync
sersync 访问网址:http://code.google.com/p/sersync/

二、试验环境
主服务器(内容发布服务器):Node1 172.16.7.30 需要安装软件:sersync、rsync
同步目标服务器: Node2 172.16.7.81 需要安装软件:rsync [默认都已经安装好]

三、实施

主服务器配置:
3.1、解压sersync压缩包

tar zxf sersync2.5_32bit_binary_stable_final.tar.gz

mv GNU_Linux-x86/ /usr/local/rsync

[root@localhost rsync]# pwd

/usr/local/rsync

[root@localhost rsync]# ls

confxml.xml sersync2

2.2、编辑config.xml文件,修改如下信息

说明信息:
表明将主服务器的本地 /backup 路径下的文件,同步到远程服务器172.16.7.30上的test_rsync模块上。
crontab附图:显示每600毫秒同步(下图是config.xml中内容,不需要修改)

2.3、在主服务器上开启sersync守护进程,使sersync在后台运行,开启实时同步。
./sersync2 -d

以上信息表明已经同步!

1、同步目标服务器配置:
在Node2上新建文件/etc/rsyncd.conf ,编辑如下

vim /etc/rsyncd.conf [默认没有]

具体解释:
(1)将同步过来的文件放入path指定的路径/backupl。
(2)如果有多台从服务器,则在每台都需要进行类似的rsync配置。
配置好之后,开启rsync守护进程rsync --daemon

四、测试查看是否内容同步
4.1、先在主服务器/backup目录下创建一个test.txt
[root@localhost rsync]# echo "jeffery"> /backup/test.txt

4.2、然后到目标服务器查看同步目录的变化,发现已经同步。

tailf /var/log/rsyncd.log

注意:
如果在从服务器增加文件,主服务器不会被同步.该技术是单向性的.

Windows 安装cwRsync

下载地址https://www.itefix.net/download/cwRsync_5.3.0_Free.zip

这里我放到了c:/cwRsync
备份保存路径 c:/backup

将软件包解压放到C:\cwrsync 找到rsync.exe 以管理员身份运行就好了

执行下面命令可以看到如下信息表示同步成

这表示把服务器test_rsync指定的目录 同步到本地c盘的backup目录了

 

Expect自动化控制简单介绍

telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk工具,将交互程序包装在X11的图形用户界面中。

shell脚本需要交互的地方可以使用here文档是实现,但是有些命令却需要用户手动去就交互如passwd、scp

对自动部署免去用户交互很痛苦,expect能很好的解决这类问题。

expect的核心是spawn expect send set

spawn 调用要执行的命令

expect 等待命令提示信息的出现,也就是捕捉用户输入的提示:

send 发送需要交互的值,替代了用户手动输入内容

set 设置变量值

interact 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。如果没有这一句登录完成后会退出,而不是留在远程终端上。

expect eof 这个一定要加,与spawn对应表示捕获终端输出信息终止,类似于if....endif

expect脚本必须以interact或expect eof结束,执行自动化任务通常expect eof就够了。

设置expect永不超时

set timeout -1

设置expect 300秒超时,如果超过300没有expect内容出现,则推出

set timeout 300

expect编写语法,expect使用的是tcl语法。

一条Tcl命令由空格分割的单词组成. 其中, 第一个单词是命令名称, 其余的是命令参数

cmd arg arg arg

$符号代表变量的值. 在本例中, 变量名称是foo.

$foo

方括号执行了一个嵌套命令. 例如, 如果你想传递一个命令的结果作为另外一个命令的参数, 那么你使用这个符号

[cmd arg]

双引号把词组标记为命令的一个参数. "$"符号和方括号在双引号内仍被解释

"some stuff"

大括号也把词组标记为命令的一个参数. 但是, 其他符号在大括号内不被解释

{some stuff}

反斜线符号是用来引用特殊符号. 例如:\n 代表换行. 反斜线符号也被用来关闭"$"符号, 引号,方括号和大括号的特殊含义

#自动登录运程主机并执行命令

[root@www expect]# cat ssh_log_cmd.expect
#!/usr/bin/expect
set user "root"
set password "jeffery"
set ip "172.16.7.91"

spawn ssh $user@$ip

expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "$password\r"}
}
expect "]*"
send "touch /tmp/haha.txt\r"
expect "]*"
send "echo haha > /tmp/haha.txt\r"
expect "]*"
send "exit\r"

#使用rsync同步文件

[root@www expect]# cat sync_file.expect
#!/usr/bin/expect
# Desc: auto sync file
# Author: Jeffery.su
# Date: 15/09/2014

set user "root"
set password "jeffery"
set host "172.16.7.91"

spawn rsync -av $user@$host:/tmp/haha.txt /tmp

expect {
"yes/no" {send "yes\r"}
"password" {send "$password\r"}
}

#参数的使用

[root@www expect]# cat trans_para.expect
#!/usr/bin/expect
# Desc: transmit parameter
# Author: Jeffery.Su
# Date: 15/09/2014

set user [lindex $argv 0]
set host [lindex $argv 1]
set password "jeffery"
set cm [lindex $argv 2]

spawn ssh $user@$host

expect {
"yes/no" {send "yes\r"}
"password" {send "$password\r"}
}

expect "]*"
send "$cm\r"
expect "]*"
send "exit\r"

#调用 expect trans_para.expect root 172.16.7.91 date

 

Zabbix之监控Nginx状态信息

nginx需要支持 http_stub_status_module 编译的时候需要使用--with-http_stub_status_module
yum默认支持此选项

1. 配置nginx stuats
源码: vim nginx.conf
yum: vim /etc/nginx/conf.d/default.conf
#and add the following to your server block 

location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
allow 172.16.7.70; #Put your servers IPaddress instead of 172.16.7.70
deny all;

#这里是线上Nginx的配置【yum】
location /nginx_status {
                stub_status on;
                allow 127.0.0.1;
                allow 172.16.99.38;
        }

  # 检测配置文件
  nginx -t
  # 重新加载配置文件
  nginx -s reload        

2.查看Nginx状态信息
curl localhost/nginx_status

注解:
Active connections: 1 当前活动的连接数
server accepts handled requests
 3721 3721 3714
 3721  从启动到现在一共处理的连接数
 3721  从启动到现在成功创建的握手的次数
 3714   总共处理的请求数(requests)
 请求的丢失数=(握手-连接)

connection 连接数,tcp连接
request http请求,GET/POST/DELETE

Reading: 0 Writing: 1 Waiting: 0
Reading: 0 读取客户端Header的信息数 请求头
Writing: 1 返回给客户端的header的信息数 响应头
Waiting: 0 等待的请求数

3. zabbix客户端配置 

#创建检测脚本
mkdir /usr/local/zabbix/scripts 

vi /usr/local/zabbix/scripts/nginx_status.sh 

#!/bin/bash 
# Script to fetch nginx statuses for tribily monitoring systems 
# Author: [email protected] 
# License: GPLv2 

# Set Variables 
#BKUP_DATE=`/bin/date +%Y%m%d` 
#LOG="/etc/zabbix/nginx_status.log" 
HOST=`/sbin/ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` 
PORT="80" 

# Functions to return nginx stats 

function active { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Active' | awk '{print $NF}' 
} 

function reading { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Reading' | awk '{print $2}' 
} 

function writing { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Writing' | awk '{print $4}' 
} 

function waiting { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Waiting' | awk '{print $6}' 
} 

function accepts { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $1}' 
} 

function handled { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $2}' 
} 

function requests { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $3}' 
} 

# Run the requested function 
$1 

# 对脚本赋予执行权限
chmod +x /usr/local/zabbix/scripts/nginx_status.sh 

# 修改agent 配置文件
vim /usr/local/zabbix/etc/zabbix_agentd.conf
#开启自定义KEY功能
UnsafeUserParameters=1
UserParameter=nginx.accepts,/usr/local/zabbix/scripts/nginx_status.sh accepts
UserParameter=nginx.handled,/usr/local/zabbix/scripts/nginx_status.sh handled
UserParameter=nginx.requests,/usr/local/zabbix/scripts/nginx_status.sh requests
UserParameter=nginx.connections.active,/usr/local/zabbix/scripts/nginx_status.sh active
UserParameter=nginx.connections.reading,/usr/local/zabbix/scripts/nginx_status.sh reading
UserParameter=nginx.connections.writing,/usr/local/zabbix/scripts/nginx_status.sh writing
UserParameter=nginx.connections.waiting,/usr/local/zabbix/scripts/nginx_status.sh waiting 

#重启zabbix_agentd
/etc/init.d/zabbix_agentd  restart

4.服务端测试

# 有信息返回说明配置正常
# /usr/local/zabbix/bin/zabbix_get -s 172.16.99.25 -knginx.accepts
12877

# 有图有真相

#模板
http://pan.baidu.com/s/1c00Aqcg

FAQ : 若果是无返回信息则说明agent端配置错误这是查看zabbix_agentd.log 的输出日志,排查错误

#查看who权限
# ll /sbin/ifconfig
-rwx------ 1 root root 73936 May 10 2012 /sbin/ifconfig
# ll /usr/bin/who
-rwx------ 1 root root 48952 Nov 22 2013 /usr/bin/who
果真没有执行权限
visudo 授权或是 chmod +x /usr/bin/who &&  chmod +x  /sbin/ifconfig 

 

LNMP之源码自定义安装

LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。

Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。代表版本有:debian、centos、ubuntu、fedora、gentoo等。
Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
Mysql是一个小型关系型数据库管理系统。
PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
这四种软件均为免费开源软件,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。

Nginx之Upstream模块实现负载均衡

1、轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 172.16.7.14 weight=10;
server 172.16.7.15 weight=10;
}

3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 172.16.7.14:88;
server 172.16.7.15:80;
}

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server server1;
server server2;
fair;
}

5、url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream backend {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}

upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;

每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。

nginx支持同时设置多组的负载均衡,用来给不用的server来使用。

client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录

location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

例:配置使用Nginx实现LB
[root@Jeffery ~]# sed -i '/^[ \t]*#/d; /^$/d' /usr/local/nginx/conf/nginx.conf
[root@Jeffery ~]# cat /usr/local/nginx/conf/nginx.conf
worker_processes 1;

events {
worker_connections 1024;
}

http {
upstream Jeffery_lb {
ip_hash; #会话保持
server 172.16.7.30:80; #后端的真实服务器
server 172.16.7.40:80; #后端的真实服务器
server 172.16.7.50:80; #后端的真实服务器
}

server {
listen 80;
server_name www.Jeffery.com;

location / {
root html;
index index.php index.html index.htm;
proxy_pass http://Jeffery_lb;
proxy_set_header Host $host;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

 

Zabbix之JMX监控Tomcat

zabbix从2.0开始添加了支持用于监控JMX应用程序的服务进程,称为"ZabbixJavagateway";它是用java写的一个程序。

一.工作原理:

zabbixserver想知道一台主机上的特定的JMX值时,它向ZabbixJavagateway询问,而ZabbixJavagateway使用"XmanagementAPI"询特定的应用程序,而前提是应用程序这端在开启时需要&l"com.sun.management.jmxremote&r"来开启JMX查询就行了。

Zabbixserver有一个特殊的进程用来连接Javagateway叫StartJavaPollers;Javagateway通过配置文件中START_POLLERS参数设置启动多个线程,在zabbix服务器这边如果一个连接所用时间超过Timeout,将会被中断,但是Javagateway将继续从JMXcounter取数据。所以

StartJavaPollers设置的值要小于等于START_POLLERS设置的值。

ZabbixJavagateway就相当于一个代理。

[译] Zabbix 之监控虚拟主机EXSI

概述

Zabbix 从2.2.0版本开始支持支持监控VMware 虚拟机的可用性。

Zabbix 可以使用low-level discovery 规则去自动发现 VMware hypervisors and virtual machines 之后创建主机并监控他们, 基于之前定义的主机规则.

在Zabbix默认数据集提供了几个现成的模板或ESX hypervisor监测VMware vCenter。

最小要求VMware vCenter或vSphere的版本是4.1。

详情

虚拟机监控是两个步骤。第一个数据是由VMware收集器Zabbix收集过程。这些过程中获取必要的信息从VMware的Web服务的SOAP协议,预处理并存储到Zabbix服务器共享内存。然后,数据用Zabbix简单检查VMware键对检索。

数据收集从一个单一的Vmware服务通过一个单一的采集进程不能共享到多个数据收集进程。然而,个收集器可以处理多个虚拟机服务。因为推荐使用ESX hypervisor直接整个vCenter服务监控。

配置

Zabbix server 编译的是侯应该使用以下参数: --with-libxml2 and --with-libcurl

下面这些参数可用于虚拟机的监控:

选项                                  区间          默认值     说明

StartVMwareCollectors  0-250            0               Number of pre-forked vmware collector instances.

VMwareCacheSize        256K-2G      8M         Shared memory size for storing VMware data.
A VMware internal check zabbix[vmware,buffer,…] can be used to monitor the VMware cache usage (see Internal checks).
Note that shared memory is not allocated if there are no vmware collector instances configured to start.

VMwareFrequency        10-86400     60         Delay in seconds between data gathering from a single VMware service.
This delay should be set to the least delay period of an

 

发现

Zabbix可以使用low-level 发现规则去自动发现VMware hypervisors and virtual machines.

 

在上面的截图中发现规则的键值是 vmware.hv.discovery[{$URL}].

主机原型

主机原型可以与低层次的发现的规则。当虚拟机被发现,这些原型成为真正主机。原型,在被发现前,不能有自己的项目和触发器,其他链接模板。发现主机将属于一个现有的主机,将现有的主机的IP的主机配置。

在主机原型配置,LLD宏用于主机名称,可见的名称和主机组原型领域。主机状态,现有的主机组和模板连锁等都是不错的选择,可以设置。

发现主机的前缀,创造了他们发现规则的名称,在主机列表。发现主机可以手动删除。发现主机也会被自动删除,以保持失去资源期(天)发现规则的价值。大多数的配置选项是只读的,除了启用/禁用主机和主机库存。发现主机不能有自己的主机的原型。

开始使用模板

在Zabbix默认数据集提供了几个现成的模板,用于监测VMware vCenter或直接ESX hypervisor。

这些模板包含预配置的LLD规则以及监测虚拟设备的一些内置的检查。

请注意:

“模板为VMware”模板可以用于VMware vCenter和ESX hypervisor监测。

“模板为VMware虚拟机管理程序”和“模板为VMware客”模板被发现,通常不应该手动连接到主机。

主机配置

在使用简单检查前需要先定义一下宏命令:

{$URL} - VMware service (vCenter or ESX hypervisor) SDK URL (https://servername/sdk).

{$USERNAME} - VMware service user name

{$PASSWORD} - VMware service {$USERNAME} user password
Example

下面的例子讲述的是如何对VMware主机进行监控

编译zabbix server 必须有一下参数 --with-libxml2 and --with-libcurl

在zabbix server设置StartVMwareCollectors 值为1 或更大

新建主机

设置为VMware认证所需的主机的宏:

关联模板

保存

稍等就会自动出现在主机里了

 

Nginx 之访问控制与状态查看

Nginx访问控制
========================================================

基于用户
基于主机

一、基于用户的访问控制
1. 检测是否有htpasswd命令

建立口令文件

查看口令文件

2. 实现认证[用户]
[root@Jeffery ~]# vim /usr/local/nginx/conf/nginx.conf

3. 访问测试
检测配置文件,重新加载

访问测试

[root@Jeffery ~]# links www.jeffery.com

二、基于主机的访问控制

修改配置文件

重载与测试

========================================================

Nginx状态查看

一、编译安装Nginx时
--with-http_stub_status_module
查看当前编译参数

[root@Jeffery ~]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.2.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC)
TLS SNI support enabled
configure arguments: --user=www --group=www --prefix=/usr/local/nginx-1.2.2 --with-http_stub_status_module --with-http_sub_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.31

二、配置Nginx
# vim /usr/local/nginx/conf/nginx.conf

重启服务

[root@Jeffery ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx-1.2.2/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx-1.2.2/conf/nginx.conf test is successful
[root@Jeffery ~]# /usr/local/nginx/sbin/nginx -s reload

查看Nginx状态信息

Active connections: 1 当前活动的连接数

server accepts handled requests
18 18 45
18 从启动到现在一共处理的连接数
18 从启动到现在成功创建的握手的次数
45 总共处理的请求数(requests)
请求的丢失数=(握手-连接)

connection 连接数,tcp连接
request http请求,GET/POST/DELETE

Reading:0 Writing: 1 Waiting: 0
Reading: 0 读取客户端Header的信息数 请求头
Writing: 1 返回给客户端的header的信息数 响应头
Waiting: 0 等待的请求数

 

Zabbix 之 web url 监控

1.首先可以在主机模板中先定义一个application

2.找一个关联着这个模板的主机[Configuration -- Hosts ],然后选择这台主机[Web],点击Create scenario

 

Save

3.查看监控状态[Monitoring -- Web]

更多信息请移驾官网:https://www.zabbix.com/documentation/2.4/manual/web_monitoring