Ansible 简明教程

Ansile简明教程

ansible是新出现的运维工具是基于Python研发的糅合了众多老牌运维工具的优点实现了批量操作系统配置、批量程序的部署、批量运行命令等功能。

一般指定远程主机列表的inventory文件格式,遵循INI文件风格中括号中的字符为组名。例如:

[webservers]  
10.10.2.1:2222  
10.10.2.2 
[dbservers]  
10.10.1.1
10.10.1.2
10.10.1.3
   
如果主机名称遵循相似的命名模式还可以使用列表的方式标识各主机例如  
[webservers]  
www[01:50].example.com  
[dbservers]  
db-[a:f].example.com  
   
inventory参数  
   
ansible基于ssh连接inventory中指定的远程主机时还可以通过参数指定其交互方式常用的参数如下所示  
ansible_ssh_host # 要连接的主机名  
ansible_ssh_port # 端口号默认是22  
ansible_ssh_user # ssh连接时默认使用的用户名  
ansible_ssh_pass # ssh连接时的密码  
ansible_sudo_pass # 使用sudo连接用户是的密码  
ansible_ssh_private_key_file # 秘钥文件如果不想使用ssh-agent管理时可以使用此选项  
ansible_shell_type # shell的类型默认sh  

并行性和 shell 命令

命令格式:

ansible -i <inventory_file> <pattern_goes_here> -m <module_name> -a <arguments> -f <concurrency> -u <user> --sudo
(--ask-sudo-pass (-K) 如果有 sudo 密码请使用此参数)
-i 指定inventory文件

默认情况下,ansible 使用的 module 是 command,这个模块并不支持 shell 变量和管道等,若想使用 shell 来执行模块,请使用-m 参数指定 shell 模块

ansible webservers -m shell -a 'date'

安装python 安装包pykafka:

ansible -i ansible_host webservers -m command -a "/home/app/.venvs/api/bin/pip install pykafka==2.0.3" -u app

git submodule 基本操作

介绍

有时候多个项目的代码会依赖一些公共的库,一般会把公共的库提取出来单独建一个仓库做版本控制,同时其他项目可以通过包含的方式来使用该库。

引用一段《Git权威指南》的话: 项目的版本库在某些情况虾需要引用其他版本库中的文件,例如公司积累了一套常用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码中,而是要独立为一个代码库,那么其他项目要调用公共函数库该如何处理呢?分别把公共函数库的文件拷贝到各自的项目中会造成冗余,丢弃了公共函数库的维护历史,这显然不是好的方法。

强大的git 提供了submodule的方式来解决这个问题。下面简单介绍下submodule的基本使用。

添加submodule子目录

在当前目录中添加submodule子目录依赖

git submodule add /path/to/repos/foo.git dest/dir

更新submodule的最新代码

git submodule init  # 在.git/config中注册submodule信息
git submodule update  # 更新子模块到最新依赖的commit点
 
或
git submodule update —-init —-recursive

数据冷热分离

简介

MySQL实际应用中,当某些表的数据超过千万之后,会造成表查询慢的情况,可以对这些表做一些优化,当然水平拆分是比较合适的,避免某一个表中数据量过大的方法。

但一般情况下,如果表中某些比较久远的历史数据,在访问不频繁的情况下,我们称之为冷数据,而某些最近的数据,经常会被访问查询,这些称之为热数据。我们以电商业务中的订单为例,电商平台某东,在用户中心中,我的订单,一般进入之后会直接展现的是最近3个月的订单记录,不会展现所有,但可以选择查看历史半年内的,一年内的订单数据。从开发的角度来分析,应该是将3个月以前的订单数据已经转移到了订单历史表中,以减少基本订单表中的数据,加快查询。这就是所谓的冷热数据分离。

一般可以定期做冷数据的分离,保证表中只保留最近一段时间内的数据,加快查询。

数据冷热分离操作

好了,理解了之后,直接上最近的一个脚本,非常方便的来做数据冷热分离的。

在已经做了读写分离的数据库情况下,操作步骤如下:

  1. 在slave数据库上导出指定日期比指定日期早的数据
  2. copy指定导出的数据到backup主机上
  3. 在backup主机上,导入到数据库中
  4. check导出的数据和导入的数据是否一致
  5. 在master数据库上,删除已经备份的数据

脚本后面再上。

processlist中需要引起关注的状态

转载自MySQL中文网,原文请见这里

一般而言,我们在processlist结果中如果经常能看到某些SQL的话,至少可以说明这些SQL的频率很高,通常需要对这些SQL进行进一步优化。

Python中的类方法、类实例方法、静态方法的使用与区别

介绍

function就是可以通过名字可以调用的一段代码,我们可以传参数进去,得到返回值。所有的参数都是明确的传递过去的。

method是function与对象的结合。我们调用一个方法的时候,有些参数是隐含的传递过去的。

一般定义class的时候,会用到三种method,分别是:

  • instance method 实例方法
  • class method 类方法
  • static method 静态方法

每一种的应用场景和定义方式有些区别,接下来我们详细介绍下。

Python中的高级数据结构

介绍

在Python中有四种内建的数据结构,分别是List、Tuple、Dictionary以及Set。大部分情况下,这四种结构都能解决问题,不需要其他类型的数据结构,但有很多高级数据结构可以了解下,以便解决问题的时候可供选择,例如:

  • Collection
  • Array
  • Heapq
  • Bisect
  • Weakref
  • Copy
  • Pprint