当前位置: 首页 > news >正文

建设银行官方招聘网站张家港做网站的公司

建设银行官方招聘网站,张家港做网站的公司,企业门户网站是什么意思,上海商业连锁设计简介 本文详细介绍ansible怎么批量初始化服务器#xff0c;包括ansible批量初始化服务器详细配置和步骤#xff0c;有需要的小伙伴们可以参考借鉴#xff0c;希望对大家有所帮助。 详细步骤 1、ansible要初始化的主机 [rootnginx ansible]# tail -3 /etc/ansible/hosts … 简介 本文详细介绍ansible怎么批量初始化服务器包括ansible批量初始化服务器详细配置和步骤有需要的小伙伴们可以参考借鉴希望对大家有所帮助。 详细步骤 1、ansible要初始化的主机 [rootnginx ansible]# tail -3 /etc/ansible/hosts   #要初始的主机如下 [node] 192.168.20.4 192.168.20.5 2、配置ssh免密登录 playbook文件内容如下 [rootnginx ansible]# cat ssh.yaml --- - name: configure ssh connectionhosts: nodegather_facts: falseconnection: localtasks:- name: configure ssh connectionshell: |ssh-keyscan {{inventory_hostname}} ~/.ssh/known_hostssshpass -p 123.com ssh-copy-id root{{inventory_hostname}} ... 注 gather\_facts如果值为false则表示不收集目标主机上的节点信息默认为true为收集节点信息如果收集节点信息则会慢很多如果在接下来的操作中不需要节点上的信息可设置为false。connectionlocal表示在ansible端本地执行任务hostslocalhost和connectionlocal容易搞混虽然两者的效果都是在本地执行任务但是hostslocalhost是从inventory中筛选出了目标节点localhost来执行任务而connectionlocal则筛选出来执行任务的目标主机是node组中的节点但因为指定了local连接类型使得node组中有多少个节点就会在ansible本地执行几次该play。 3、配置主机名 配置主机名可以使用shell模块但是对于不太专业ansible提供了一个专用于配置主机名的模块hostname模块。 当然要使用ansible去设置多个主机名要求目标主机和目标名称已经关联好否则多个主机和多个主机名之间无法对应去设置。 例如分别设置node组中的两个节点主机名为node01和node02playbook内容如下 [rootansible ansible]# cat test.yaml --- - name: set hostnamehosts: nodegather_facts: falsevars:hostnames:- host: 192.168.20.4name: node01- host: 192.168.20.5name: node02tasks:- name: set hostnamehostname:name: {{item.name}}when: item.host inventory_hostnameloop: {{hostnames}} 在上面的hostname模块中需要详细介绍vars指令以及when、loop指令。 1vars设置变量 vars指令可用于设置变量可以设置一个或多个变量。下面几种方式都是合理的 # 设置单个变量 vars:var1: value1vars:- var1: value1# 设置多个变量vars:var1: value1var2: value2vars:- var1: value1- var2: value2 vars可以设置在play级别也可以设置在task级别设置在play级别该play范围内的task可以访问这些变量其他play范围内则无法访问设置在task级别只有该task能访问这些变量其他task和其他play则无法访问。 例如 [rootansible ansible]# cat test.yaml --- - name: play1hosts: localhostgather_facts: falsevars:- var1: value1tasks:- name: access var1debug:msg: var1s value: {{var1}}- name: play2hosts: localhostgather_facts: falsetasks:- name: cats access vars from play1debug:var: var1- name: set and access var2 in this taskdebug:var: var2vars:var2: value2- name: catt accesss var2debug:var: var2 执行结果如下 [rootansible ansible]# ansible-playbook test.yaml PLAY [play1] **************************************************************************TASK [access var1] ******************************************************************** ok: [localhost] {msg: var1s value: value1 }PLAY [play2] **************************************************************************TASK [cats access vars from play1] *************************************************** ok: [localhost] {var1: VARIABLE IS NOT DEFINED! }TASK [set and access var2 in this task] *********************************************** ok: [localhost] {var2: value2 }TASK [catt accesss var2] ************************************************************* ok: [localhost] {var2: VARIABLE IS NOT DEFINED! }PLAY RECAP **************************************************************************** localhost                  : ok4    changed0    unreachable0    failed0    skipped0    rescued0    ignored0   回到我们更改主机名的配置vars指令中 vars:hostnames:- host: 192.168.20.4name: node01- host: 192.168.20.5name: node02 上面只设置了一个变量hostnames但这个变量的值是一个数组结构数组的两个元素又都是对象字典/hash结构。 所以想要访问主机名node01和它的IP地址192.168.20.4可以 tasks:- debug:var: hostnames[0].name- debug:var: hostnames[0].host 2when条件判断 在ansible中提供的唯一一个通用的条件判断是when指令当when指令的值为true时则执行该任务否则不执行该任务。 例如 [rootansible ansible]# cat test.yaml --- - name: play1hosts: localhostgather_facts: falsevars:- myname: Raytasks:- name: task will skipdebug:msg: myname is : {{myname}}when: myname lv- name: task will executedebug:msg: myname is : {{myname}}when: myname Ray 在上面的myname值设置为Ray第一个任务因为when的判断条件是myname“lv”所以判断结果为false该任务不执行同理第二个任务因为when的值为true所以执行了。 该playbook的执行结果 PLAY [play1] **************************************************************************TASK [task will skip] ***************************************************************** skipping: [localhost]TASK [task will execute] ************************************************************** ok: [localhost] {msg: myname is : Ray }PLAY RECAP **************************************************************************** localhost                  : ok1    changed0    unreachable0    failed0    skipped1    rescued0    ignored0   4、互相添加DNS解析记录 [rootansible ansible]# cat add_dns.yaml --- - name: play1hosts: nodegather_facts: truetasks:- name: add DNSlineinfile:path: /etc/hostsline: {{item}} {{hostvars[item].ansible_hostname}}when: item ! inventory_hostnameloop: {{ play_hosts }} 执行结果如下 TASK [Gathering Facts] **************************************************************** ok: [192.168.20.4] ok: [192.168.20.5]TASK [add DNS] ************************************************************************ skipping: [192.168.20.4] (item192.168.20.4) changed: [192.168.20.4] (item192.168.20.5) changed: [192.168.20.5] (item192.168.20.4) skipping: [192.168.20.5] (item192.168.20.5) 5、配置yum镜像源并安装软件 需求如下 备份原有yum镜像源文件并配置清华大学的yum镜像源os源和epel源安装常用软件包括lrzsz、dos2unix、wget、curl、vim等 playbook如下 [rootansible ansible]# cat config_yum.yaml - name: config yum repo add install softwarehosts: nodegather_facts: falsetasks:- name: backup origin yum reposshell:cmd: mkdir bak; mv *.repo bakchdir: /etc/yum.repos.dcreates: /etc/yum.repos.d/bak- name: add os repo and epel repoyum_repository:name: {{item.name}}description: {{item.name}} repobaseurl: {{item.baseurl}}file: {{item.name}}enabled: 1gpgcheck: 0reposdir: /etc/yum.repos.dloop:- name: osbaseurl: https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/$basearch- name: epelbaseurl: https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch- name: install pkgsyum:name: lrzsz,vim,dos2unix,wget,curlstate: present 在上面的yaml文件中第一个任务是将所有系统默认的repo文件备份到bak目录中chdir参数表示在执行shell模块的命令前先切换到/etc/yum.repos.d目录下creates参数表示bak目录存在时则不执行shell模块。 第二个任务是使用yum\_repository模块配置yum源该模块可添加或移除yum源。 相关参数如下 name指定repo的名称对应于repo文件中的[name]descriptionrepo的描述信息对应repo文件中的namexxxbaseurl指定该repo的路径file指定repo的文件名不需要加.repo后缀会自动加上reposdirrepo文件所在的目录默认为/etc/yum.repos.d目录enabled是否启用该repo对应于repo文件中的enabledgpgcheck该repo是否启用gpgcheck对应于repo文件中的gpgcheckstatepresent表示保证该repo存在absent表示移除该repo。 在上面的配置中使用了一个loop循环来添加两个repoos和epel。 第三个任务是使用yum模块安装一些rpm包yum模块可以更新、安装、移除、下载包。 yum常用参数说明 name指定要操作的包名 可以带版本号可以是单个包名也可以是包名列表或者逗号分隔多个包名可以是url可以是本地rpm包 state present和installed保证包已安装它们是等价的别名latest保证包已安装了最新版本如果不是则更新absent和removed移除包它们是等价的别名download\_only仅下载不安装包ansible 2.7才支持download\_dir下载包存放在哪个目录下ansible 2.8才支持 yum模块是RHEL系列的包管理器如果是ubuntu则无法使用可以使用另一个更为通用的包管理器模块package它可以自动探测目标节点的包管理器类型并使用它们去管理软件。大多数时候使用package来代替yum或代替apt-install等不会有什么问题但是有些包名在不同的操作系统上是不一样的这是需要注意的。 6、时间同步 保证时间同步可以避免很多玄学性的问题特别是对集群中的节点。 通常会使用ntpd时间服务器来保证时间的同步这里使用aliyun提供的时间服务器来保证时间同步并将同步后的时间同步到硬件。 playbook文件如下 --- - name: sync timehosts: nodegather_facts: falsetasks:- name: install and sync timeblock:- name: install ntpdateyum:name: ntpdatestate: present- name: ntpdate to sync timeshell: |ntpdate ntp1.aliyun.comhwclock -w 上面使用了一个block指令来组织了两个有关联性的任务将他们作为了一个整体。block更多的用于多个关联性任务之间的异常处理。 7、关闭selinux 关闭selinux的playbook如下 [rootansible roles]# cat disable_selinux.yaml --- - name: disable selinuxhosts: nodegather_facts: falsetasks:- name: disable on the flyshell: setenforce 0ignore_errors: true   #由于上条命令执行后的返回状态码不一定为0所以为了防止非0报错并停止palsybook接下来的任务所以使用ignore_errors忽略错误- name: disable forever in configlineinfile:path: /etc/selinux/configline: SELINUXdisabled     #修改配置文件中的值以便永久关闭regexp: ^SELINUX          #要修改的内容 注ignore\_errors也经常结合block使用因为在block级别上设置异常处理可以处理block内部的所有错误。 8、配置iptables规则 playbook文件如下 - name: Set Firewallhosts: nodegather_facts: falsetasks: - name: set iptables ruleshell: |# 备份已有规则iptables-save /tmp/iptables.bak$(date %F-%T)# 给它三板斧iptables -Xiptables -Fiptables -Z# 放行lo网卡和允许pingiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -p icmp -j ACCEPT# 放行关联和已建立连接的包放行22、443、80端口iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT# 配置filter表的三链默认规则INPUT链丢弃所有包iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPT 9、远程修改sshd配置文件并重启 有时候为了服务器的安全可能会去修改目标节点上sshd服务的默认配置比如禁止root用户登录、禁止密码认证登录而只允许使用ssh密码认证等。 在修改服务的配置文件时一般有几种方法 通过远程执行sed等命令进行修改配置文件通过lineinfile模块去修改配置文件在ansible本地段写好配置文件然后使用copy模块或者template模块传输到目标节点上。 相对来说第三种方案是最统一、最易维护的方案。 此外对于服务进程来说修改了配置文件往往意味着要重启服务使其加载新的配置文件对于sshd也一样如此但是sshd要比其他服务特殊一些因为ansible默认基于ssh连接重启sshd服务会使ansible连接断开好在ansible默认会重试建立连接无非是多等待几秒。但重建连接有可能会失败比如修改了配置文件不允许重试、修改了sshd的监听端口等这可能会使得ansible因连接失败而无法再继续执行后续任务。 所以在修改sshd配置文件时有如下建议 将此任务作为初始化服务器的最后一个任务即使连接失败也无所谓在playbook中加入连接失败的异常处理如果目标节点修改了sshd端口号建议通过ansible自动或者我们手动去修改inventory文件中的ssh连接端口号。 这里为了简单我准备使用lineinfile模块去修改配置文件要修改的内容只有两项 将PermitRootLogin指令设置为no禁止root用户直接登录将PasswordAuthentication指令设置为no不允许使用密码认证的方式登录 playbook内容如下 [rootansible roles]# cat sshd_config.yaml --- - name: modify sshd_confighosts: nodegather_facts: falsetasks:# 1.备份/etc/ssh/sshd_config文件- name: backup sshd configshell:/usr/bin/cp -f {{path}} {{path}}.bakvars:- path: /etc/ssh/sshd_config# 2.设置PermitRootLogin no- name: disable root loginlineinfile:path: /etc/ssh/sshd_configline: PermitRootLogin noinsertafter: ^#PermitRootLoginregexp: ^PermitRootLoginnotify: restart sshd# 3.设置PasswordAuthentication no- name: disable password authlineinfile:path: /etc/ssh/sshd_configline: PasswordAuthentication noregexp: ^PasswordAuthentication yesnotify: restart sshdhandlers:- name: restart sshdservice:name: sshdstate: restarted 关于notify和handlers的作用如下 ansible会监控playbook执行后的changed的状态如果changed1则表示关注的状态发生了改变即本次任务的执行不具备幂等性如果changed0则表示本次任务要么没执行要么执行了也没有影响即本次任务具备幂等性。ansible提供了notify指令和handlers功能如果在某个task中定义notify指令当ansible在监控到该任务changed1时会触发该notify指令所定义的handler然后去执行handler。所谓handler其实就是task无论是在写法上还是作用上它和task都没有什么区别唯一的区别在于handler是被触发而被动执行的不像普通task一样会按流程正常执行。 唯一需要注意的是notify和handler中任务的名称必须一致。比如 notify: restart sshd那么handlers中必须得有一个任务设置了 name: restart sshd。 此外在上面的playbook中两个lineinfile任务都设置了相同的notify但ansible不会多次去重启sshd而是在最后重启一次。实际上ansible在执行完某个任务之后并不会立即去执行对应的handler而是在当前play中所有普通任务都执行完成后再去执行handler这样的好处是可以多次触发notify但最后只执行一次对应的handler从而避免多次重启。 10、整合所有任务到单个playbook中 这里将前面所有的playbook集合到单个playbook文件中去这样就可以一次性执行所有任务。 整合后的playbook如下 --- - name: Configure ssh Connectionhosts: nodegather_facts: falseconnection: localtasks:- name: configure ssh connectionshell: |ssh-keyscan {{inventory_hostname}} ~/.ssh/known_hostssshpass -p123.com ssh-copy-id root{{inventory_hostname}}- name: Set Hostnamehosts: nodegather_facts: falsevars:hostnames:- host: 192.168.20.4name: node01- host: 192.168.20.5name: node02tasks: - name: set hostnamehostname: name: {{item.name}}when: item.host inventory_hostnameloop: {{hostnames}}- name: Add DNS For Eachhosts: nodegather_facts: truetasks: - name: add DNSlineinfile: path: /etc/hostsline: {{item}} {{hostvars[item].ansible_hostname}}when: item ! inventory_hostnameloop: {{ play_hosts }}- name: Config Yum Repo And Install Softwarehosts: nodegather_facts: falsetasks: - name: backup origin yum reposshell: cmd: mkdir bak; mv *.repo bakchdir: /etc/yum.repos.dcreates: /etc/yum.repos.d/bak- name: add os repo and epel repoyum_repository: name: {{item.name}}description: {{item.name}} repobaseurl: {{item.baseurl}}file: {{item.name}}enabled: 1gpgcheck: 0reposdir: /etc/yum.repos.dloop:- name: osbaseurl: https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/$basearch- name: epelbaseurl: https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch- name: install pkgsyum: name: lrzsz,vim,dos2unix,wget,curlstate: present- name: Sync Timehosts: nodegather_facts: falsetasks: - name: install and sync timeblock: - name: install ntpdateyum: name: ntpdatestate: present- name: ntpdate to sync timeshell: |ntpdate ntp1.aliyun.comhwclock -w- name: Disable Selinuxhosts: nodegather_facts: falsetasks: - block: - name: disable on the flyshell: setenforce 0- name: disable forever in configlineinfile: path: /etc/selinux/configline: SELINUXdisabledregexp: ^SELINUXignore_errors: true- name: Set Firewallhosts: nodegather_facts: falsetasks: - name: set iptables ruleshell: |# 备份已有规则iptables-save /tmp/iptables.bak$(date %F-%T)# 给它三板斧iptables -Xiptables -Fiptables -Z# 放行lo网卡和允许pingiptables -A INPUT -i lo -j ACCEPTiptables -A INPUT -p icmp -j ACCEPT# 放行关联和已建立连接的包放行22、443、80端口iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPTiptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT# 配置filter表的三链默认规则INPUT链丢弃所有包iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT ACCEPT- name: Modify sshd_confighosts: nodegather_facts: falsetasks:- name: backup sshd configshell: /usr/bin/cp -f {{path}} {{path}}.bakvars: - path: /etc/ssh/sshd_config- name: disable root loginlineinfile: path: /etc/ssh/sshd_configline: PermitRootLogin noinsertafter: ^#PermitRootLoginregexp: ^PermitRootLoginnotify: restart sshd- name: disable password authlineinfile: path: /etc/ssh/sshd_configline: PasswordAuthentication noregexp: ^PasswordAuthentication yesnotify: restart sshdhandlers: - name: restart sshdservice: name: sshdstate: restarted 按照以上步骤一步一步操作你将轻松完成批量服务器的初始化。
http://www.hkea.cn/news/14352718/

相关文章:

  • 个人网站的设计流程宜昌网站建设开发团队
  • 口腔医院东莞网站建设汕头快速排名
  • 泉州官方网站js做网站需要那些软件
  • 网站模板凡平台网站收缩广告
  • 网站违反了 google 质量指南建筑公司logo
  • html5网站后台专业网页制作
  • 怎样做网站触屏版网站模板
  • 学会了php的语法怎么做网站海报设计兼职app
  • 网站运营者网址内蒙古创意网站开发
  • 网站侧边栏怎么做网站充值怎么做分录
  • 爱情表白网站制作黑龙江省建设集团网站
  • 网站二级域名设置做网站的带宽
  • 自己开发电商网站难吗广西建设厅网站行业网
  • 深圳市城乡建设部网站首页app开发的价值
  • 优质网站建设价格建设工程合同可以约定仲裁管辖吗
  • icp备案的网站名称最新上市新手机
  • 广州建网站公司那个旅游网站做攻略最好
  • 手机网站建设创意新颖拼多多无货源电商怎么做
  • 松江做公司网站vs做网站怎样加数据库
  • wordpress文章修改大小网络优化的流程
  • 网站建设论文摘要江苏建设工程招标网官方网站
  • 怎么建设网站最便宜会计招聘
  • 网站编程工具网页游戏网站2345
  • 门户网站建设工作总结嘉兴微信网站建设
  • 河东建设局网站中国产品网免费网站
  • dedecms购物网站山东电力建设第一工程有限公司网站注册
  • 虚拟主机如何建设多个网站兰州最好的互联网公司
  • 做网站一屏有多大温岭网络推广公司
  • 有没有专门做布料的网站小程序云服务器多少钱
  • 网站wap设置wordpress获取分类的文章列表