ansible简单部署

	1、安装ansible
	    yum install -y ansible  依赖epel的yum源
	2、anisble相关配置文件
		/etc/ansible/ansible.cfg
		/etc/ansible/hosts   ---主机清单文件  定义可以管理的主机信息
		/etc/ansible/roles	 ---角色目录
		ansiable帮助手册
		ansible-doc -l   列出模块目录
		ansible-dic -s fetch  指定详细显示1个模块的作用
    3、编写主机清单文件
		把需要管理的主机IP地址写入hosts文件
	4、测试是否可以管理多个主机(注意一定要可以通过密钥登录管理的主机)
		ansible all -a "hostname"
	5、ansible输出颜色信息说明
		绿色:查看主机信息
		黄色:修改了主机内容
		红色:执行出错
		粉色:警告信息
		蓝色:anisble执行过程
	6、ansible软件模块使用
		command模块
		1)语法格式:
			ansible 主机名/主机组/ip   -m 模块名  -a  "动作信息"
			举例:ansible 172.16.1.131 -m command -a "hostame"
		2)chdir  执行action之前 切换目录
			举例:ansible 172.16.1.131 -m command -a " chdir=/temp touch a.txt"
		3) creates 如果文件存在就不执行,如果不存在则执行
			举例:ansible 172.16.1.131 -m command -a " creates=/temp/a.txt chdir=/temp touch a.txt"
				如果/temp目录下存在a.txt 则不创建,如果不存在就创建
		4)removes 如果如果文件存在就执行,如果不存在则不执行
		
		5)部分特殊字符command无法识别
			比如:> < | ;
		
			 和3相反
		shell模块(万能模块)
		和command模块类似
		1)语法格式:
			ansible 主机名/主机组/ip   -m shell  -a  "动作信息"
			举例:ansible 172.16.1.131 -m shell -a "hostame"
		2)chdir  执行action之前 切换目录
			举例:ansible 172.16.1.131 -m shell -a " chdir=/temp touch a.txt"
		3) creates 如果文件存在就不执行,如果不存在则执行
			举例:ansible 172.16.1.131 -m shell -a " creates=/temp/a.txt chdir=/temp touch a.txt"
				如果/temp目录下存在a.txt 则不创建,如果不存在就创建
		4)removes 如果如果文件存在就执行,如果不存在则不执行
			 和3相反
			 
		scripts模块  可以远程执行脚本
		 ①、编写脚本
		 ②、运行ansible命令执行脚本
		 举例:ansible 172.16.1.131 -m scripts -a " /server/scripts/test.sh"
		
		copy模块   数据信息进行批量分发
		举例;ansible 172.16.1.131 -m copy -a "src=/tmp/test.txt dest=/tmp/test.bak"
		常用参数:src 指定源路径
				  dest 指定目标路径
				  backup 是否备份dest上的数据  参数选项yes/no    
							举例:backup=yes
				  owner 指定属主
				  group 指定属组
				  mode 指定权限
				  content 修改dest的文件内容
				  remote_src 默认是no 如果改为yes 那么源路径就在远程主机上找
		file模块  修改文件的属主和属组
			举例:ansible 172.16.1.31 -m file -a "dest=/etc/hosts owner=test group=test mode=654"
		其它用法:
			state=参数  用来创建参数指定的文件类型 比如:文件 目录 连接
			      directory 创建目录
				  file  检查数据信息是否存在
				  absent  删除
				  hard  创建硬链接
				  link  创建软连接
				  touch  创建文件
		举例:ansible 172.16.1.31 -m file -a "staus=directory dest=/temp/test"
				创建test目录
			  ansible 172.16.1.31 -m file -a "staus=touch dest=/temp/test"
				创建test文件
		fetch模块
			可以从远端把内容拉到本地来 
		yum模块
		举例:ansible 172.16.1.31 -m yum -a "name=iotop state=installed"
		service模块 可以操作某个服务
	       参数:state  
						=started  启动
						=stoped 停止
				 enabled 
				        =yes     开机自启
		举例:ansible 172.16.1.31 -m service -a "name=nfs state=started enabled=yes"
		cron模块
		*   *   *   *   *
		分 时  日   月  周 
		minute: 设置分  (0-69  0,2    *  */2 ) *代表每分  */2 代表每2分
		hour:   设置时
		day:    设置日
		month    设置月
		weekday: 设置周
		job:    用于指定shell文件
		举例:ansible 172.16.1.31 -m cron -a "minute=0 hour=2 job=XXX"
		扩展用法:
		1)给定时任务设置备注名字
		   name   可以用来防止同样的ansible设置的定时任务重复写如cron
		2)state	
				=absent 删除定时任务
		3)批量注释
			disabled=yes
		mount模块  用于批量挂载
		参数:src  需要挂载的存储设备或文件信息
		      path 挂载的目录
			  fstype 指定挂载类型
			  state 
					=mounted
					=unmounted
		user模块  批量管理用户
		基本用法:name用来指定创建的用户名
		ansible 172.16.1.31 -m user -a "name=XX"
		扩展用法;
		uid 指定UID
		group 指定GID
		groups 指定附加组
		create_home 指定是否创建家目录
		shell 指定用户shell
		password 设置用户密码
			PS:密码必须用加密的,不能用明文的
		生成加密密码:ansible all -i localhost, -m debug -a "msg={{'123456' | password_hash('sha512','test')}}"
																									 算法     随机参数
		ping模块:远程管理测试模块 可以测试被管理设备是否能够被ansible管理
		setup模块;返回系统信息
		举例:ansible localhost -m setup

	7、剧本编写规范:pyyaml -- 三点要求
		1)、严格缩进(2个空格)
		2)、冒号使用规范   冒号后面要有空格
			举例:host: 172.16.1.31
		3)、短横线的引用(列表)
		4)、一个name下面只能有1个模块
	8、创建剧本目录(举例rsync)
		mkdir /etc/ansible/ansible-playbook
		cd ansible-playbook
	    vim rsync_server.yaml
		- hosts: 172.16.1.131
		  tasks: 
		    - name: 01-install rsync #注释表明安装rsync
			  yum: name=rsync state=installed
			- name: 02-copy rsyncd.conf #注释复制配置文件
			  copy: src=/tmp/rsyncd.conf dest=/etc/
		
	9、如何执行剧本
		1)、检查剧本语法格式
			ansible-playbook --syntax-check  rsync_server.yaml
		2)、模拟执行剧本
			ansible-playbook -C rsync_server.yaml
		3)、执行剧本
			ansible-playbook rsync_server.yaml
	
	10、剧本中设置变量信息
		方式一:直接剧本文件编辑
		vars:
		  bianliang1: b1
		  bianliang2: b2
		方式二、命令行指定
		ansible-playbook --extra-vars=X=X
		方式三、主机清单配置方式
		[varset]
		var1=v1
		var2=v2
	    优先级:2>1>3
	11、剧本中设置注册信息
		-hosts: test
		  tasks:
		  - name: check server port
		    sheel: netstat -lntup
			register: get_server_port  #这个可以根据需求自定义名字,方便下面调用,实际上存储的是shell返回的结果
		  - name: display port info  
		    debug: msg={{get_server_port.stdout_lines}}
	12、剧本设置判断
		-hosts: test
		  tasks:
		  - name: install httpd
		    yum: name=httpd state=installed
			when: (ansible_distribution == "CentoOS")
		  - name: install httpd2
			yum: name=httpd2 state=installed
			when: (ansible_distribution == "ubuntu")
		可用的系统判断信息获取(内置变量):
			ansible localhost -m setup
			需求可以通过上述命令查看
			举例:ansible localhost -m setup -a "ansible_eth0"
			如何获取ansible_eth0下的子选项ipv4地址呢
			举例:ansible localhost -m setup -a "ansible_eth0[ipv4]"
	13、剧本设置循环
		举例:copy模块循环
		copy: src=/etc/ansible/server_file/rsync_server/{{item.src}} dest={{item.dest}} mode={{item.mode}}
		with_items: 
		  - { src: 'rsyncd.conf' dest: '/etc' mode: '600'}
		  - { src: 'rsync.password' dest: '/etc' mode: '600'}
	14、剧本设置忽略错误
		ignore_errors yes
	15、剧本设置标签
		tags: XX 用来标记剧本中的某一个模块
		使用tag
		ansible -t tags XX  xxx.yaml
	16、剧本设置触发信息
		举例:
	  tasks:
		copy: src=/etc/ansible/server_file/rsync_server/{{item.src}} dest={{item.dest}} mode={{item.mode}}
		with_items: 
		  - { src: 'rsyncd.conf' dest: '/etc' mode: '600'}
		  - { src: 'rsync.password' dest: '/etc' mode: '600'}
		notify: restart rsync server
		.
		.
		.
	  handlers:
	    - name: restart rsync server
		  service: name=rsyncd state=restarted
	17、使用剧本在测试服务器10.0.0.132上安装nfs服务 (管理服务器使用10.0.0.129)  然后再10.0.0.131上挂载这个远程服务
		1)、在10.0.0.129上安装ansible软件
			yum -y install ansible
		2)、编辑主机清单
			sudo vi /etc/ansible/hosts
			把10.0.0.131/132加入主机清单
		3)、在10.0.0.132/131上安装ssh服务,且能把10.0.0.129的公钥分发给10.0.0.132
			10.0.0.132上:yum install -y sshd
			10.0.0.129上:ssh-keygen
						 sshpass -pa12741274 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.132 "-o StrictHostKeyChecking=no" -p 22
						 sshpass -pa12741274 ssh-copy-id -i /root/.ssh/id_rsa.pub root@10.0.0.131 "-o StrictHostKeyChecking=no" -p 22
			测试能够直接从10.0.0.129SSH到10.0.0.132/131
		4)、测试ansible能够管理10.0.0.132
			ansible 10.0.0.132 -a "hostname"
		5)、创建剧本目录
			mkdir /etc/ansible/ansible-playbook
		6)、创建yaml剧本文件
  • hosts: 10.0.0.132
    tasks:

    • name: 01-install rpcbind and nfs-utils
      yum: name=rpcbind state=installed
      yum: name=nfs-utils state=installed
    • name: 02-edit /etc/exports
      copy: dest=/etc/exports content=/webdata 10.0.0.0/24 (rw,wedelay,root_squash,no_all_squash)
    • name: 03-start nfs-server
      service: name=nfs state=started enabled=yes
    • name: 04-create shared dir
      file: state=directory dest=/webdata
      7)、创建客户端剧本yaml文件
  • hosts: 10.0.0.131
    tasks:

    • name: 01-install nfs-utils
      yum: name=nfs-utils state=installed

    • name: 02-mount remote dir
      mount: src=10.0.0.132:/webdata path=/tmp fstype=nfs state=mounted
      10、主机清单的配置方式
      1)、分组方式
      [web]
      172.16.1.[7:9] #针对连续的ip地址可以批量写
      web01
      172.16.1.100:52111 #针对端口发生改变的情况
      x.x.x.x
      [data]
      data01 ansible_ssh_host=10.0.0.131 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456 #可以代替配置SSH
      x.x.x.x
      x.x.x.x
      PS:分组完成后 可以使用ansible web 这样的方式来访问组
      11、角色配置剧本
      规范:
      主目录:/etc/ansible/ansible-playbook/roles
      子目录架构,角色名XX:
      tasks #完成主要任务
      vars #存储变量
      file #存储文件
      handlers #存储触发后的操作
      templates #如果file里文件的某个值经常改变,可以写成变量,然后把file模块改成template模块下,变量写在vars目录的yml下
      12、role方式编写rsync脚本
      举例: rsync和nfs服务器:10.0.0.132 rsync和nfs客户端 10.0.0.129 ansible管理端 10.0.0.129
      步骤1:编写主机清单文件
      vim /etc/ansible/hosts
      [rsync:children]
      [rsync_server]
      10.0.0.132
      [rsync_client]
      10.0.0.129
      [nfs:children]
      [nfs_server]
      10.0.0.130
      [nfs_client]
      10.0.0.129

      步骤1、创建ansible的角色文件
      mkdir /etc/ansible/ansible-playbook/roles
      cd /etc/ansible/ansible-playbook/roles
      mkdir -p {nfs,rsync,}/{tasks,vars,files,handerls,templates}
      步骤2、在roles目录下创建site.yaml文件,设置绑定主机和角色
      cd /etc/ansible/ansible-playbook/roles
      vim site.yaml
      - hosts: nfs
      roles:
      - nfs-server
      步骤3、编写role rsync
      cd /etc/ansible/ansible-playbook/roles/rsync
      1、脚本需要的文件在file下提前准备好
      1) 准备rsyncd.conf文件
      cd /etc/ansible/ansible-playbook/roles/rsync/file
      vim rsyncd.conf
      uid = rsync
      gid = rsync
      port=873
      use chroot = no
      max connections = 20
      fake user=yes #将rsync普通用户伪装成为超级管理员 这样当客户端的root管理员传进来的文件可以用rsync用户修改其权限
      pid file = /var/run/rsyncd.pid
      lock file = /var/run/rsyncd.lock
      log file = /var/run/rsyncd.log
      timeout = 300
      read only=false
      list=false #配置客户端是否可以查看服务单的模块信息
      hosts allow=10.0.0.0/24
      auth users=rsync_backup
      secrets file=/etc/rsync.password
      [testbackup]
      comment=“backup by zjm”
      path=/backup
      vim rsync.password
      rsync_backup:123456
      2、生成1个rsync的HASH密码
      ansible all -i localhost, -m debug -a “msg={{‘123456’ | password_hash(‘sha512’,‘test’)}}”
      结果: 6 6 6test$Uw04i0G6tyBkrmvmZN.aS5cOXf8Ryhz5HxLT5OIFzQBzTDqJpDo6YMejdXXJiDIl0efUr01hf/dSKFv.UbrMU.
      3、定义可能用到的变量文件
      cd /etc/ansible/ansible-playbook/roles/vars
      vim main.yaml
      rsync_server_address: 10.0.0.132
      3、编写tasks
      cd tasks
      touch main.yaml rsync_server.yaml rsync_client.yaml
      vim main.yaml
      内容如下:
      - import_tasks: rsync_server.yaml
      when (ansible_all_ipv4_addresses == rsync_server)
      - import_tasks: rsync_client.yaml

        		vim rsync_server.yaml
      
  • name: 01-install rsync
    yum: name=rsync state=installed

  • name: 02-copy rsync.conf and rsyncd.password
    copy: src={{item.src}} dest={{item.dest}} mode={{item.mode}}
    loop:

    • { src: ‘rsyncd.conf’,dest: ‘/etc/’,mode: 600}
    • { src: ‘rsync.password’,dest: ‘/etc/’,mode: 600}
  • name: 03-create-user-rsync_backup
    user: name=rsync password= 6 6 6test$Uw04i0G6tyBkrmvmZN.aS5cOXf8Ryhz5HxLT5OIFzQBzTDqJpDo6YMejdXXJiDIl0efUr01hf/dSKFv.UbrMU.

  • name: 04-create-backdir
    file: state=directory dest=/testbackup owner=rsync group=rsync mode=755

  • name: 05-start server
    service: name=rsyncd state=started enabled=yes

      			vim rsync_client.yaml
    
  • name: 01-install rsync
    yum: name=rsync state=installed

  • name: 02-create-test-file
    file: state=touch dest=/tmp/test.txt

  • name: 02-test-rsync
    shell: rsync -avz /tmp/test.txt rsync_backup@{{rsync_server_address}}::testbackup --password-file=/etc/rsync.password

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值