ansible源码安装zabbix agent

名词解释
	[root@iZ23nvakegvZ zabbix_agent]# ls  
	files  需要安装包  
	handlers  重启相关信息  
	meta  galaxy_info相关信息  
	tasks  安装部署的任务  
	templates  相关的模板配置文件 
	vars   变量配置文件  
	[root@iZ23nvakegvZ zabbix_agent]#
目录结构
	[root@iZ23nvakegvZ zabbix_agent]# tree
	
	.
	
	├── hosts
	├── roles
	│   └── zabbix_agent
	│       ├── files
	│       │   └── zabbix-2.4.5.tar.gz
	│       ├── handlers
	│       ├── meta
	│       │   └── main.yml
	│       ├── tasks
	│       │   ├── copy.yml
	│       │   ├── delete.yml
	│       │   ├── install.yml
	│       │   └── main.yml
	│       ├── templates
	│       │   ├── zabbix_agentd
	│       │   └── zabbix_agentd.conf
	│       └── vars
	│           └── main.yml
	└── site.yml
	
	8 directories, 11 files
	
	[root@iZ23nvakegvZ zabbix_agent]#
[Read More]

java中for循环的优化

java中for循环的优化

作为java中三大循环之一的for循环,大家应该用的特别多,今天那就以我在项目中遇到的for循环优化来聊一聊for循环的优化.

首先是for循环的写法上面

最原始的写法

public void optimalizeFor() {
   List list = new ArrayList<>();
   for (int i = 0; i < list.size(); i++) { 
      }        
}
调优写法
public void optimalizeFor() {
   List list = new ArrayList<>();
     for (int i = 0, len = list.size(); i < len; i++) {
       }
      }
结果
优化前用时:47871
优化后用时:566
#为什么
在循环中,循环条件会被反复计算,如果不使用复杂表达式,而是使循环条件不变的话,程序将会运行的更快,所以在循环中应该避免使用复杂的表达式
java之循环嵌套
外小内大型
                for (int i = 0; i < 10; i++) {
                    for (int j = 0; j < 100000; j++) {
                    }
                }
外大内小型
                for (int i = 0; i < 100000; i++) {
                    for (int j = 0; j < 10; j++) {
                    }
                }
结果
                优化前用时:7541608
                优化后用时:4316
为什么
        从结果可以看出来所用时间的差异非常大,这个就像拿大文件和小文件一样的道理
循环嵌套提取不需要循环的逻辑
无用逻辑再循环中
                int a = 10, b = 11;
                for (int i = 0; i < 10; i++) {
                    i = i * a * b;
                }
无用逻辑再循环外
                int c = a * b;
                for (int i = 0; i < 10; i++) {
                    i = i * c;
                }
结果
                优化前用时:48664
                优化后用时:651
为什么
        还是像之前说到的,避免在循环中重复的计算发生
异常处理
异常在循环中
                for (int i = 0; i < 10; i++) {
                    try {

                    } catch (Exception e) {

                    }
                }
异常在循环外
                try {
                    for (int i = 0; i < 10; i++) {
                    }
                } catch (Exception e) {

                }
结果
                优化前用时:33916
                优化后用时:489
为什么
        每次抓捕异常时非常耗时的,应该放在循环外一次性抓取,而不是应该放在循环内去每循环一次都抓取一次异常
java 

牛刀小试之docker容器系列(八)

docker-创建nginx镜像

查看目录文件
[root@test-devops nginx_ubuntu]# pwd

/home/docker/nginx_ubuntu

[root@test-devops nginx_ubuntu]# tree

.

├── Dockerfile

└── run.sh



0 directories, 2 files
查看Dockerfile文件
[root@test-devops nginx_ubuntu]# cat Dockerfile

# 继承的镜像

FROM sshd/ubuntu



# 作者信息

MAINTAINER from steven (www.opsnotes.net)



# install

RUN apt-get install -y nginx

RUN sed -i 's/listen \[\:\:\]:80 default_server ipv6only=on;/#listen \[\:\:\]:80 default_server ipv6only=on;/g' /etc/nginx/sites-enabled/default

RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf



# add scripts

ADD run.sh /run.sh

RUN chmod +x /*.sh



WORKDIR /etc/nginx



# Expose ports.

EXPOSE 80



# Define default command.

CMD ["/run.sh"]

[root@test-devops nginx_ubuntu]#
[Read More]
docker 

ansible-playbook语法检查

列出主机

	[root@ops-test-01 nginx_v2]# ansible-playbook -i hosts --list-hosts web-tls.yml
	
	playbook: web-tls.yml
	
	  play #1 (Configure webserver with nginx and tls): host count=1
	
	    web_test01
	
	[root@ops-test-01 nginx_v2]#

语法检查

	[root@ops-test-01 nginx_v2]# ansible-playbook --syntax-check  web-tls.yml
	
	playbook: web-tls.yml
	
	[root@ops-test-01 nginx_v2]#
[Read More]

ansible playbook

ansible playbook安装nginx https

查看目录结构

    [root@iZ23nvakegvZ nginx_v2]# tree

    .

    ├── files

    │   ├── nginx.crt

    │   ├── nginx.key

    ├── hosts

    ├── templates

    │   ├── index.html.j2

    │   └── test.conf.j2

    └── web-tls.yml



    2 directories, 8 files

    [root@iZ23nvakegvZ nginx_v2]#
[Read More]

MySQL忘记密码恢复方法:

MySQL忘记密码恢复方法

MySQL密码的恢复方法之一 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库。 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录和修改MySQL的信息。可以采用将MySQL对外的端口封闭,并且停止Apache以及所有的用户进程的方法实现服务器的准安全状态。最安全的状态是到服务器的Console上面操作,并且拔掉网线。 2.修改MySQL的登录设置: # vi /etc/my.cnf 在[mysqld]的段中加上一句:skip-grant-tables 保存并且退出vi。 3.重新启动mysqld # /etc/init.d/mysqld restart ( service mysqld restart ) 4.登录并修改MySQL的root密码 mysql> USE mysql ; mysql> UPDATE user SET Password = password ( 'new-password' ) WHERE User = 'root' ; mysql> flush privileges ; mysql> quit 5.将MySQL的登录设置修改回来 # vi /etc/my.cnf 将刚才在[mysqld]的段中加上的skip-grant-tables删除 保存并且退出vi。 6.重新启动mysqld # /etc/init.d/mysqld restart ( service mysqld restart ) 7.恢复服务器的正常工作状态 将步骤一中的操作逆向操作。恢复服务器的工作状态。 MySQL密码的恢复方法之二 如果忘记了MySQL的root密码,可以用以下方法重新设置: 1. KILL掉系统里的MySQL进程; killall -TERM mysqld 2. 用以下命令启动MySQL,以不检查权限的方式启动; safe_mysqld --skip-grant-tables & 3. [Read More]
mysql 

使用nginx模块简单防止ddos攻击

使用nginx模块简单防止ddos攻击

第一种方法: 官方模块:http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html 1.在Nginx配置文件nginx.conf的http选项中添加如下内容 在nginx.conf的配置中添加了Nginx白名单 ### Nginx Limint config geo $limited{ default 1; 127.0.0.1 0; 192.168.100.18 0; } map $limited $limit{ 1 $binary_remote_addr; 0 ""; } limit_req_zone $limit zone=one:10m rate=5r/s; 2.在虚拟目录中直接应用 [root@frontend-01 ~]# cat /etc/nginx/conf.d/test.conf server{ listen 80; server_name yourdomain.com; root /yourdist/; access_log /yourdomain.com.access.log json; error_log /yourdomain.com.error.log warn; location /test/api/v3/ { ## 只针对api接口调用做Nginx IP地址限速 limit_req zone=one burst=10 nodelay; proxy_pass http://test; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header Host $host; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers "accept, content-type"; } location /test/auth/v3/ { proxy_pass http://test; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Host $server_name; proxy_set_header Host $host; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Headers "accept, content-type"; } } [root@frontend-01 ~]# 3. [Read More]
nginx 

深入理解tcp time wait

深入理解tcp time wait

#深入理解tcp time wait TIME_WAIT 是在TCP协议中很模糊的概念,它可能使socke能陷入的一种时间相对比较长的状态,过多的TIME_WAIT会影响新socket的建立。 TIME_WAIT为什么会存在?它的作用又是什么? 下面我们就来理解下TIME_WAIT 这张图详细的列出了TCP建立连接和断开连接的各个TCP状态之间的转换。红色的代表server,蓝色的代表client。下面列出各自的TCP状态转换条件 #TCP建立连接 Client: 向server发送 SYN 包,表示请求建立连接,进入 SYN_SENT 状态; Server: 接收来自client的 SYN 包,发送 SYN/ACK 包,代表client->server单向tcp连接已经建立, 进入 SYN_RCVD 状态; Client: 接收到来自server的 SYN/ACK 包,发送给server ACK 包,进入 Established 状态; Server: 收到client的 ACK 包,代表 server->client 的单向tcp连接也建立,此时进入 Established 状态; #TCP断开连接 先引入两个概念,首先调用close()是"主动关闭"(active close),另一个是"被动关闭"(passive close)。一般我们连上ftp或者http,断开连接的都是客户端。看上面的图,"主动关闭"端状态要经历3个状态,而TIME_WAIT是属于“主动关闭”端最后的一个tcp状态。 client: 主动调用close(),发送 FIN 包,此时client就"主动关闭"端,进入 FIN_WAIT_1 状态; Server: server自然成为"被动关闭"端,收到来自client的 FIN 包,发送 ACK 包,代表client->server单向tcp连接已经关闭,进入 CLOSE_WAIT 状态; Client: 接收到来自server的 ACK 包,啥都不做,client->server单向的tcp连接已经断开,不能再发送应用层数据,进入 FIN_WAIT_2 状态; Server: server端给client端发送 FIN 包,代表准备关闭server->client的tcp连接,server进入LAST_ACK 状态; Client: 收到来自server的 FIN 包,发送 ACK 包,此时进入 TIME_WAIT 状态; Server: 收到Client的 ACK 包,就进入closed状态,Server端此次socket tcp连接完全端口; Client: 持续TIME_WAIT状态"一段时间"; #理解TIME_WAIT 理解了上面的原理之后,接着就是正式介绍TIME_WAIT。TIME_WAIT的时间大多数情况下都是2倍的MSL(Maximum Segment Lifetime),MSL是一个数据包在网络上能生存的最长生命周期,一旦超过MSL的包就会被丢弃。从上面可以看到,TIME_WAIT是“主动关闭”端的最后一个状态,引入TIME_WAIT的原因有: 1. [Read More]
tcp 

编译nginx status模块以及zabbix监控nginx状态

编译nginx status模块以及zabbix监控nginx状态

背景原因:
因刚换工作,突然发现nginx status状态没有被监控,然后在准备添加nginx status的时候,发现之前同事在编译nginx的时候没有编译nginx status模块,可恶,常用的模块都不编译.主要两部分,
第一部分:编译nginx模块
第二部分:zabbix 监控nginx status,其实之前写过,稍微把监控方式优化了下。
一、nginx 编译模块
1.下载nginx安装包
root@gcs:/home/steven# wget http://nginx.org/download/nginx-1.6.3.tar.gz
--2015-09-09 17:27:40--  http://nginx.org/download/nginx-1.6.3.tar.gz
Resolving nginx.org (nginx.org)... 206.251.255.63, 2606:7100:1:69::3f
Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 805253 (786K) [application/octet-stream]
Saving to: ‘nginx-1.6.3.tar.gz’

100%[============================================================================================================>] 805,253      569KB/s   in 1.4s

2015-09-09 17:27:42 (569 KB/s) - ‘nginx-1.6.3.tar.gz’ saved [805253/805253]

root@gcs:/home/steven# ls
nginx-1.6.3.tar.gz
root@gcs:/home/steven#
[Read More]
nginx 

zabbix使用微信接口报警

zabbix使用微信接口报警

安装部署之前需要先安装php,关于PHP的安装部署,我在这里就不详细说明了。

微信公众号设置:

1.先注册微信公主号
2.选择需要给发送的人点击头像就可以得到如下链接。我们获取“tofakeid”的ID
https://mp.weixin.qq.com/cgi-bin/singlesendpage?t=message/send&action=index&tofakeid=750362702&token=430276069&lang=zh_CN
3.如图是对Geek这个用户选择发送:

weixin

[Read More]