Ansible集群的基础操作
前提: 成功安装基础Ansible服务
实验要求:
主机名称 | IP地址 | 分配角色 |
---|---|---|
mast01 | 192.168.183.160 | master |
node01 | 192.168.183.110 | node |
node02 | 192.168.183.120 | node |
基本配置
创建node机
新创建两台节点服务器,并使用以下命令修改其网络
##绿色字段都是可以修改;ens32可能会不一样,另外的节点机192.168.183.120网址记得修改
nmcli connection modify "ens32" ipv4.method manual ipv4.addresses "192.168.183.110/24" ipv4.gateway "192.168.183.2" ipv4.dns "114.114.114.114" connection.autoconnect yes
##重启网络
nmcli con down ens32
nmcli con up ens32
修改主机名
对主服务器和节点服务器分别使用hostnamectl -set hostname 主机名称
ssh互信
首先在主节点上使用ssh-keygen
生成密钥对,然后使用ssh-copy-id IP地址
拷贝公钥到需要免密码的主机上
修改配置文件
在主节点使用vim /etc/ansible/hosts
进入hosts文件添加需要的节点服务器的IP地址如下:
Ansible常用模块
ping模块
- 是Ansible最基础的模块,主要用于探测网络中被管理主机是否能够正常使用,用于ping本身服务器,返回值是changed、ping。
- ping不pong是因为之前没有ssh过,主控端know_hosts中没有产生对方的识别信息
语法:ansible all/IP地址 -m ping
command模块
- Ansible默认模块,在远程主机执行命令,主要用于执行Linux基础命令,可以执行远程服务器命令执行、任务执行等操作。
- 不支持变量、重定向、管道符等,这些操作需要用shell模块执行
command模块使用详解:
参数 | 说明 |
---|---|
chdir | 执行命令前,切换到目录 |
creates | 当该文件存在时,不执行该步骤 |
executable | 切换shell来执行命令,需要使用命令的绝对路径 |
free_from | 需要执行的脚本,一般使用Ansible的-a参数代替。 |
removes | 当该文件不存在时,不执行该步骤 |
warn | 如果在ansible.cfg中存在告警,如果设定了false,不会告警该行 |
语法:ansible all/IP地址 [-m command] -a 'Linux基础命令'
eg:
##在192.168.183.110主机下创建test01目录
ansible 192.168.183.110 -a 'mkdir /test01'
shell模块
- 和command相似,但更为强大可以执行command不能执行的变量、重定向、管道符等。
- 不能执行类似 cat /tmp/stanley.md | awk -F’|’ ‘{print $1,$2}’ &> /tmp/example.txt 等复杂命令。
- shell中的参数与command是相同的
语法:ansible all/IP地址 -m shell -a 'Linux基础命令'
eg:
##在192.168.183.110主机下的 /test01/file1.txt输入hello world字段
ansible 192.168.183.110 -m shell -a 'echo "hello world > /test01/file1.txt"'
copy模块
- 从主控端复制文件到远程主机
copy模块使用详解
参数 | 说明 |
---|---|
src | 源文件 指定拷贝文件的本地路径 (如果有/ 则拷贝目录内容,比拷贝目录本身) |
dest | 指定目标路径 |
mode | 设置权限 |
backup | 备份源文件 |
content | 代替src 指定本机文件内容,生成目标主机文件 |
group | 设定远程主机目录的组名 |
owner | 设定远程主机目录的用户名 |
语法:ansible all/IP地址 -m copy -a 'src=... dest=... [mode=... backup=... owner=..]'
eg:
##在192.168.183.110主机将/etc/passwd复制到/test01下并修改权限和拥有这
ansible 192.168.183.110 -m copy -a 'src=/etc/passwd dest=/test01/ mode=755 owner=me'
file模块
设置文件属性,创建文件或目录、删除文件或目录、修改文件权限等。
file模块使用详解:
参数 | 说明 |
---|---|
path | 要管理的文件路径 (强制添加) |
recurse | 递归,文件夹要用递归 |
mode | 设置权限 |
group | 设定远程主机目录的组名 |
owner | 设定远程主机目录的用户名 |
src | 创建硬链接,软链接时,指定源目标,配合’state=link’ ‘state=hard’ 设置软链接,硬链接 |
state | 状态; absent—缺席,删除; touch—创建文件; directory—创建目录 等等 |
语法:ansible all/IP地址 -m file -a 'path=... [state=... mode=... owner=... ]'
eg:
##在192.168.183.120主机下创建test01目录
ansible 192.168.183.120 -m file -a 'path=/test01 state=directory'
##在192.168.183.120主机下的test01创建file2文件
ansible 192.168.183.120 -m file -a 'path=/test01/file2 state=touch'
##在所有主机下创建test01目录的软链接
ansible all -m file -a 'src=/test01/ dest=/test01/testfile state=link'
cron模块
- 可以帮助我们管理远程主机中的计划任务,功能相当于 crontab 命令。
cron模块常用命令参数详解:
参数 | 说明 |
---|---|
minute | 此参数用于设置计划任务中分钟设定位的值,当不使用此参数时,分钟设定位的值默认为”*”。 |
hour | 此参数用于设置计划任务中小时设定位的值,当不使用此参数时,小时设定位的值默认为”*”。 |
day | 此参数用于设置计划任务中日设定位的值,当不使用此参数时,日设定位的值默认为”*”。 |
month | 此参数用于设置计划任务中月设定位的值,当不使用此参数时,月设定位的值默认为”*”。 |
weekday | 此参数用于设置计划任务中周几设定位的值,当不使用此参数时,周几设定位的值默认为”*”。 |
eg:
##在所有主机上创建计划任务,任务名称为”crontab test”,任务于每天1点5分执行,任务内容为输出test字符。
ansible all -m cron -a " name='crontabtest1' minute=5 hour=1 job='echo hello world' "
##在所有主机上创建计划任务,任务名称为”crontab day test”,任务每3天执行一次,于执行当天的1点1分开始执行,任务内容为输出 test 字符。
ansible all -m cron -a " name='crontabday01 test' minute=1 hour=1 day=*/3 job='echo hello world' "
##查看主机上的计划任务
crontab -u root -l
yum模块
- 主要用于软件的安装、升级、卸载,支持rpm软件包的管理
yum模块使用详解:
参数 | 说明 |
---|---|
conf_file | 设置远程yum执行时所依赖的yum配置文件 |
disable_gpg_check | 安装软件包之前是否检查gpg key |
name | 需要安装的软件名称,支持软件组安装 |
update_cache | 安装软件之前更新缓存 |
enablerepo | 指定repo源名称 |
skip_broken | 跳过异常软件节点 |
state | 软件包状态,包括installed、present—安裝软件;latest—安裝最新的软件;absent、removed—卸载软件 |
语法:ansible all/IP地址 -m yum -a 'name=... state=...'
eg:
ansible all -m yum -a 'name=httpd state=present'
ansible all -m yum -a 'name=httpd state=absent'