目录
4.3 文件传输copy file 和 synchronize
4.4 copy模块 使用copy模块将服务端的文件传输到多台服务器
4.5 file模块 使用file模块更改客户端文件权限、属组、 创建目录
1.什么是Ansiable?
Ansible这一强大的自动化运维工具。Ansible是基于Python语言开发的工具,通过SSH协议与远程主机通信,无需在被管理主机上安装额外的客户端/代理程序。您可以使用YAML语言编写剧本来实现对企业IT基础设施的自动化管理,这对于提高效率和减少人为错误非常有帮助。Ansible具有简洁易懂的语法和强大的功能,即使您不是专业开发人员也能快速上手。作为企业运维工程师,掌握Ansible将极大地提升您的工作效率和技能水平,帮助您更好地管理和维护企业的IT基础设施。
2.Ansiable的安装与配置
2.1服务端要求
ansible是要安装在Python2.6或2.7 Python3上或3.5以上的人和机器运行,管理机器不支持windows
2.2被管理端要求
需要一种通信方式ssh
2.3安装Ansiable
yum install ansible (epel源)
pip install ansible
https://release.ansible.com/ansible/
2.4配置文件
egrep -v "^$|^#" /etc/ansible/ansible.cfg
过滤出不带注释的
-v 是取反
$$ 是空格
^# 开头是警号
^$ 是空行
2.5常用配置参数
inventory /etc/ansible/hosts 主机清单inventory文件被管理主机的列表在这里定义
library /usr/share/my_modules 存放ansibe模块的目录,一个库
forks 5 /etc/ansible/ansible.cfg 并发数,多少个进程同时工作,可以根据控制主机的性能和被管理节点的数量来决定
* become root 远程用户的默认用户名
*remote_port 22 链接被管理服务器的默认端口
*host_key_cheking False 是否检查主机密钥 yes/no
timeout 10 ssh连接的超时时间,单位秒,可增大值
log_path /var/log/ansible.log 默认不记录日志,需要开启指定日志文件,需要ansible用户有写入日志的权限
*paivate_key_file /root/./ssh/id_rsa 指定你私钥路径
3.Ansiable的基本使用
3.1Inventory主机清单
ansible可同时处理基础架构中的多台服务器,这些服务器的连接配置在ansible inventory区分实现,默认路径/etc/ansible/hosts,也可以使用命令行-i选项指定其他的文件清单
3.1.1ini和yaml格式
[webserver]
192.168.83.83 这就是ini格式
a:
a:
a: 通过缩进表示层级关系
3.2主机和组(定义组)
默认回加到ungrouped 这个组里面
all 代表所有主机
ungrouped 代表为定义主机组的主机
便捷写法,如果有规律,例如:www.001.com www.002.com www.003.com
就可以写成 www[001:3].com
[webservers]
192.168.83.1
[dbservers]
192.168.83.2
ansible webservers(组名) -m shell -a "df -h" -k
-m 指定模块
-k 输入ssh远程被连接主机的密码
3.2.2主机变量
可以定义变量传到服务器上去,可以应用变量进行区分这些主机,通过查看差异化地方
【webservers】
192.168.83.1 http_port=80
192.168.83.2 http_port=8080
ansible webservers -m shell -a "echo {{http_port}}"
ansible webservers -m shell -a "mkdir /tmp/{{http_port}}"
ansbile webservers -m shell -a "ls /tmp/"
3..2.3组变量
[webservers:vars]
server_name=www.zhangzhao.com
只要在webserver这个组里面都会引用这个变量,这样就不用每个机器都加变量了,
主机变量优先于组变量
ansible webservers -m shell -a "echo {{server_name}}" -k
3.2.4分离主机和组变量到特定文件
Ansible中的首选做法是不将变量存储在Inventory中,除了将变量直接存储inventory外,主机和组还可以变量还可以存储在相对于Inventory文件的单个文件中,采用yaml格式
2种定义方式:文件名就是叫组名 ,或者是针对某个主机IP
定义组名:mkdir /etc/ansible/group_vars
定义主机名: mkdir /etc/ansible/host_vars
3.3ansible的使用方式有两种
ad-hoc 模式是指在终端直接输入命令,快速执行某个操作,但是不希望留存记录
playbook对于配置管理和部署更加灵活
3.3.1命令行常用选项
-v 就会输出更加详细的信息,vvv最详细一般用于产看dbug
-i 指定资产清单文件
-f 指定并发线程数
-u 指定你远程登录的用户
-k 远程用户密码
-b sudo提权,默认是root
-K 输入你sudo提权的密码
ansible webservers -m shell -a "ls /root" -u aliang -k -b -K
先切换到普通用户阿良,在-b切换到root,在-K输入sudo的密码
-e 设置变量
ansible webservers -e hello=123456 -m shell -a "{{hello}}" -k
-t 可以将输出结果指定到某个目录下
ansible webservers -e hello=123 -m shell -a "{{hello}}" -k -t /tmp
-C 运行检查不执行任何操作
3.4 SSH密码认证
默认情况下ansible连接ssh远程主机使用root用户,并会提示输入密码,该密码也可以直接在资产清单里指定,实现免交互。
两种:一个是直接在主机清单里指定,一个是ssh生成密钥,ssh-copyid
[webservers]
1.1.1.1 ansible_ssh_user=root ansible_ssh_pass='123456'
[webservers]
1.1.1.1 ansible_ssh_user=root ansible_ssh_key=/root/.ssh/id_rsa
3.5主机密钥检查
ansible默认启用主机密钥检查 解决方法
1.删除/root/.ssh/id_rsa
2.配置文件中禁用主机密钥检查
[defaults]
host_key_cheking = flase
4.常用模块 shell copy file yum
4.1 Ping模块
ansible all -m ping 探测目标主机也没有存活
4.2 command模块(默认模块)和shell模块
该模块不支持管道和重定向的shell扩展语法,因此会用shell模块
ansible all -a "pwd"
ansible all -m shell -a "df -h|grep tmps;ls /root && echo 123"
4.3 文件传输copy file 和 synchronize
copy 拷贝模块
file 修改文件权限
synchronize 增量同步
4.4 copy模块 使用copy模块将服务端的文件传输到多台服务器
ansible all -m copy -a "src=/root/host dest=/tmp/host"
src:指定本地服务端的文件
dest:指定客户端的文件路径
4.5 file模块 使用file模块更改客户端文件权限、属组、 创建目录
ansbile webservers -m file -a "dest=/tmp/hosts mode=600 owner=aliang group="
dest:destination的缩写意思是目标
mode:指定权限
owner:属组
group:所属者
state:directory 创建目录
state:absent 删除目录
用file模块的好处就是它会自动判断状态
4.6synchronize增量同步
首先要下载rsync 无论是服务端还是客户端都要下载因为这个synchronize这个模块就是靠rcync这个进行同步的
什么是增量同步?比方说第一次你同步a和b两个文件,现在文件里有a b c三个文件,在增量同步一次,这次只会吧c加进去
ansible webservers -m synchronize -a "src=/data/html dest=/var/www/"
5. cron、systemd、setup
5.1定时任务管理(cron)
创建一个同步任务,每5分钟同步一下服务器的时间
ansible webservers -m cron -a "minute='*/5' day=1 job='ntpdate time.windows.com &>/dev/null' name='sync time' state=absent"
-a "" 指定时间
minute= 分
hour= 时
day= 日
month= 月
weekday= 周
job= 任务
name= 定时任务名称
user= 执行用户
staste= 「present|absent」
5.2管理服务service和systemd
- service 是centos6管理服务命令,与systemd语法一样
- systemd是centos7管理服务命令
确保web上启动服务
ansible webservers -m systemd -a "name=httpd state=started"
started 启动
stopped 关闭
restarted 重启
reloaded 重载
启动服务并设置开机自启
ansible webservers -m systemd -a "name=docker state=restarted enabled=yes daemon_reload=yes"
enabled= 设置开机自启
daemon_reload= 刷新配置文件
5.3收集系统信息(set up)
set up 模块用于收集系统信息,一般用于按照条件执行
ansible all -m setup -a ""
ansible all -m setup
$ ansible all -m setup -a "filter=ansible_nodename"
$ ansible all -m setup -a "filter=ansible_hostname"
$ ansible all -m setup -a "filter=ansible_domain"
$ ansible all -m setup -a "filter=ansible_memtotal_mb"
$ ansible all -m setup -a "filter=ansible_memory_mb"
$ ansible all -m setup -a "filter=ansible_memfree_mb"
$ ansible all -m setup -a "filter=ansible_os_family"
$ ansible all -m setup -a "filter=ansible_distribution_major_version"
$ ansible all -m setup -a "filter=ansible_distribution_version" $ ansible all -m setup -a "filter=ansible_processor_vcpus"
# 获取所有IP地址
$ ansible all -m setup -a "filter=ansible_all_ipv4_addtrsses"
$ ansible all -m setup -a "filter=ansible_architecture"
$ ansible all -m setup -a "filter=ansible_uptime_seconds"
$ ansible all -m setup -a "filter=ansible_processor*"
$ ansible all -m setup -a "filter=ansible_env"