Linux

Ansible 入门 4 (Ansible管理docker的容器)

Submitted by Lizhe on Wed, 06/07/2017 - 17:39

上一章节我给出了一个简单的playbook

这一章节让我们来看看细节

playbook 是 YAML 格式的

YAML是"YAML Ain't a Markup Language"(YAML不是一种置标语言)的递归缩写。

在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种置标语言)

 

YAML 文件应该以三个减号 --- 开头, 不过你也可以忽略它, 不会带来任何问题

注释是通过 # , 和 shell 脚本一样

字符串文本也不需要使用 引号 括起来, 当然如果括起来可以, 即使中间包含空格也可以不用引号

hello world 这样的字符串完全可以识别正确

对于布尔类型的值十分灵活

如果一个值为"真" 可以使用

true, True , TRUE , yes, Yes, YES, on, On, ON , y ,Y

对应的如果一个值为 "假" 可以使用

false, False, FALSE, no, No, NO, off, Off, OFF, n, N

 

Ansible 入门 3 (Ansible管理docker的容器)

Submitted by Lizhe on Tue, 06/06/2017 - 14:58

playbook 指的是用于配置管理的脚本, 实际上playbook才是ansible的重头戏

我将尝试使用一个playbook同时控制之前创建的3个虚拟机(docker 容器)

先看一个简单脚本

[root@vagrant playbooks]# vi hostname.yml 
- name: call hostname
  hosts: dockers
  sudo: False
  tasks:
    - name: install
      shell: hostname > /hostname.txt

直接调用

Ansible 入门 2 (Ansible管理docker的容器)

Submitted by Lizhe on Tue, 06/06/2017 - 14:27

对于上一章节中我们提到的 /etc/ansible/hosts 配置文件可以通过 -i 参数指定, 如果不指定默认查找/etc/ansible/hosts 路径

ansible dockers -a "hostname"

等价于

ansible -i /etc/ansible/hosts dockers -a "hostname"

在这个hosts文件中还可以通过 ansible_ssh_host和ansible_ssh_port 单独指定目标机器的ip和端口

下面是这次的重点, 如果你需要多个hosts文件的话,你需要使用ansible.cfg文件

这个文件可以用来配置一些默认值

Ansible 按照如下 位置和顺序 来查找 ansible.cfg

1. ANSIBLE_CONFIG 环境变量指定的文件

2. ./ansible.cfg 当前工作目录下的文件

3. ~/.ansible.cfg 用户home路径下的文件

4. /etc/ansible/ansible.cfg 目录下的文件

这里我创建一个/ansible目录作为工作目录

Ansible 入门 1 (Ansible管理docker的容器)

Submitted by Lizhe on Mon, 06/05/2017 - 17:31

 

安装 yum -y install ansible 或者 pip install ansible 

需要把托管机的ip加入到hosts文件里

/etc/ansible/hosts

这里我只做个单机测试,使用用户名密码登录,我使用root用户, 尝试让ansible使用vagrant用户

使用用户名密码的话还需要安装 yum install sshpass

[web]
172.28.128.4 ansible_ssh_user=vagrant ansible_ssh_pass=vagrant

运行

java memcached

Submitted by Lizhe on Sat, 05/27/2017 - 11:35

只是一个流水账的整理,原理和其他的就不多说了

安装

yum install libevent libevent-deve

yum install memcached
 

 

安装几乎是傻瓜式的

package name.lizhe.simplesso.tool;

import java.util.Date;

import com.danga.MemCached.MemCachedClient;
import com.danga.MemCached.SockIOPool; 

linux 进程与线程

Submitted by Lizhe on Sat, 05/27/2017 - 09:56

 

Linux的每个进程(除了init进程以外)都依赖于一个父进程, 内核启动init作为第一个进程.

创建进程的方式有两种, 一种是fork,一种是exec

fork会生成一个父进程的副本,父进程和子进程只有PID不同,不过linux采用了一种copy on write 写时复制 的策略来使fork更加高效, 内存复制操作会被延迟到父进程或子进程向内存写入数据之前, 如果不需要写入, 父进程和子进程将一直使用同一内存页

exec将一个新程序加载到当前进程的内存中并执行, 旧进程的内存页将被替换成新数据

线程在linux系统中实际上是一种轻量级进程, linux用clone方法创建线程,  工作方式类似于fork, 但会采用更精确的检查机制

确实哪些资源与父进程共享,哪些是线程自己创建的

 

如果你使用过docker或者了解过docker的僵尸进程问题, 那么对以上的fork机制可能会有一个更清楚的认识

Vagrant不能挂在共享文件夹

Submitted by Lizhe on Wed, 04/12/2017 - 13:52

 

vagrant突然不能挂在共享文件夹了, 提示我版本不匹配,这些文件夹全部不能映射

 config.vm.synced_folder "ansible", "/home/vagrant/ansible", owner: "vagrant", group: "vagrant"
 config.vm.synced_folder "deployment", "/home/vagrant/deployment", owner: "vagrant", group: "vagrant"
 config.vm.synced_folder "preparation", "/home/vagrant/preparation", owner: "vagrant", group: "vagrant"
 config.vm.synced_folder "C:/Users/Lizhe/.m2", "/root/.m2", owner: "vagrant", group: "vagrant"

安装增强插件以后好了

vagrant plugin install vagrant-vbguest

Shell 脚本 采集天气数据

Submitted by Lizhe on Thu, 04/06/2017 - 23:38

 

这几天瞎看hadoop, 但是没有数据可以用, 所以考虑用shell 在服务器上采集点天气信息

先写一个脚本用curl命令简单取一下信息

curl "http://cdn.weather.hao.360.cn/api_weather_info.php?app=hao360&_jsonp=smartloaddata101190101&code=101070201" >> /data/lzcronscripts/data.txt

 

可以得到如下数据

Cron

Submitted by Lizhe on Wed, 04/05/2017 - 16:36

 

通过crontab -e命令编辑crontab任务,增加内容如下:

*/1 * * * * /dd/shell/test1.sh
*/1 * * * * /dd/shell/test2.sh

通过sed删除

sed -i '/test2.sh/d' /var/spool/cron/root