运维工具
当前常见的运维工具(Configuration)有以下一种
puppret(ruby)
saltstack(python)
chef
cfengine
....
Command and Control;
fabricfunc
程序发布:
手动发布 脚本发布 发布程序(运维程序) 程序发布要求:1、不能影响用户体验;2、系统不能停机;3、不能导致系统故障或造成系统完全不可用; 灰度发布模型(考虑以下两种维度):1、主机;2、用户; 发布思路: /webapps/tuangou /webapps/tuangou-1.1/webapps/tuangou-1.2将程序解压缩,解压缩后进行文件链接,近期版本不删除, 一边后期能够出问题能够进行回滚; 在调度器上先下线一批主机(标记为维护模式)-->关闭服务-->部署新版本-->启动服务-->在调度器上启用这一批主机;
运维工具的分类
agent:puppet,func,...agentless(ssh):ansible,fabric
Ansible
轻量化运维工具 能够提供Configuration和Command and Control的功能 Ansible的特性: 模块化:调用特定的模块,完成特定的任务; 基于Python语言实现,由paramiko,PyYAML和jinja2三个关键模块; 部署简单:agentless; 支持自定义模块; 支持playbook; 幂等性:一个命令执行一边和多边的效果是一样的。
Ansible的安装及应用:
yum的epel源, 配置文件:/etc/ansible/ansible.cfg 主机清单:/etc/ansible/hosts 主程序: ansible ansible-playbook ansible-doc ansible的简单使用格式: ansible HOST-PATTERN -m MOD_NAME -a MOD_ARGS ansible-doc -s MOD_name ansible的常用模块: 获取模块列表: ansible-doc -l command模块:在远程主机运行命令,不支持“|” ansible websrvs -m command -a "useradd user1" shell模块:远程主机在shell进程中中运行 ansible websrvs -m shell - a "echo magedu | password --stdin user1" copy模块:复制文件至远程主机; 用法:(1)src=\‘#\‘" /etc/fstab dest=/tmp/fstab" (2)content= dest= //直接把内容作为数据流传输至文件; ansible all -m copy -a "content=‘hello world\n‘ dest=/tmp/testfile" owner,group,mode cron模块:manage cron.d and crontab entries minute= hour= day= weekday= job= *name= //必须有此参数 state= present //默认为添加 absent //删除crontab ansible all -m cron -a "minute=*/5 job=‘/sbin/ntpdate 172.16.0.1 &> /dev/null‘ name=Synctime" fetch模块:从远程主机拉去文件至当前机器; file模块:修改文件属性; *path= //必须有此参数 用法:(1)创建连接文件 ansible all -m file -a "src=/tmp/fstab path=/tmp/fstab.link state=link" (2)修改属性:path= owner= mode= group= (3)创建目录:path= state=directory ansible all -m file -a "path=/tmp/tmpdir state=directory" hostname模块:manage hostname name= ping模块: pip模块:用来管理Python的依赖模块; yum模块:用yum来管理程序包 *name=:指明程序包名称,可以带版本号 //必须有此参数 state= present,latest(安装),absent(卸载); ansible all -m yum -a "name=httpd state=latest" service模块:管理服务 *name= //必须有此参数 state= started,stopped,restarted; enabled= 1|0 //开机自启动; runlevel= ansible all -m service -a "name=httpd state=started" uri模块:uri的访问管理 user模块:管理用户账户; *name system= yes|no //yes是系统账户 uid= shell= group= groups= comment= home= move_home= remove= //当state=agent是删除家目录 ansible all -m user -a "name=user3 system=yes state=present uid=306" setup模块:用于获取facts; group模块:添加或删除组 *name= //必须给的参数 state system gid= scipt模块:把本地脚本传递到远程主机后进行执行; ansible -m script -a "/path/to/script_file"
YAML:
YAML简介:
YAML是一个可读性高的用来表达资料序列的格式。YAML参考了其他多种语言, 包括:XML、C语言、Python、Perl以及电子邮件格式RFC2822等。Evans在2001年首次发表了这种语言, 另外Ingy dot Net 与 Ben-kiki也是这种语言的共同设计者;YAML Ain`t Markup Language,即YAML不是XML。 不过,在开发的这种语言时,YAML的意思是:“Yet Another Markup Language”(仍是一种标记语言)。 其特性: YAML的可读性较好; YAML和脚本语言的交互性很好; YAML有一个一致的信息模型; YAML易于实现; YAML可以基于流来处理; YAML表达能力强,扩展性好;
YAML语法:
YAML的语法和其他高阶语言类似,并且可以简单表达清单、散列表、标量等数据结构。 其结构(structure)通过空格来展示,序列(Sequence)里的项用“-”来代表,Map里的键值对用“:”分隔。 Playbook: Playbook的核心元素: Hosts:主机 Tasks:任务 variables: Templates:包含了模板的文本文件; Handlers:由特定条件出发任务; Roles: playbook的基础组件 Hosts:运行指定任务的目标主机; remoute_user:在远程主机上执行任务的用户; sudu_user: tasks:任务列表 模块,模块参数; 格式: (1)action:module arguments (2)module:arguments handlers: 任务,在特定条件下触发; 接收到其他任务的通知时被触发; variables: (1)facts:可直接调用; (2)ansible-playbook命令行中的自定义变量; -e VARS,--extra-vars=VARS (3)通过role传递变量; (4)Host Inventory (1)向不同的主机传递不同的变量; ip/hostname varaiable=value var2=value2 (2)向组中主机传递相同的变量 [groupname:vars] variable=value invertory参数: 用于定义ansible远程连接目标主机时的参数,而非传递给playbook的变量; ansible_ssh_host ansible_ssh_port ansible_ssh_user ansible_ssh_pass ansible_sudo_pass .... **注意:shell和command模块后直接跟命令即可** **某任务的状态在运行后为changed时,可通过“notify”通知给相应的handlers;** **任务可以通过“tags”打标签,而后可在ansible-playbook命令上使用-t指定进行调用;** playbook的使用方法: ansible-playbook在执行命令时,第一个任务执行完成后执行第二个任务,第二个执行完成后,执行第三个任务; ansible-playbook --list-host //显示执行的主机列表; --check //在目标主机进行检测可能会发生改变,但并不执行; -t tags //指明任务 ansible-palybook -t instconf web.yml //进行标签为instconf的项目; playbook示例1:编写sample.yaml - hosts: remote_user:root tasks: - name: create a user user3 user: name=user3 system=true uid=307 - name: creare a user user4 user: name=user4 system=true uid=308 playbook示例2:编写web.yml - hosts: websrvs remote_user: root tasks: - name: install httpd package yum: name=httpd state=present - name: install configure file copy: src=files/httpd.conf dest=/etc/httpd/conf/ //src为相对路径 tags: instconf notify: restart httpd - name: start httpd.service serivce: name=httpd state=started -name: execute ss command shell: ss -tnl | grep 8080 - handlers: - name: restart httpd service: name=httpd state=restarted
时间: 2024-10-23 21:12:00