@Great-Chinese
2017-03-23T00:08:27.000000Z
字数 15136
阅读 1020
自动化运维
# 两台机器192.168.31.127 (服务端)192.168.31.128 (客户端)# 设置两台hostnamevim /etc/sysconfig/networkHOSTNAME=web9.melody.comHOSTNAME=web10.melody.com# 编辑两台hostsvim hosts192.168.31.127 web9.melody.com192.168.31.128 web10.melody.com# 查看两台hostnamecat /etc/sysconfig/network# 两台机器关闭selinux,清空iptables规则vim /etc/selinux/configsetenforce 0iptables -nvL# 在两台机器上pingping web9.melody.comping web10.melody.com# 两台机器上安装ntpdate,yum install -y ntpntpdate time.windows.com >/dev/null 2>&1# 两台机器上制定任务计划crontab -e*/10 * * * * ntpdate time.windows.com >/dev/null 2>&1
# 安装puppet源rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"ls /etc/yum.repos.d/ # 查看安装源包# 安装服务端程序yum install -y puppet-serverls /etc/init.d/puppetmaster # 查看puppet# 开机启动chkconfig puppetmaster on# 启动服务service puppetmaster startps aux |grep puppet # 查看进程netstat -lnp # 查看监听窗口
# 安装puppet源rpm -ivh "http://yum.puppetlabs.com/el/6/products/x86_64/puppetlabs-release-6-7.noarch.rpm"ls /etc/yum.repos.d/ # 查看安装源包# 安装客户端程序yum install -y puppetls /etc/init.d/puppet # 查看puppet# 修改配置文件vim /etc/puppet/puppet.conf //在最后面添加listen = trueserver = web9.melody.comruninterval = 10# 开机启动chkconfig puppet on# 启动服务service puppet start/etc/init.d/puppet startps aux |grep puppet # 查看进程netstat -lnp # 查看监听窗口
# 服务端查看客户端所有证书列表puppet cert list --all //带一个+表示证书已签发# 客户端上生成ssl证书puppet agent --test --server web9.melody.com# 服务端签发指定客户端证书puppet cert --sign web10.melody.com# 服务端可以删除指定客户端证书puppet cert clean web10.melody.com# 删除的证书可以重启或手动重新生成证书/etc/init.d/puppet restartrm -rf /var/lib/puppet/ssl/* //证书存放的目录# 删除所有证书puppet cert clean --all
# 服务端修改puppet配置文件vim /etc/puppet/puppet.conf //在[main]最后添加autosign = true# 服务端创建自动签发的配置文件vim /etc/puppet/autosign.conf //增加内容如下*.melody.com# 服务端删除所有客户端证书puppet cert clean --all# 重签之后,服务端重启/etc/init.d/puppetmaster restart# 客户端删除所有证书rm -rf /var/lib/puppet/ssl/* //证书存放的目录# 重签之后,客户端重启service puppet restart#puppet cert list --all
# 修改客户端配置文件vim /etc/puppet/puppet.conf //在最后面添加listen = trueserver = web9.melody.comruninterval = 10# 删除旧的证书资料rm -rf /var/lib/puppet/ssl/*# 重启客户端/etc/init.d/puppet restartpuppet agent --test --server web9.melody.com //如果客户端不重启,也可以通过此命令来自动签发
# 在服务端编辑manifests文件vim /etc/puppet/manifests/site.ppnode defalt {file {"/tmp/333.txt":content => "test,test";}}# 服务端重启/etc/init.d/puppetmaster restart# 客户端查看文件是否生成ls -l /tmp/
模块是puppet的配置单元,模块里面会包含类和资源。同步文件、远程执行命令、cron等叫做资源,都是通过模块来 实现的。
# 服务端创建目录mkdir /etc/puppet/modules/testmcd /etc/puppet/modules/testmmkdir {files,manifests,templates}cd files/vim 1.txt# 服务端创建配置文件vim /etc/puppet/modules/testm/manifests/init.ppclass testm{file {"/tmp/2.txt":owner => "root",group => "root",mode => 0400,source => "puppet://$puppetserver/modules/testm/1.txt"}}# 服务端定义主配置文件vim /etc/puppet/manifests/site.pp$puppetserver='web9.melody.com'node 'web10.melody.com' {include testm}# 配置完成后,在客户端执行命令,如果puppet服务已启动,不用执行此命令也会自动同步的puppet agent --test --server=web9.melody.com
# 服务端增加相关目录cd /etc/etc/puppet/modules/testm/filesmkdir apache2cd apache2mkdir {bin,conf,logs}# 服务端编辑模块配置文件vim /etc/puppet/modules/testm/manifests/init.ppclass apache{file {"/usr/local/apache2":owner => "root",group => "root",source => "puppet://$puppetserver/modules/testm/apache2",recurse => true,purge => true}}# 服务端定义主配置文件vim /etc/puppet/manifests/site.pp$puppetserver='web9.aming.com'node 'web10.melody.com' {include testminclude apache}# 客户端上查询puppet agent --test --server=web9.melody.com //在客户端上手动执行ls /usr/localls -l /usr/local/apache2cat /usr/local/apache2/conf/httpd.conf
# 服务端编辑模块配置文件vim /etc/puppet/modules/testm/manifests/init.ppexec {"123":unless => "test -f /tmp/melodylinux.txt", // 第二种情况把unless改成onlyifpath => ["/bin", "/sbin", "/usr/bin", "/usr/sbin"],command => "touch /tmp/melodylinux.txt"}# unless后面的命令作为一个条件,当条件成立时,不会执行下面的命令# onlyif 如果条件成立里要执行下面的命令就用onlyif# 在客户端查看有没有生成文件ls -lt /tmp
# 服务端编辑模块配置文件vim /etc/puppet/modules/testm/manifests/init.ppcron { "melody1":command => "/sbin/ntpdate time.windows.com",user => "root",minute => "*/10",monthday => "10-15",# ensure => "absent"}}# ensure设置为absent表示删除改任务# 在客户端查看任务计划crontab -l
# 主从两台机器192.168.31.127 -服务端192.168.31.128 -客户端# 设置hostname与hosts192.168.31.127 web9.melody.com192.168.31.128 web10.melody.com# 关闭seliunx,清空iptables规则# 服务端---安装saltyum install -y epel-releaseyum install -y salt-master salt-minion# 服务端/客户端统一修改配置文件vim /etc/salt/minionmaster:web9.melody.com# 启动salt/etc/init.d/salt-master start/etc/init.d/salt-minion start# 客户端---安装saltyum install -y epel-releaseyum install -y salt-minion# 服务端/客户端统一修改配置文件vim /etc/salt/minionmaster:web9.melody.com# 客户端启动salt/etc/init.d/salt-minion start
salt-key // 查看已经签发的客户端信息salt-key -a web10.melody.com // 认可一台服务器salt-key -a web9.melody.com // 再认可一台服务器# 此时客户端的/etc/salt/pki/minion目录下,会多出minion_master.pub这个文件。# 远程执行命令salt '*' test.pingsalt '*' cmd.run 'df -h'salt '*' cmd.run 'hostname'salt '*' cmd.run 'w'salt 'web9.melody.com' cmd.run 'w'salt -E 'web(9|10).melody.com' cmd.run 'w' // 正则表达式salt '*melody.com' cmd.run 'w'salt 'web*' cmd.run 'w'salt -L 'web9.melody.com,web10.melody.com' cmd.run 'w' //多个机器用逗号分隔
salt 'web10.melody.com' grains.ls // 列出所有的grains项目名字salt 'web10.melody.com' grains.items // 列出所有的grains项目名字及值# 客户端上增加grains文件vim /etc/salt/grains //增加内容如下role: nginxenv: testmyname: melodylinux.commydomain: apelearn.com# 客户端重启/etc/init.d/salt-minion restart# 服务端获取grainssalt 'web10.melody.com' grains.item envsalt 'web10.melody.com' grains.item role env mynamesalt 'web10.melody.com' grains.lssalt 'web10.melody.com' grains.item role env myname# 借助grains的一些属性信息来执行命令salt -G mydomain:apelearn.com cmd.run 'w'
# 在服务端打开主配置文件,vim /etc/salt/master //把下面三行前面的#去掉,pillar_roots:base:- /srv/pillar# 创建对应的目录mkdir /srv/pillarcd /srv/pillar# 进入pillar目录下,自定义test文件vim /srv/pillar/test.sls // 内容如下conf: /etc/123.confmyname: melody# 编辑总入口配置文件vim /srv/pillar/top.sls // 格式如下base:'web10.melody.com':- test# 重启master服务/etc/init.d/salt-master restartsalt '*' pillar.items // 列出所有的pillar项目名字及值salt '*' pillar.item conf //查看其中conf的值# 刷新pillar,不需要重启服务salt '*' saltutil.refresh_pillar
# 在服务端打开主配置文件vim /etc/salt/master //把下面三行前面的#去掉,file_roots:base:- /srv/salt/# 在服务端创建目录并进入mkdir -p /srv/saltcd /srv/salt# 在服务端创建top文件vim /srv/salt/top.slsbase:'web10.melody.com':- apache# 重启master/etc/init.d/salt-master restart# 在服务端编辑apache文件vim /srv/salt/apache.slsapache-service:pkg.installed:- names:- httpd- httpd-develservice.running:- name: httpd- enable: True# 在服务端执行命令salt 'web10.melody.com' state.highstate# 在客户端查看httpd是否已启动ps aux |grep httpd/etc/init.d/httpd stopchkconfig httpd offchkconfig --list httpdps aux |grep httpdchkconfig --list httpd
# 进入/srv/salt目录,操作如下步骤cd /srv/saltmkdir testmkdir test/123vim test/123/1.txt# 修改filetest文件vim filetest.sls //增加内容如下file_test:file.managed:- name: /tmp/melodylinux.com- source: salt://test/123/1.txt- user: root- group: root- mode: 600# 修改top文件vim top.sls // 增加内容如下base:'web10.melody.com':- apache- filetest# 接着在服务端执行命令salt 'web10.melody.com' state.highstate# 然后在客户端查看melodylinux.com文件是否生成ls -l /tmpcat /tmp/melodylinux.com
# 进入/srv/salt目录,操作如下步骤cd /srv/saltvim dirtest.sls // 增加内容如下file_dir:file.recurse:- name: /tmp/testdir- source: salt://test/123- user: root- file_mode: 644- dir_mode: 755- mkdir: True- clean: True //加上它之后,源删除文件或目录,目标也会跟着删除,否则不会删除# 修改top文件vim top.sls // 增加内容如下base:'web10.melody.com':- filetest- dirtest# 在服务端执行命令salt 'web10.melody.com' state.highstate# 然后在客户端查看testdir目录是否生成ls -l /tmpcat /tmp/testdir
# 进入/srv/salt目录,操作如下步骤cd /srv/saltvim cmdtest.sls // 增加内容如下cmd_test:cmd.run:- onlyif: test -f /tmp/melodylinux.txt // unless 相反 //?????????????????????用onlyif命令才会创建成功,unless则不会跟老师讲的相反- names:- touch /tmp/melody123.txt- mkdir /tmp/456- user: root# 修改top文件vim top.sls // 增加内容如下base:'web10.melody.com':- cmdtest# 在服务端执行命令salt 'web10.melody.com' state.highstate# 然后在客户端查看melody123.txt文件和456目录是否生成ls -l /tmp
# 进入/srv/salt目录,操作如下步骤cd /srv/saltvim shelltest.sls // 增加内容如下shell_test:cmd.script:- source: salt://test/1.sh- user: root# 编辑脚本内容vim test/1.sh // 增加内容如下#!/bin/bashtouch /tmp/111.txtif [ -d /tmp/1233 ]thenrm -rf /tmp/1233elsemkdir /tmp/1233fi# 修改top文件vim top.sls // 增加内容如下base:'web10.melody.com':- shelltest# 在服务端执行命令salt 'web10.melody.com' state.highstate# 然后在客户端查看111.txt文件和1233目录是否生成ls -l /tmp
# 进入/srv/salt目录,操作如下步骤cd /srv/saltvim crontest.slscron_test:cron.present: # 增加用:present 删除用:absent- name: /bin/touch /tmp/111.txt- user: root- minute: '*'- hour: 20- daymonth: 1-10- month: '3,5'- dayweek: '*'# 修改top文件vim top.sls // 增加内容如下base:'web10.melody.com':- crontest# 在服务端执行命令salt 'web10.melody.com' state.highstate# 然后在客户端查看定时任务计划是否成功crontab -l
# 拷贝服务端上的文件到客户端salt 'web10.melody.com' cp.get_file salt://apache.sls /tmp/apelearn.com# 拷贝目录salt 'web10.melody.com' cp.get_dir salt://test /tmp/ #客户端会自动创建test目录,所以后面不需要加# 在服务端上显示客户端存活的minionsalt-run manage.up# 命令行上去执行master上的shell脚本salt 'web10.melody.com' cmd.script salt://test/1.sh
特点:不需要安装客户端,用sshd去通信;支持命令行模块,也支持编写yaml格式
## 服务端安装ansibleyum install -y epel-release 扩展源yum install -y ansible# 服务端上生成密钥对ssh-keygen -t rsa# 查看生成的密钥文件ls -la /root/.ssh# 查看服务端生成的公钥cat /root/.ssh/id_rsa.pub# 把公钥id_rsa.pub放到客户端.ssh/authorized_keys中vim .ssh/authorized_keys# 客户端关闭selinux,修改权限为600setenforce 0chmod 600 /root/.ssh/authorized_keys# 在服务端连接客户端,logout退出ssh web10.melody.com
# 服务端更改配置文件vim /etc/ansible/hosts //在最后面增加如下三行内容[testhosts]127.0.0.1web10.melody.com#把公钥放到服务端的.ssh/authorized_keysvim .ssh/authorized_keys# 检测127.0.0.1是否能连接ssh 127.0.0.1# 远程执行命令ansible testhosts -m command -a 'w'ansible testhosts -m command -a 'hostname'ansible web10.melody.com -m command -a 'hostname'#如果报错libselinux-python,则安装如下yum install -y libselinux-python# 远程执行命令,支持脚本运行还有管道符ansible web10.melody.com -m shell -a 'cat /etc/passwd|grep root'
# 拷贝文件ansible web10.melody.com -m copy -a "src=/etc/passwd dest=/tmp/1.txt owner=root group=root mode=0644"# 拷贝目录ansible web10.melody.com -m copy -a "src=/etc/ansible dest=/tmp/ansibletest owner=root group=root mode=0755"
#首先创建一个shell脚本vim /tmp/test.sh //增加内容如下#!/bin/bashd='date'echo $d > /tmp/an_test.txt#然后把该脚本分发到各个机器上去ansible web10.melody.com -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh"ansible web10.melody.com -m copy -a "src=/tmp/test.sh dest=/tmp/test.sh mode=0755"#最后批量执行该脚本ansible web10.melody.com -m shell -a "/bin/sh /tmp/test.sh"ansible web10.melody.com -m shell -a "/tmp/test.sh"# 支持远程执行命令并且带管道符ansible web10.melody.com -m shell -a 'cat /etc/passwd|grep root'
# 制定一个任务计划ansible web10.melody.com -m cron -a "name=test_cron job='/bin/bash /usr/local/sbin/1.sh' weekday=6"# 客户端查看任务计划是否生成crontab -l# 删除一个任务计划ansible web10.melody.com -m cron -a "name=test_cron state=absent"# 相关时间的表示minute hour day month weekday
# 安装rpm包ansible web10.melody.com -m yum -a "name=vim-enhanced"# 管理服务ansible web10.melody.com -m service -a "name=httpd state=started enabled=no"ansible web10.melody.com -m service -a "name=httpd state=stopped enabled=yes"# 列出所有的模块ansible-doc -l# 查看指定模块的文档ansible-doc cron
# 进入ansible目录下,编辑test目录cd /etc/ansible/vim test.yml # 增加内容如下---- hosts: web10.melody.comremote_user: roottasks:- name: test_playbookshell: touch /tmp/gary123.txt# 执行命令ansible-playbook test.yml# 用playbook创建新用户vim user.yml # 增加内容如下---- name: create_userhosts: web10.melody.comuser: rootgather_facts: falsevars:- user: "test"tasks:- name: create useruser: name="{{ user }}"# 执行命令ansible-playbook user.yml# 在客户端上查看是否生成grep test /etc/passwd
# 进入ansible目录下,编辑loop目录cd /etc/ansible/vim loop.yml //编辑loop文件---- hosts: testhostsuser: roottasks:- name: change mode for filesfile: path=/tmp/ {{ item }} mode=600with_items:- a.txt- b.txt- c.txt# 执行命令ansible-playbook loop.yml# 服务端,客户端查看是否文件生成ls -l /tmp
# 进入ansible目录下,编辑when目录cd /etc/ansible/vim when.yml //编辑when文件---- hosts: testhostsuser: rootgather_facts: Truetasks:- name: use whenshell: touch /tmp/when.txtwhen: facter_ipaddress == "192.168.31.127"# 执行命令ansible-playbook when.yml# 在服务台查看是否生成when.txt文件ls -lt /tmp/when.txt# 获取 web10 服务器的参数ansible web10.melody.com -m setup
# 进入ansible目录下,编辑handlers目录cd /etc/ansible/vim handlers.yml //编辑handlers文件---- name: handlers testhosts: web10.melody.comuser: roottasks:- name: copy filecopy: src=/etc/passwd dest=/tmp/abc.txtnotify: test handlershandlers: //只有当tasks执行成功时,handlers才会执行;否则不会。- name: test handlersshell: echo "111111" >> /tmp/abc.txt# 执行命令ansible-playbook handlers.yml# 在客户端查看是否生成abc.txt文件cat /tmp/abc.txt# rsync同步文件rsync -av /etc/passwd web10.melody.com:/tmp/aaa.txt
cd /usr/localtar -zcvf nginx.tar.gz nginxcd /etc/ansiblemkdir nginx_installcd nginx_installmkdir rolescd roles // roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作# 每个角色下面又有几个目录# handlers 当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务;# files 安装时用到的一些文件;# meta 为说明信息,说明角色依赖等信息# tasks 为核心的配置文件# templates 通常存一些配置文件,启动脚本等模板文件# vars 为定义的变量mkdir common install
cd common/mkdir tasks# 定义common的tasks,nginx是需要一些依赖包vim roles/common/tasks/main.yml // 增加内容如下- name: Install initializtion require softwareyum: name={{ item }} state=installedwith_items:- zlib-devel- pcre-devel- openssl-devel
cd install/mkdir tasks vars files templates# 把打包的nginx目录,启动脚本,配置文件放到另一台机器上去cp /usr/local/nginx.tar.gz files/cp /usr/local/nginx/conf/nginx.conf templates/cp /etc/init.d/nginx templates/# 定义install的varsvim roles/install/vars/main.yml // 增加内容如下nginx_user: wwwnginx_basedir: /usr/local/nginx# 定义install的tasks下的copyvim roles/install/tasks/copy.yml // 首先把所有用到的文档拷贝到目标机器,内容如下- name: Copy Nginx Softwarecopy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root- name: Uncompression Nginx Softwareshell: tar zxf /tmp/nginx.tar.gz -C /usr/local/- name: copy Nginx Start Scripttemplate: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755- name:template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644# 定义install的tasks下的installvim roles/install/tasks/install.yml // 接下来会建立用户,启动服务,删除压缩包- name: Create Nginx Useruser: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin- name: Start Nginx Serviceservice: name=nginx state=started- name: Add Boot Start Nginx Serviceshell: chkconfig --level 345 nginx on- name: Delete Nginx Compression filesshell: rm -rf /tmp/nginx.tar.gx# 再创建main.yml并且把copy和install调用vim roles/install/tasks/main.yml // 增加内容如下- include: copy.yml- include: install.yml
# 退到nginx_install目录下,创建install.yml文件cd nginx_installvim install.yml // 增加内容如下---- hosts: web10.melody.comremote_user: rootgather_facts: Trueroles:- common- install# 最后执行命令ansible-playbook install.yml# 到客户端查看是否安装成功rpm -qa |egrep 'pcre|openssl|zlib'ps aux |grep nginxchkconfig --list nginx
# 退回到/etc/ansilbe目录下mkdir nginx_configcd nginx_configmkdir rolescd rolesmkdir old newcd new/mkdir vars files tasks handlers //files下面为nginx.conf和vhosts目录,handlers为重启服务的命令# 先把nginx.conf和vhosts目录放到files目录下cp /usr/local/nginx/conf/nginx.conf files/cp -r /usr/local/nginx/conf/vhosts files/
cd new/# 定义vars变量vim vars/main.yml //增加内容如下nginx_basedir: /usr/local/nginx# 定义handlesr服务vim handlers/main.yml //增加内容如下- name: restart nginxshell: /etc/init.d/nginx reload# 定义tasks变量,这是核心的任务vim tasks/main.yml //增加内容如下- name: copy conf filecopy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644with_items:- { src: nginx.conf, dest: conf/nginx.conf }- { src: vhosts, dest: conf/ }notify: restart nginx# 定义总入口配置文件,退回到nginx_config目录下cd nginx_configvim update.yml---- hosts: web10.melody.comuser: rootroles:- new#vim roles/new/files/vhosts/1.confvim roles/new/files/nginx.conf# 执行updateansible-playbook update.yml# 在客户端上查看更新的1.conf文件是否生成cat /usr/local/nginx/conf/vhosts/1.conf
#---- hosts: web10.melody.comuser: rootroles:- oldansible-playbook backup.yml