实验环境

centos7.9_x64

ansible_server  192.168.10.98

ansible_slave    192.168.10.99


软件安装

yum install  -y  yum-utils  lsof   openssh-server  ansible   chrony

systemctl enable chronyd && hwclock -w  &&  ansible --version

ansible 2.6.20


ssh开启持久化

cp -pv /etc/ssh/sshd_config /etc/ssh/sshd_config.bak   

echo ClientAliveInterval 600 >> /etc/ssh/sshd_config

echo ClientAliveCountMax 100 >> /etc/ssh/sshd_config

systemctl reload sshd  && systemctl enable sshd --now


tail -n2 /etc/ssh/sshd_config

ClientAliveInterval 600

ClientAliveCountMax 100


ansible配置优化

cp -pv  /etc/ansible/ansible.cfg /etc/ansible/ansible.cfg.bak

sed -i 's/#log_path/log_path/g' /etc/ansible/ansible.cfg

sed -i 's/#inventory/inventory/g' /etc/ansible/ansible.cfg

sed -i 's/#remote_user/remote_user/g' /etc/ansible/ansible.cfg

sed -i 's/#host_key_checking /host_key_checking/g' /etc/ansible/ansible.cfg

sed -i 's/# command_warnings/command_warnings/g' /etc/ansible/ansible.cfg


ansible资源配置

cp -pv  /etc/ansible/hosts /etc/ansible/hosts.bak  &&  touch /var/log/ansible.log


cat /etc/ansible/hosts

[anserver]                                                                                    自定义群集组名

192.168.10.98  ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=3bhMTzgNCvRks   

192.168.10.99  ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=3bhMTzgNCvRks

ansible_ssh_user=root   指定用户名  ansible_ssh_port=22   指定端口号  

ansible_ssh_pass=3bhMTzgNCvRks   指定root密码


ansible命令使用

ansible anserver --list   查看anserver群组 主机

 hosts (2):

   an1

   an2


ansible  anserver  -m ping     测试主机连通性

an1 | SUCCESS => {

   "ansible_facts": {

       "discovered_interpreter_python": "/usr/bin/python"

   },  

   "changed": false,  

   "ping": "pong"

}

an2 | SUCCESS => {

   "ansible_facts": {

       "discovered_interpreter_python": "/usr/bin/python"

   },  

   "changed": false,  

   "ping": "pong"

}


 ansible anserver -a "uptime"   查看群主系统信息  ls df -Th均可使用

an2 | CHANGED | rc=0 >>

09:38:43 up 18 min,  2 users,  load average: 0.00, 0.01, 0.01

an1 | CHANGED | rc=0 >>

09:38:45 up 18 min,  2 users,  load average: 0.00, 0.01, 0.05


ansible an2 -a "uptime"           查看群集中主机系统信息

an2 | CHANGED | rc=0 >>

09:44:00 up 23 min,  2 users,  load average: 0.00, 0.01, 0.01


ansible -i /etc/ansible/hosts anserver -m ping --ask-vault-pass    测试群组统一密码 正确性

Vault password:  

an1 | SUCCESS => {

   "ansible_facts": {

       "discovered_interpreter_python": "/usr/bin/python"

   },  

   "changed": false,  

   "ping": "pong"

}

an2 | SUCCESS => {

   "ansible_facts": {

       "discovered_interpreter_python": "/usr/bin/python"

   },  

   "changed": false,  

   "ping": "pong"

}


ansible -i /etc/ansible/hosts an2 -m ping --ask-vault-pass   用于群组中主机密码不同 密码验证

Vault password:  

an2 | SUCCESS => {

   "ansible_facts": {

       "discovered_interpreter_python": "/usr/bin/python"

   },  

   "changed": false,  

   "ping": "pong"

}


ansible常用模块命令操作

命令模块

ansible anserver -m shell -a "uptime"      系统信息收集

ansible anserver -m shell -a "df -Th"      系统信息收集


文件模块

ansible anserver -m file  -a  "dest=/root/test.txt state=touch"     创建文件

ansible anserver -m file -a "dest=/root/test.txt state=absent"      删除文件

ansible anserver -m copy -a "src=/root/tests/  dest=/root/tests"  复制文件

ansible anserver -m file -a "dest=/root/tests  mode=755 owner=root group=root state=directory"   创建目录

ansible anserver -m file -a "dest=/home/tests state=absent"       删除目录

ansible anserver -m unarchive  -a "src=/root/test1.tar.gz  dest=/root/ mode=0755     force=yes  copy=yes"  远程解压覆盖文件

ansible anserver -m file -a 'src=/root/test.txt dest=/usr/local/test state=link'   创建软链接


脚本模块

ansible anserver -m copy  -a  "src=/home/test.sh  dest=/tmp/ owner=root group=root mode=0755" 批量复制脚本 

ansible anserver  -m shell -a   "/bin/bash /tmp/test.sh"                              执行脚本

ansible  anserver -m shell -a   "/bin/bash /tmp/test.sh"  --sudo                       sudo提权执行脚本


服务模块

ansible anserver -m  yum -a "name=nginx state=installed disable_gpg_check=yes"  安装服务

ansible anserver -m  service  -a "name=nginx state=started/restarted/stopped  enabled=yes" 

启动服务  设置开机启动

ansible anserver -m yum -a "name=nginx state=absent"     删除服务

ansible anserver  -m shell  -a "rpm -qa  nginx"  查看安装rpm包

ansible anserver -m shell -a "netstat -tuplna | grep nginx" 查看服务状态


用户模块

ansible anserver -m user -a 'name=test state=present' 创建用户 不设置密码

ansible anserver -m shell -a "echo '321321' | passwd --stdin test"   批量修改test用户密码为321321

ansible  anserver -m command -a "id test" 查看用户

ansible anserver -m user -a "name=test remove=yes state=absent"  删除用户同时删除用户家目录


ansible anserver -m group  -a "name=test state=present system=yes"  创建用户组

ansible anserver -m shell  -a "cat /etc/group | grep test"          查看创建用户组

ansible anserver -m group -a "name=test state=absent"              删除用户组

ansible anserver  -m user -a "name=test  shell=/bin/bash groups=test"  test用户拉到test用户组

ansible  anserver  -a "/sbin/reboot" -f 10 --sudo -K  重启       --sudo 为普通用户sudo权限


ansibles配置playbook

touch /etc/ansible/roles/mysql.yml

cat /etc/ansible/roles/mysql.yml 

- hosts: server

  remote_user: root

  tasks:


    - name: install mysql-server package

      yum: name=mysql-server state=present

    - name: starting mysqld service

      service: name=mysql state=started

ansible-playbook /etc/ansible/roles/mysql.yml --syntax-check

playbook: /etc/ansible/roles/mysql.yml

ansible-playbook /etc/ansible/roles/mysql.yml 


netstat -tuplna | grep chronyd

udp        0      0 127.0.0.1:323           0.0.0.0:*                           1565/chronyd