통합 아키텍처 일괄 관리 서비스 --ansible
00 서론 부분
1) 간단한 클릭 한 번으로 배포 완벽한 서비스 스크립트 기능을 사용하여
2) 호스트 목록 구성
3) 확장 된 구성이 시나리오 기능을
통합하는 방법 4) 여러 스크립트를
) 5 디렉토리의 역할을한다 ???
01. 기술 검토
1) 모든 모듈에 대해서 설명 하였다 설명한
command 模块: 在远程主机上执行命令操作 默认模块
shell 模块: 在远程主机上执行命令操作 万能模块
PS: 有时剧本不能反复执行!!!
script 模块: 批量执行本地脚本
copy 模块: 用于批量分发传输数据信息
fetch 模块: 用于将远程主机数据进行拉取到本地管理主机
file 模块: 修改数据属性信息/创建数据信息
yum 模块: 用于安装和卸载软件包
service 模块: 用于管理服务的运行状态
user 模块: 用于批量创建用户并设置密码信息
mount 模块: 用于批量挂载操作
cron 模块: 批量部署定时任务信息
ping 模块: 远程管理测试模块
ansible 172.16.1.31 -m ping
2) ansible 서비스 스크립트 함수
스크립트의 일부 :
스크립트 구문 사양 :
- 공간 사양 : 들여 쓰기를 달성
- 콜론 사양 : 키 정의 달성하기
- 수평 라인 사양 : 목록 표시를 달성
서비스에게 키 배포 -rsync를 완료하기 위해 스크립트를 사용하여 02 :
rsync를 서비스 구축
NFS 서비스 배포
sersync 서비스 배포
전체 네트워크 백업 프로젝트 -rsync
rsync와 스크립트 작성 서비스 :
준비 :
- 소프트웨어 배포 프로세스에 익숙
- 친숙한 ansible 소프트웨어 모듈
- 친숙한 ansible 시나리오 작성 사양
ansible :
배치 (모듈)에 임시 임시 관리 기능 --- 명령
각본 영구적으로 달성 배치 관리 (각본) --- 스크립트
[root@m01 ansible-playbook]# cat rsync_server.yaml
- hosts: rsync_server
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
#shell: useradd rsync -M -s /sbin/nologin --shell在剧本中不能反复执行,rsync用户存在时会报错
- name: 04-create backup dir
file: path=/backup state=directory owner=rsync group=rsync
- name: 05-create password file
copy: content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600
- name: 06-start rsync server
service: name=rsyncd state=started enabled=yes
- hosts: rsync_clients
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-create password file
copy: content=oldboy123 dest=/etc/rsync.password mode=600
- name: 03-create test file
file: dest=/tmp/test.txt state=touch
- name: 04-check test
shell: rsync -avz /tmp/test.txt [email protected]::backup --password-file=/etc/rsync.password
각본은 일반적인 실수를 작성 :
스크립트 구문 규격 준수 (공간 대장 대시)
스크립트 모듈 올바른 사용
만 모듈 작업 쓸 수있는 다음과 같은 정보를 식별하기 위해 스크립트의 이름을
쉘 모듈의 큰 숫자를 사용하지 않으려 스크립트를
03. 호스트 목록을 구성하는 방법
공식 주소의 호스트 구성 목록 :
https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
설명 :은 / etc / ansible / hosts 파일의
[]
표현은[组名]
, 쉬운 배치 라벨 호스트의 IP 주소를 사용하는
초기 구성에만 호스트의 IP 주소를cat /etc/ansible/hosts 172.16.1.31 172.16.1.41 172.16.1.7
호출 :
ansible all -a "hostname" 或者 ansible 172.16.1.31,172.16.1.41 -a "hostname"
제 1 실시 예 : 호스트 구성 정보 패킷
cat /etc/ansible/hosts
[web]
172.16.1.7
172.16.1.8
172.16.1.9
[data]
172.16.1.31
172.16.1.41
작동 중
[root@m01 ansible-playbook]# ansible data -a "hostname"
172.16.1.31 | CHANGED | rc=0 >>
nfs01
172.16.1.41 | CHANGED | rc=0 >>
backup
[root@m01 ansible-playbook]# ansible web -a "hostname"
172.16.1.7 | CHANGED | rc=0 >>
web01
두 번째 방법 : 호스트 기호 매칭 구성
[web]
172.16.1.[7:9] ---表示7-9共3台主机
[web]
web[01:03] ---表示1-3共3台主机,但前提条件是/etc/hosts中已经配置好地址解析
세 번째 방법 : 비표준 원격 포트를 유지하기
[web]
web01:52113 或
172.16.1.7:52113
操作命令:ansible web01 -a "hostname"
네 번째 방법 : 특수 변수와 호스트
이러한 배열은 사용 SSH 공개 키에 사전에 배포 할 수 없습니다
[web] ---方法一
172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
[web] ---方法二
web01 ansible_ssh_host=172.16.1.7 ansible_ssh_port=52113 ansible_ssh_user=root ansible_ssh_pass=123456
다섯 번째 방법 : 호스트 그룹 이름 포함 된 프로필
[rsync:children]--- 嵌入子组信息,rsync包含rsync_server组合rsync_client组,需要使用参数children
rsync_server
rsync_client
[rsync_server]
172.16.1.41
[rsync_client]
172.16.1.31
172.16.1.7
호스트를 구성하는 다음 내장 변수 방법, 당신이 이해할 수있는이 방법은, 나머지는 후속 의지
[web:vars] --- 嵌入式变量信息
ansible_ssh_host=172.16.1.7
ansible_ssh_port=52113
ansible_ssh_user=root
ansible_ssh_pass=123456
[web]
web01
### 组web中web01主机会调用web:vars的变量值,功能同上述第四种方式方法二
04. 구성 스크립트 확장
대본 /etc/ansible/ansible_playbook/rsync_server.yaml 최적화를위한 변수 정보하십니까
CP rsync_server.yaml rsync_server_varinfo.yaml을
가. 스크립트의 변수 정보를 설정
방법 1 : 스크립트 파일에 직접 쓰기
바르 :
oldboy01 : DATA01
oldboy02 : data02변수 참조 참고 : 사용
{{ 变量 }}
사용 방법 :
[root@m01 ansible-playbook]# cat rsync_server_varinfo.yaml
- hosts: rsync_server
vars:
backupdir: /data
passfile: rsync-password
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
#shell: useradd rsync -M -s /sbin/nologin
- name: 04-create backup dir
file: path={{ backupdir }} state=directory owner=rsync group=rsync
- name: 05-create password file
copy: content=rsync_backup:oldboy123 dest=/etc/{{ passfile }} mode=600
- name: 06-start rsync server
service: name=rsyncd state=started enabled=yes
- hosts: rsync_clients
vars:
passfile: rsync-password
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create password file
copy: content=oldboy123 dest=/etc/{{ passfile }} owner=root group=root mode=600
- name: 04-start rsyncd server,set enabled.
service: name=rsyncd state=started enabled=yes
- name: 05-create test file
file: dest=/tmp/test.txt state=touch
- name: 06-check test data backup
shell: rsync -avz /tmp/test.txt [email protected]::data --password-file=/etc/{{ passfile }}
두 번째 방법 : 명령 행에 지정
ansible-playbook --extra-vars=oldboy01=data01
使用方法:可将上述变量定义部分注释掉,但剩下变量引用,这时引用的变量为临时变量,需要从命令行获取值
参数 --extra-vars 可用短格式 -e
[root@m01 ansible-playbook]# cat rsync_server_varinfo.yaml
- hosts: rsync_server
#vars:
# backupdir: /data
# passfile: rsync-password
tasks:
...
- hosts: rsync_clients
# vars:
# passfile: rsync-password
tasks:
...
命令执行前可先删除对应目录和密码文件再进行测试
[root@m01 ansible-playbook]# ansible-playbook --extra-var backupdir=/data -e passfile=/etc/rsync-password
세 가지 방법 : 호스트 목록 파일에 쓰기
[올드 보이]
oldboy01 = DATA01
oldboy02 = data02
## 配置信息vars部分
[root@m01 ansible-playbook]# cat /etc/ansible/hosts
[rsync:children]
rsync_server
rsync_clients
[rsync_server]
172.16.1.41
[rsync_server:vars]
backupdir=/data
passfile=rsync-password
[rsync_clients]
172.16.1.7
172.16.1.31
[rsync_clients:vars]
passfile=rsync-password
##执行
[root@m01 ansible-playbook]# ansible-playbook rsync_server_varinfo.yaml
문제에 대한주의 : 당신은 세 가지 방법으로 구성한 경우, 효과의 세 가지 우선 순위는 다음과 같습니다
가장 높은 우선 순위 : 명령 줄 변수 설정 (거의 사용하지 않음)
차 우선 순위 : 스크립트 변수 설정 (가장 많이 사용)
최종 : 호스트 변수 설정 목록 (다중 이용 시간)
세 가지 우선 순위에서 테스트 된 다른 변수를 구성 할 수 있습니다
##剧本中: backupdir=/data01 passfile=/rsync-password01 ##主机清单文件中: backupdir=/data03 passfile=/rsync-password03 ##命令行执行:--检测出/data02文件夹生成,命令行设置最优先 [root@m01 ansible-playbook]#ansible-playbook --extra-var backupdir=/data02 -e passfile=/etc/rsync-password02 rsync_server_varinfo.yaml ##命令行执行:--检测出/data01文件夹生成,剧本中变量设置次优先 [root@m01 ansible-playbook]#ansible-playbook rsync_server_varinfo.yaml ##注释掉剧本中变量设置后,命令行执行:--检测出/data03文件夹生成,主机清单中变量设置最后 [root@m01 ansible-playbook]#ansible-playbook rsync_server_varinfo.yaml
더 많은 반사 : 설정 글로벌 변수 (역할에서, 프리젠 테이션의 중요한 부분을 담당하고) 어떻게
나. 스크립트의 등록 정보를 설정
설명 : 변수의 정의와 등록 정보의 기능은 다음 변수를 호출
한 다음 사용할 수 있습니다 만 확인, 특정 포트 정보를 표시하지 않는 등의 rsync와 서비스 포트를 확인하여, 설치되어 있는지 여부를 확인하는 등,하지만 쉘 프롬프트 모듈을 ansible 등록 기능, 표시 정보 스크립트 실행
사용에 :
cd /etc/ansible/ansible-playbook/
cp rsync_server.yaml rsync_server_reginfo.yaml
cat rsync_server_reginfo.yaml
- hosts: rsync_server
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
#shell: useradd rsync -M -s /sbin/nologin
- name: 04-create backup dir
file: path=/backup state=directory owner=rsync group=rsync
- name: 05-create password file
copy: content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600
- name: 06-start rsync server
service: name=rsyncd state=started enabled=yes
## 以下部分为register info
- name: 07-check server port info
shell: netstat -lntup|grep 873 ---端口信息
register: get_server_port ---定义保存端口信息的变量
- name display port name
debug: msg={{ get_server_port.stdout_lines }} ---debug调用变量输出信息,stdout_lines是标准输出格式显示的作用
## 执行结果
[root@m01 ansible-playbook]# ansible-playbook rsync_server_reginfo.yaml
...
TASK [07-check server port info] ****************************************************************************************
changed: [172.16.1.41]
TASK [display port name] ************************************************************************************************
ok: [172.16.1.41] => {
"msg": [
"tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 936/rsync ",
"tcp6 0 0 :::873 :::* LISTEN 936/rsync "
]
}
스크립트 다. 설정 판정 정보
어떻게 조건을 지정하는 것은 결정 :
(ansible_hostname == "NFS")
관리되는 호스트 시스템 설치 디스플레이 모듈의 세부 사항
내장하기 변수 방법 :
ansible rsync_server -m setup -a "filter=ansible_hostname" -- ansible_hostname变量由setup模块提供
常见主机信息:
ansible_all_ipv4_addresses --显示ipv4信息
ansible_devices --仅显示磁盘信息
ansible_distribution --显示是什么系统,例如:centos,suse等
ansible_distribution_major_version --显示系统主版本
ansible_distribution_version --显示系统版本
ansible_machine --显示系统类型,32位,64位
ansible_eth0 --仅显示eth0的信息
ansible_hostname --显示主机名
ansible_kernel --显示内核版本
ansible_lvm --显示lvm相关信息
ansible_memtotal_mb --显示系统总内存
ansible_memfree_mb --显示系统可用内存
ansible_swaptotal_mb --显示总的swap内存
ansible_swapfree_mb --显示swap内存的可用内存
ansible_mounts --显示磁盘系统挂在情况
ansible_processor --显示CPU的个数(具体显示每个CPU的型号)
ansible_vcpus p p --显示总哦的CPU个数(只显示个数)
아이의 방법에 대한 정보를 얻 : 만 eth0를 IPv4의 정보를 얻을 수 있지만 효과하지 않는 명령 줄에서 스크립트의 역할을
ansible rsync_server 설정을 -a -m "필터 = ansible_eth0 [IPv4의] "
사용에 :
[root@m01 ansible-playbook]# cp rsync_server.yaml rsync_server_when.yaml
[root@m01 ansible-playbook]# cat rsync_server_when.yaml
- hosts: rsync_server
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
#shell: useradd rsync -M -s /sbin/nologin
- name: 04-create backup dir
file: path=/backup state=directory owner=rsync group=rsync
- name: 05-create password file
copy: content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600
- name: 06-start rsync server
service: name=rsyncd state=started enabled=yes
- hosts: rsync_clients
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create password file
copy: content=oldboy123 dest=/etc/rsync.password owner=root group=root mode=600
- name: 04-start rsyncd server,set enabled.
service: name=rsyncd state=started enabled=yes
- name: 05-create test_nfs file
file: dest=/tmp/test_nfs.txt state=touch
when: (ansible_hostname == "nfs01") ##上一行执行的判断条件,ansible_hostname由setup模块提供
- name: 05-create test_web file
file: dest=/tmp/test_web.txt state=touch
when: (ansible_hostname == "web01") ##上一行执行的判断条件
- name: 06-check test nfs data backup
shell: rsync -avz /tmp/test_nfs.txt [email protected]::backup --password-file=/etc/rsync.password
when: (ansible_hostname == "nfs01") ##上一行执行的判断条件
- name: 07-check test web data backup
shell: rsync -avz /tmp/test_web.txt [email protected]::web --password-file=/etc/rsync.password
when: (ansible_hostname == "web01") ##上一行执行的判断条件
## 注意在/etc/ansible/server_file/rsync_server/rsyncd.conf中增加web模块,并在41上增加对应目录,修改数组为chown rsync.rsync /web
[root@m01 ansible-playbook]# ansible-playbook rsync_server_when.yaml
스크립트 D. 설정 루프 정보
주기 함수 : YAML 파일 복합 사이클 사용 동일한 모듈이
등을 CD / / ansible / ansible- 각본 / && CP rsync_server.yaml rsync_server_loop.yaml
모듈 정의 변수, 호출 할당하여 with_items#循环结束 BEGIN - name: 02-push conf file && password file copy: src=/etc/ansible/server_file/rsync_server/{{ item.src }} dest={{ item.dest }} mode={{ item.mode }} ##定义copy模块变量src,dest,mode with_items: ##变量赋值并引用 - { src: 'rsyncd.conf', dest: '/etc/', mode: '644' } - { src: 'rsync.password', dest: '/etc/', mode: '600' } # 循环结束 END
사용 방법 :
[root@m01 ansible-playbook]# cat rsync_server_loop.yaml
- hosts: rsync_server
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
# 循环开始BEGIN
# 同一个name中有多个不同模块时直接报错,相同模块时会出现警告,只执行最后一个模块,此时使用循环功能
#- name: 02-push conf file && password file
# copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
# copy: content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600
# 将上述copy内容修改为格式大致相同
# copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/ mode=644
# copy: src=/etc/ansible/server_file/rsync_server/rsync.password dest=/etc/ mode=600
- name: 02-push conf file && password file
copy: src=/etc/ansible/server_file/rsync_server/{{ item.src }} dest={{ item.dest }} mode={{ item.mode }} ##定义copy模块变量src,dest,mode
with_items: ##变量赋值并引用
- { src: 'rsyncd.conf', dest: '/etc/', mode: '644' }
- { src: 'rsync.password', dest: '/etc/', mode: '600' }
# 循环结束 END
- name: 03-create user
user: name=rsync create_home=no shell=/sbin/nologin
#shell: useradd rsync -M -s /sbin/nologin
- name: 04-create backup dir
file: path=/backup state=directory owner=rsync group=rsync
#copy 模块放到上面的copy模块部分
#- name: 05-create password file
# copy: content=rsync_backup:oldboy123 dest=/etc/rsync.password mode=600
- name: 06-start rsync server
service: name=rsyncd state=started enabled=yes
- hosts: rsync_client
tasks:
- name: 01-install rsync
yum: name=rsync state=installed
- name: 02-push conf file
copy: src=/etc/ansible/server_file/rsync_server/rsyncd.conf dest=/etc/
- name: 03-create password file
copy: content=oldboy123 dest=/etc/rsync.password owner=root group=root mode=600
- name: 04-start rsyncd server,set enabled.
service: name=rsyncd state=started enabled=yes
- name: 05-create test file
file: dest=/tmp/test.txt state=touch
- name: 06-check test data backup
shell: rsync -avz /tmp/test.txt [email protected]::backup --password-file=/etc/rsync.password
[root@m01 ansible-playbook]# ansible-playbook rsync_server_loop.yaml
...
ansible 형식 쓰기 :
- name: install software
yum: name=wget state=installed
saltstack 형식 쓰기 :
- name: install software
yum:
name: ['rsync','tree','wget']
state: installed
전자. 스크립트에서 오류를 무시하도록 설정
특징 :
오류가 이전 섹션에서 발생하면 스크립트에서 스크립트가 아래로 실행되지 않습니다
당신이 다음 실행을 계속하려면 다음, 당신이 사용할 수있는, 현재의 오류를 무시하려면,设置错误忽略
기능을
추가 할 수 있습니다ignore_errors: yes
오류를 무시
사용 방법 :
- hosts: all
remote_user: root
tasks:
- name: Ignore False
command: /bin/false
ignore_errors: yes
- name: touch nowfile
file: path=/tmp/moox_ignore state=touch
스크립트 제공 F. 태그 정보
특징 :
모듈이 가능하도록 스크립트 단지 모듈 블록을 실행하거나, 일정 시간 스킵
设置标签
첨가 될tags: tag1
모듈 지정
실행시 파라미터-t
또는--tags=tag1
태그를 지정
하는 태그 작업 실행을 지정 : ansible-각본 --tags = 이 tag1 test_tags.yaml이
작업 태그를 지정 생략 : ansible - 각본 --skip-태그 = tag1로 test_tags.yaml
사용 방법 :
- hosts: all
remote_user: root
tasks:
- name: Ignore False
command: /bin/false
tags: tag1
- name: touch nowfile
file: path=/tmp/moox_ignore state=touch
g. 스크립트의 트리거 정보를 설정합니다
시간. 스크립트에 통합 할 수있는 스크립트를 설정
05. 지식 요약
- 핵심 배포 스크립트 rsync를 서비스
- 호스트 재고 쓰기 방법
5 가지 방법 - 의 확장 시나리오 작성 방법
변수 정보 세 가지 종류를 설정하는 방법
에 대한 방법을 설정 디버그 레지스터 정보를
어떻게 설정 심판 설정 정보에
작업 :
-
네트워크 전체 백업 프로젝트의 원 클릭 배포
-
원 클릭 배포 NFS 서비스
-
실시간 동기화 서비스의 원 클릭 배포