1、Ansible、Saltstack和Puppet是目前互联网IT使用最最广泛的自动化运维工具,主要是用于自动化管理、配置数以万计的服务器,具体可以对服务器做哪些管理呢?
2、Ansible自动运维工具特点?
结构图:
注:图中的Host Inventoy代表的便是下述的本地Hosts配置文件,注意这个hosts文件不是本地域名解析使用的/etc/hosts这个文件!
原理:Ansible工具依赖多个模块(每个模块都有不同功能),读取本地hosts配置文件中客户端的IP地址,使用SSH协议远程管理客户端,将需要执行的操作和指令推送给客户端,所有的发送给客户端的指令会在客户端上被运行,最终会将执行后结果返回在Ansible管理端终端上。
yum install epel-release ansible -y
hosts文件位置:/etc/ansible/hosts
添加主机有两种方式:
[web] #组名
172.16.193.201 #需要添加到此组中的服务器的IP地址
172.16.193.202
[db]
172.16.193.203
172.16.193.204
注:基于组这个单位去对大量服务器进行管理
172.16.193.201
172.16.193.202
ansible命令参数详解:
-v,–verbose 打印详细模式;
-i PATH,–inventory=PATH 指定host文件路径;
-f NUM,–forks=NUM 指定fork开启同步进程的个数,默认5;
-m NAME,–module-name=NAME 指定module名称,默认模块command;
-a MODULE_ARGS module模块的参数或者命令;
-k,–ask-pass 输入远程被管理端密码;
–sudo 基于sudo用户执行;
-K,–ask-sudo-pass 提示输入sudo密码与sudo一起使用;
-u USERNAME,–user=USERNAME 指定移动端的执行用户;
-C,–check 测试执行过程,不改变真实内容,相当于预演;
-T TIMEOUT, 执行命令超时时间,默认为10秒;
--version 查看Ansible软件版本信息。
vim /etc/ansible/ansible.cfg
设置为False即可
注:如果这个参数开启,就会出现咱们一个服务器在ssh连接一个从未连接过的服务器时,需要输入yes才能连接如下所示:
注:因为ansible不支持交互式场景,所以我们必须关闭它!这个默认一般就是关着的
#ansible命令大致可分为三个部分如下:
ansible -k -i /etc/ansible/hosts all -m command -a "df -hT"
指定hosts文件位置 指定模块 执行的动作
#注:如果hosts文件位置和名字为/etc/ansible/hosts,那么-i可以省略
#如果要使用默认模块command,则可以省略-m参数,学了ansible配置文件可以修改默认模块
ansible命令可以简化成:
ansible -k all -a "df -hT"
#-k为输入密码登录,可以配置ssh免密登录,省略-k参数
ansible all -a "df -hT"
注:这里的all是指定的hosts文件中哪些主机执行这条命令,如果添加了组,可以写ansible web -a "df -hT",只让web组执行此条命令。
ssh-keygen
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.193.201
指定本服务器公钥文件位置 指定copy到那个服务器
Ansible shell模块主要用于远程客户端上执行各种Shell命令或者运行脚本,远程执行命令通过/bin/sh环境来执行,支持比command更多的指令
例:
ansible -k all -m shell -a "/bin/sh /tmp/variables.sh >>/tmp/var.log"
注:我们在linux中使用的命令它都支持,基本上掌握了这个模块,linux自动化运维都可以用这个模块搞定!
Ansible synchronize模块主要用于目录、文件同步,基于Rsync命令同步目录,Synchronize模块使用详解
使用模块前应先用shell模块给各个主机安装rsync软件包
#用ansible给web组的服务器安装rsync软件包
ansible -k web -m shell -a "yum install rsync -y"
ansible中的synchroniz模块参数详解:
compress 开启压缩,默认为开启;
archive 是否采用归档模式同步,保证源和目标文件属性一致;
checksum 是否效验;
dirs 以非递归的方式传输目录;
links 同步链接文件;
recursive 是否递归yes/no;
rsync_opts 使用rsync 的参数;
copy_links 同步的时候是否复制连接;
delete 删除源中没有而目标存在的文件;
src 源目录及文件;
dest 目标目录及文件;
dest_port 目标接受的端口;
rsync_path 服务的路径,指定 rsync 命令来在远程服务器上运行;
rsync_timeout 指定rsync操作的IP超时时间;
set_remote_user 设置远程用户名;
--exclude=.log 忽略同步.log结尾的文件;
mode 同步的模式,rsync同步的方式PUSH、PULL,默认都是推送push。
Ansible synchronize模块企业常用案例如下:
(1)将本ansible服务器的/tmp/目录的所有文件同步到其他所有服务器的/tmp目录下
ansible -k all -m synchronize -a 'src=/tmp/ dest=/tmp/'
(2)将本ansible服务器的/tmp/目录的所有文件同步到其他所有服务器的/tmp目录下,并开启compress压缩传输,让目标与源目录文件保持完全一致,不同步.txt结尾的文件
ansible -k all -m synchronize -a 'src=/tmp/ dest=/tmp/ compress=yes delete=yes rsync_opts=--no-motd,--exclude=.txt'
Ansible copy模块主要用于文件或者目录拷贝,支持文件、目录、权限、用户组功能,copy模块使用详解
ansible中的copy模块参数详解:
src Ansible端源文件或者目录,空文件夹不拷贝;
content 用来替代src,用于将指定文件的内容,拷贝到远程文件内;
dest 客户端目标目录或者文件,需要绝对路径;
backup 拷贝之前,先备份远程节点上的原始文件;
directory_mode 用于拷贝文件夹,新建的文件会被拷贝,而老旧的不会被拷贝;
follow 支持link文件拷贝;
force 覆盖远程主机不一致的内容;
group 设定远程主机文件夹的组名;
mode 指定远程主机文件及文件及的权限;
owner 设定远程主机文件夹的用户名。
(1)Ansible copy模块操作,src表示源文件,dest表示目标目录或者文件,owner指定拥有者
ansible -k all -m copy -a 'src=/etc/passwd dest=/tmp/ mode=755 owner=root'
(2)Ansible copy模块操作,content文件内容,dest目标文件,owner指定拥有者
ansible -k all -m copy -a 'content="Hello World" dest=/tmp/jfedu.txt mode=755 owner=root'
Ansible默认配置文件为/etc/ansible/ansible.cfg,配置文件中可以对ansible进行各项参数的调整,包括并发线程、用户、模块路径、配置优化等,如下为Ansible.cfg常用参数详解:
[defaults] 通用默认配置段;
inventory = /etc/ansible/hosts 被控端IP或者DNS列表;
library = /usr/share/my_modules/ Ansible默认搜寻模块的位置;
remote_tmp = $HOME/.ansible/tmp Ansible远程执行临时文件;
forks = 5 并行进程数;
sudo_user = root sudo远程执行用户名;
ask_sudo_pass = True 使用sudo,是否需要输入密码;
ask_pass = True 是否需要输入密码;
remote_port = 22 远程SSH端口;
module_lang = C 模块和系统之间通信的语言;
host_key_checking = False 检查远程主机密钥;
#sudo_exe = sudo sudo远程执行命令;
#sudo_flags = -H 传递sudo之外的参数;
timeout = 10 SSH超时时间;
remote_user = root 远程登陆用户名;
log_path = /var/log/ansible.log 日志文件存放路径;
module_name = command Ansible命令执行默认的模块;
#executable = /bin/sh 执行的Shell环境,用户Shell模块;
#system_warnings = True 禁用系统运行ansible潜在问题警告;
#command_warnings = False command模块Ansible默认发出警告;
#nocolor = 1 输出带上颜色区别,开启/关闭:0/1;
pipelining = False 开启pipe SSH通道优化;
其中:host_key_checking、command_warnings、module_name、forks修改几率最大!
为了安全可能会修改sudo_user,这个参数表示用sudo提权的用户连接时映射的用户身份为什么!
remote_user这个参数,我们在之前的ansible命令的-k参数指定密码,众所周知我们一般都需要指定用户和密码才行,未用-u指定用户,这里的这个参数就是设定的默认使用用户!!