设为首页 收藏本站
查看: 1183|回复: 0

[经验分享] 第三十六课 ansible基本应用和corosync群集基础及安装配置

[复制链接]
发表于 2018-7-30 06:37:03 | 显示全部楼层 |阅读模式
  一、linux自动化运维
  linux 自动化运维大致分三种场景:操作系统安装、系统配置、应用程序部署。
  OS provisioning 操作系统的安装:PXE 、cobbler
  OS configure    操作系统的配置:cfengine、puppet、saltstack、chef
  Deployment      应用程序的部署:funs(ssl)、fabric(ssh)、ansible
  
  1、ansible的安装及配置文件介绍
  2、基本应用 官方站点:www.ansible.com/home,在epel源中有ansible,是Python开发
  命令格式:ansible <host pattern 主机模式> [-m module 模块]  -a  'module_args'
  常用模块:command user copy cron file filesystem group hostname ping redis yum sysctl shell script service
  3、定义主机组/etc/ansible/hosts,一台主机可以属于多个组
  [hbhosts]  
  192.168.1.10
  192.168.1.11
  4、模块应用实例
  #查看磁盘使用情况
  ansible hbhosts -m command -a 'df -h' -k
  -k 基于口令访问
  如果不想root用户登录,可以编辑hosts文件如
  [hbhosts]
  192.168.1.10 ansible_ssh_pass=123456 ansible_ssh_user=user1 ansible_ssh_port=999
  192.168.1.11 ansible_ssh_pass=123456 ansible_ssh_user=user1 ansible_ssh_port=999
  
  #2台机器同时创建fedora 用户
  ansible hbhosts -m command -a 'useradd fedora'
  ansible-doc  -l 列出ansible的模块
  ansible-doc user 查看user模块的用法,比如给用户创建密码
  
  创建用户,添加密码
  openssl passwd -1 -salt `openssl rand -hex 4`
  passwd:
  $12l3kjkidf5ll%kjklj
  ansible bhhosts -m user -a 'name=fedora password=$12l3kjkidf5ll%kjklj'
  #copy 模块,复制文件到2台目标主机
  ansible hbhosts -m copy -a 'src=/root/haha.rpm dest=/tmp/'
  可以owner=xiaoliu group=xiaoliu mode=0655 指定属主、组、权限,默认也复制是的为准
  
  #cron模块、同步2台服务器时间
  ansible hbhosts -m cron -a 'name="sync time" minute="*/3" job="/usr/sbin/ntpdate 127.0.0.1"'
  #从远程主机复制文件到本地主机,如果远程主机文件不一致就有麻烦了,通过变量来指定
  ansible bhhosts -m  fetch -a 'src=/tmp/somefile dest=/tmp/ flat=yes'
  #创建远程链接和指定文件路劲\属主、权限等
  ansible hbhosts -m file -a 'path=/etc/foo.conf owner=foo group=foo mode=664'
  ansible hbhosts -m file -a 'path=/tmp/test.txt state=touch' 创建空文件test.txt
  #ping 主机是否在线
  ansible hbhosts -m ping
  #yum 安装程序包
  ansible hbhosts -m yum -a 'name=vsftpd state=present/remove'  指定状态为安装或删除
  ansible hbhosts -m yum -a 'name="@Development tools" stat=present'
  #service 控制启动vsftpd服务并开机自动启动
  ansible hbhosts -m service -a 'name=vsftpd state=started enabled=yes'
  #shell 模块给用户加密码
  ansible hbhosts -m shell -a 'echo 123456 | passwd --stdin fedora'  
  shell把后面的命令当脚本来执行
  #script,先创建一个脚本,后ansible 加载脚本
  vi useradd.sh
  #!/bin/sh
  for i in {1..10};do
  useradd user$i
  echo mageedu | passwd --stdin user$i &> /dev/null
  done
  ansible hbhosts -m script -a  '/root/useradd.sh'
  获取模块:ansible-doc -l
  ansible-doc module_name
  5、基于密钥认证
  #ssh-keygen -t rsa -P ''  #生成密钥对
  #ansible hbhosts -m copy -a 'src=/root/.ssh/id_rsa.pub                          dest=/root/.ssh/authorized_keys owner=root group=root mode=600'       #把公钥复制的每一个主机上
  #ssh 192.168.1.10 'date'   测试公钥复制生效,然后编辑hosts文件,删除其他选项只留    IP地址,如:
  [hbhosts]
  192.168.1.10
  192.168.1.11
  
  或者#ssh-keygen
  #ssh_copy_id /root/.ssh/id_rsa.pub root@客户端ip地址
  6、ansible.cfg 主配置文件(修改一批管理多少主机可以在此设置,默认一次修改5台主机)
  安装实例:
  ansible只需安装在一台控制器上,来管理其他node1、node2、node3 等
  我们现在找一台控制器来安装ansible。
  安装epel源
  #rpm -ivh http://download.fedoraprojet.org/pub/epel/6/x86_64/epel-            release-6.8.noarch.rpm
  yum install ansible -y
  rpm -ql ansible | less#查看ansible的安装路径
  ansible -h  #查看帮助
  vi /etc/ansible/hosts  ,删除多余说明文件,定义主机组,如
  【hbhost】
  192.168.100.7
  192.168.100.8
  ansible hbhosts -m command -a 'date' -k  #查看定义主机组的日期,以ssh链接,基于口令验证(不加-k基于秘钥验证),第一次要输入密码。
  ansible hbhosts -m command -a 'df -h' -k #查看2台主机的磁盘空间
  如果不想输入密码登录或使用普通用户或不想使用默认端口号,还可以将密码写入hosts配置文件中,如
  [hbhosts]
  192.168.1.10 ansible_ssh_pass=123456 ansible_ssh_user=user1 ansible_ssh_port=999
  192.168.1.11 ansible_ssh_pass=123456 ansible_ssh_user=user1 ansible_ssh_port=999
  各模块的参数可以ansible-doc  -l 或ansible-doc  mod_name 来查看帮助信息
  二、ansible playbooks:
  1、 ansible 基本机构:
  Inventory:清单、列表;定义被管控的主机、主机组
  Modules :模块,定义对被管控主机执行的命令
  Ad Hoc Commands:对被管控主机直接执行命令
  Playbooks:批量管理被控主机的脚本
  Tasks:任务,由各模块所支持执行的特定操作;
  -m user -a 'name= password='
  variables:变量,控制语法结构
  templates:模板,实现不同配置文件的文本文件模板,使用模板语言来定义
  handlers:处理器,事先定义好的可以在某些条件下被触发的操作
  roles:角色,层次型组织playbook及其所依赖的各种资源的一种机制:可被单独调用,
  如不同功能(web\db\cache)服务器执行相同的操作(ntptime 同步时间)。
  2、剧本案例,node1、node2节点上安装httpd服务并开机启动。
  #vim web.yaml
  - name: web servers  #定义一个剧本的功能
  remote_user: root  #运行剧本的用户
  #sudo: true        #如果定义普通用户,需要定义sudo来执行某些权限
  hosts: hbhosts     #剧本对象列表
  tasks:                   #剧本具体的任务
  - name: install httpd     #第一个任务安装httpd 服务
  yum: name=httpd state=present   #模块名称及参数
  - name: httpd service     #第二个任务启动httpd 服务
  service: name=httpd enabled=yes state=started    #模块名称及参数
  #ansible-playbook web.yaml
  
  3、安装vsftpd服务并开机启动
  #!/bin/bash
  #this scripts is reinstall httpd for liwenjia
  - name: install vsftp
  hosts: webhost
  user: root
  tasks:
  - name: install vsftp
  yum: name=vsftpd state=present
  - name: service vsftpd
  service: name=vsftpd enabled=yes state=started
  三、ansible 基础元素
  
  1、变量
  a.变量的命名仅能字母、数字、下划线组成,只能字母开头
  b.facts 是由正在通信的远程目标主机发回的信息,被保存在ansible变量中,如
  #ansible hostname -m setup
  2、inventory 主机列表,默认文件为/etc/ansible/hosts,iventory file 可以有多个,也可以通过Dynamic inventory 动态生成。
  a.文件格式:
  【webserver】
  192.168.1.111
  www.baidu.com         #可以是域名,但要能解析
  192.168.1.222:8080    #可以自己定义端口号
  【webservers】
  www[01:05].example.com #遵循相似的命名规则,还可以使用列表的方式标示各主机
  db-[a:f].example.com
  3、主机变量
  可以在inventory中定义主机时为其添加主机变量便于在playbook中使用,如
  【webserver】
  www1.baidu.com http_port=80 maxRequestsPerChild=808
  www2.baidu.com http_port=8080 maxRequestsPerChild=909
  4、组变量
  指赋给指定组内所有主机上在playbook中可用的变量,如
  【webservers】
  www1.magedu.com
  www2.magedu.com
  【webserver:vars】     #固定格式,前面定义的每个主机都执行此变量
  ntp_server=ntp.magedu.com
  nfs_server=nfs.magedu.com
  5、组嵌套
  指组中还可以包含其他组,并且也可以向组中的主机指定变量,不过这些变量不支持ansible,只能在ansible-playbook中使用。如:
  【apache】
  www1.magedu.com
  www2.magedu.com
  【nginx】
  ngx1.magedu.com
  ngx2.magedu.com
  【webservers:children】  #嵌套组
  apache
  nginx
  6、inventory参数,ansible基于ssh链接远程主机时,可以通过参数指定其交互方式,
  参数如下:
  ansible_ssh_host
  ansible_ssh_port
  ansible_ssh_user
  ansible_ssh_pass      
  ansible_sudo_pass
  ansible_connection    #连接主机的方式,默认paramiko
  ansible_ssh_private_key_file   #指定不同远程主机使用私钥文件
  ansible_shell_type
  ansible_python_interpreter  #python解释器的版本
  四、条件测试
  1、when语句
  在task后添加when子句即可使用条件测试:when语句支持jinja2表达式语法:例如
  task:
  - name:"shutdown Debian flauored systems"
  command:/sbin/shutdown -h now
  when:ansible_os_family == "Debian"
  五、迭代
  当有需要重复性执行的任务时,可以使用迭代机制。其使用格式为将需要迭代的内容定义为item变量引用,并通过with_items语句来指明迭代的元素列表即可,
  如1:
  -name:add users
  remote_user:root
  hosts:hbhosts
  tasks:
  - name:add serveral users
  user:name=`item` state=present groups=wheel
  with_items:              ###present 表示创建用户
  - testuser1
  - testuser2
  等同于:
  - name:add user testuser1
  user:name=testuser1 state=present groups=wheel
  
  - name:add user testuser1
  user:name=testuser1 state=present groups=wheel
  
  事实上,with_items中可以使用元素还可为hashes, 如下:
  - name:add several users
  user:name=`item`.`name` state=present group=`item`.`groups`
  with_items:
  - { name: 'testuser1',groups:'wheel' }
  - { name: 'testuser2',groups: 'root' }
  
  ansible的循环机制还有好多高级功能.
  #ansible-playbooks adduser.yaml,查看结果,用户已经成功添加。
  
  如2:vim zsh.yaml
  - name install zsh
  remote_user:root
  hosts:hbhosts
  tasks:
  - name:install zsh
  yum:name=zsh state=present
  when:ansible_pkg_mgr == "yum"
  #ansible-playbook zsh.yml,查看客户端主机安装的zsh
  
  
  六、ansible playbooks
  
  例如: - name:web service
  remote_user:root
  hosts:hbhosts
  tasks:
  - include: /opt/tasks/main.yml   #把任务定义在另一个配置文件中
  handlers:
  - include:/opt/handlers/main.yml  
  
  
  /opt/tasks/main.yml ,如下:
  - name:install httpd
  yum:name=httpd state=latest
  tags:install
  - name:configration file
  copy:src=/opt/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
  tags:conf
  notify:restart httpd
  - name:start httpd
  service:name=httpd enabled=yes state=started
  
  /opt/handlers/main.yml ,如下:
  - name:restart httpd
  service:name=httpd state=restarted
  
  #absible-playbook httpd.yml  ,查看结果,这样就把一个大的文件分割成多个小的配置文件来实现。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-543211-1-1.html 上篇帖子: ansible--循环 下篇帖子: 利用ansible批量创建iis站点
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表