十二周 MySQL数据库四和ANSIBLE运维自动化

1、主从复制及主主复制的实现

一、主从复制
#主服务器 10.0.0.8上
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
server_id=8
log-bin=/data/mysql/logbin/mysql-bin
[root@centos8 ~]#mkdir /data/mysql/logbin/ -p
[root@centos8 ~]#chown-R mysql.mysql /data/*
[root@centos8 ~]#systemctl restart mysqld      #数据库服务重新启动
[root@centos8 ~]#mysql
mysql>show master logs;    #查位置
[root@centos8 ~]#mysqldump -A -F --master-data=1 --single-transaction > /data/all.sql    #先做完全备份,生产中建议压缩一下
#创建帐号(mysql8.0分两条命令:创建帐号、授权)
[root@centos8 ~]#mysql
mysql>create user repluser@'10.0.0.%' identified by '123456';
mysql>grant replication slave on *.* to repluser@'10.0.0.%';   #授权
[root@centos8 ~]#scp /data/all.sql 10.0.0.18:/data    #备份文件复制到从节点上

#从服务器 10.0.0.18上
[root@centos8 ~]#vim /etc/my.cnf
[mysqld]
server-id=18
read only
[root@centos8 ~]#systemctl restart mysqld      #重启数据库服务
[root@centos8 ~]#vim /data/all.sql
#更改为:
CHANGE MASTER TO
 MASTER_HOST='10.0.0.8',
 MASTER_USER='repluser',
 MASTER_PASSWORD='123456',
 MASTER_PORT=3306,
 MASTER_LOG_FILE='mysql-bin.000002',
 MASTER_LOG_POS=156;
[root@centos8 ~]#mysql
mysql>set sql_log_bin=0;
mysql>source /data/all.sql    #还原数据
mysql>show slave status\G
mysql>start slave;      #开启2个线程
mysql>show slave status\G
#由于先完全备份,后创建帐号,所以帐号也复制过来了
mysql>select user,host from mysql.user;
二、主主复制

两个节点,都可以更新数据,并且互为主从
容易产生的问题:数据不一致;因此慎用
考虑要点:自动增长id

配置一个节点使用奇数id
auto_increment_offset=1 #开始点
auto_increment_increment=2 #增长幅度

另一个节点使用偶数id
auto_increment_offset=2
auto_increment_increment=2

主主复制的配置步骤:

主1:10.0.0.8

主2:10.0.0.18

#设置主1的id

[root@master1 ~]#vim /etc/my.cnf

[mysqld]

server-id=8

log-bin=/data/mysql/mysql-bin

[root@master1 ~]#mkdir /data/mysql -p;chown -R mysql.mysql /data/mysql/

[root@master1 ~]#systemctl start mysqld

[root@master1 ~]#mysql 

mysql>show master logs;     #看位置 mysql-bin.000002   156

mysql>create user repluser@'10.0.0.%' identified by '123456';

mysql>grant replication slave on *.* to repluser@'10.0.0.%';

mysql> CHANGE MASTER TO

-> MASTER_HOST='10.0.0.18',

 -> MASTER_USER='repluser',

 -> MASTER_PASSWORD='123456',

 -> MASTER_PORT=3306,

 -> MASTER_LOG_FILE='mysql-bin.000001',

 -> MASTER_LOG_POS=695;

mysql>start slave;

mysql>show slave status\G

#设置主2的id

[root@master2 ~]#vim /etc/my.cnf

[mysqld]

server-id=18

log-bin=/data/mysql/mysql-bin

[root@master2 ~]#mkdir /data/mysql -p;chown -R mysql.mysql /data/mysql/

[root@master2 ~]#systemctl restart mysqld

[root@master2 ~]#mysql

mysql> CHANGE MASTER TO

-> MASTER_HOST='10.0.0.8',

 -> MASTER_USER='repluser',

 -> MASTER_PASSWORD='123456',

 -> MASTER_PORT=3306,

 -> MASTER_LOG_FILE='mysql-bin.000002',

 -> MASTER_LOG_POS=156;

mysql>start slave;

mysql>show slave status\G

mysql>show master logs;       #看位置 mysql-bin.000001    695
2、xtrabackup实现全量+增量+binlog恢复库
1 备份过程
1)完全备份:
[root@centos8 ~]#mkdir /backup
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/base
2)第一次修改数据
3)第一次增量备份
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base

4)第二次修改数据
5)第二次增量备份
[root@centos8 ~]#xtrabackup -uroot -pmagedu --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1

6)[root@centos8 ~]#scp -r /backup/* 目标主机:/backup/
#备份过程生成三个备份目录
/backup/{base,inc1,inc2}

2 还原过程
1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@centos8 ~]#yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
2)合并第1次增量备份到完全备份
[root@centos8 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos8 ~]# xtrabackup --prepare --target-dir=/backup/base --incremental-dir=/backup/inc2

4)复制到数据目录,注意数据库目录必须为空,MySQL服务不能启动
[root@centos8 ~]#xtrabackup --copy-back --target-dir=/backup/base
5)还原属性:
[root@centos8 ~]#chown -R mysql.mysql /var/lib/mysql
6)启动服务:
[root@centos8 ~]#service mysqld start
3、MyCAT实现MySQL读写分离

1.png

所有主机的系统环境:
cat /etc/centos-release
CentOS Linux release 8.01905 (Core)

服务器共三台
mycat-server 10.0.0.8 #内存建议2G以上
mysql-master 10.0.0.18 MySQL 8.0 或 Mariadb 10.3.17
mysql-slave 10.0.0.28 MySQL 8.0 或 Mariadb 10.3.17

关闭SELinux和防火墙
systemctl stop firewalld
setenforce 0
时间同步

1、创建MySQL主从数据库

[root@centos8 ~]#yum -y install mysql-server
#或者
[root@centos8 ~]# yum -y install mariadb-server
#1 修改master和slave上的配置文件
#master上的my.cnf
[root@master ~]#vim /etc/my.cnf
[mysqld]
server-id=18
log-bin
[root@master ~]#systemctl start mysqld

#Slave上的my.cnf
[root@slave ~]#vim /etc/my.cnf
[mysqld]
server-id=28
[root@slave ~]#systemctl start mysqld

#2 Master上创建复制用户
[root@master ~]#mysql
mysql>show master logs;
mysql>create user repluser@'10.0.0.%' identified by '123456';
mysql>grant replication slave on *.* to repluser@'10.0.0.%';

#创建mycat连接master的帐号
mysql>create user root@'10.0.0.%' identified by '123456';
mysql>grant all on *.* to root@'10.0.0.%';

#3 Slave上执行
[root@slave ~]#mysql
mysql>CHANGE MASTER TO
 -> MASTER_HOST='10.0.0.18',
 -> MASTER_USER='repluser',
 -> MASTER_PASSWORD='123456',
 -> MASTER_PORT=3306,
 -> MASTER_LOG_FILE='binlog.000002',
 -> MASTER_LOG_POS=156;
mysql>start slave;
mysql>show slave status\G
mysql>select user,root from mysql.user;     #主从复制,所以帐号也复制过来了

2、在MySQL代理服务器10.0.0.8安装mycat并启动

[root@mycat ~]#yum -y install java
#下载并安装
[root@mycat ~]#wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
#wget http://dl.mycat.org.cn/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz

[root@mycat ~]#mkdir /apps
[root@mycat ~]#tar xvf  Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps
# tar xvf  Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps

#配置环境变量
[root@mycat ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
[root@mycat ~]#source  /etc/profile.d/mycat.sh

#启动mycat
#注意:此步启动较慢,需要等一会儿,另外如果内存太小,会导致无法启动
[root@mycat ~]#mycat start
Starting Mycat-server

#查看日志,确定成功,可能需要等一会儿才能看到成功的提示
[root@mycat ~]#tail -f /apps/mycat/logs/wrapper.log

#查看端口(其中8066端口用于连接MyCAT)
[root@mycat ~]#ss -ntl

#用默认密码123456来连接mycat
[root@centos7 ~]#mysql -uroot -p123456 -h 10.0.0.8 -P8066
mysql>show databases;

4、在mycat服务器上修改server.xml文件配置Mycat的连接信息

[root@mycat ~]#vim /apps/mycat/conf/server.xml
…省略…
#修改下面行的8066改为3306复制到独立非注释行
<property name="serverPort">3306<\property>
<property name="handlelDistributedTransactions">0<\property>  #将上面行放在此行前面

#或者删除注释,并修改下面行的8066改为3306
<property name="serverPort">3306<\property>        #重点
<property name="managerPort">9066<\property>       #重点
<property name="idleTimeout">300000<\property>
<property name="authTimeout">15000<\property>
<property name="bindIP">0.0.0.0<\property>
<property name="dataNodeIdleCheckPeriod">300000<\property>   #5 * 60 * 1000L; //连接空闲检查   删除#后面此部分
<property name="frontWriteQueueSize">4096<\property> <property name="processors">32<\property>  #-->  删除#后面此部分
… …
<user name="root">                                 #连接Mycat的用户名
    <property name="password">magedu</property>    #连接Mycat的密码
<property name="password">magedu</property>        #数据库名要和schema.xml相对应
</user>
</mycat:server>

5、修改schema.xml实现读写分离策略

[root@mycat ~]#vim /apps/mycat/conf/schema.xml

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="***false***" sqlMaxLimit="100" dataNode="***dn1***"></schema>
<dataNode name="dn1" dataHost="localhost1" database="***mycat***" />   #其中mycat表示后端服务器实际的数据库名称
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="***1***" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
***<writeHost host="host1" url="10.0.0.18:3306" user="root" password="123456">***
***<readHost host="host2" url="10.0.0.28:3306" user="root" password="123456" />***
</writeHost>
</dataHost>
</mycat:schema>

#以上***部分表示原配置文件中需要修改的内容
#注意大小写

#最终文件内容
[root@mycat ~]#vim /apps/mycat/conf/schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <dataNode name="dn1" dataHost="localhost1" database="hellodb" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="host1" url="10.0.0.18:3306" user="root" password="123456">
        <readHost host="host2" url="10.0.0.28:3306" user="root" password="123456" />
       </writeHost>
   </dataHost>
</mycat:schema>

#重新启动mycat
[root@mycat ~]#mycat restart

[root@mycat ~]#cat /apps/mycat/logs/wrapper.log     #查看mycat启动是否有问题

上面配置中,balance改为1,表示读写分离。以上配置达到的效果就是10.0.0.18为主库,10.0.0.28为从库

注意:要保证能使用root/123456权限成功登录10.0.0.18和10.0.0.28机器上面的mysql数据库。同时,也一定要授权mycat机器能使用root/123456权限成功登录这两台机器的mysql数据库!!这很重要,否则会导致登录mycat后,对库和表操作失败!

范例:schema.xml

2.png

6、客户端测试

#用密码magedu来连接mycat
[root@centos7 ~]#mysql -uroot -pmagedu -h 10.0.0.8
mysql>show databases;
mysql>use TESTDB
mysql>show tables;
mysql>select @@server_id;    #读,看到的是28
mysql>select * from students;
mysql>select * from teachers;
mysql>update teachers set age=@@server_id where tid=4;
mysql>select * from teachers;

7、通过通用日志确认实现读写分离

在mysql中查看通用日志
show variabels like 'general_log';   #查看日志是否打开
set global general_log=1;    #开启日志功能
show variabels like 'general_log_file';    #查看日志文件保存位置
set global general_log_file='tmp/general.log';     #设置日志文件保存位置

在主和从服务器分别启用通用日志,查看读写分离
#从节点上
[root@slave ~]#set global general_log=1;
[root@slave ~]#tail -f /var/lib/mysql/slave.log
#客户端执行select * from students; 此处可以看到
#客户端执行select * from teachers; 此处可以看到

#主节点上
[root@master ~]#set global general_log=1;
[root@ master ~]#tail -f /var/lib/mysql/master.log
#客户端执行update teachers set age=@@server_id where tid=4; 此处可以看到

8、停止从节点,MyCAT自动调度读请求至主节点

[root@slave ~]#systemctl stop mysqld
[root@client ~]#mysql -uroot -pmagedu -h10.0.0.8 -P8066
MySQL [(none)]>select @@server_id;
+-----------+
| server_id |
+-----------+
|        1  |
+-----------+
#停止主节点,MyCAT不会自动调度写请求至从节点
MySQL [TESTTDB]>insert teachers values(5,'wang  ',30,  'M');
ERROR 1184 (HY000):java.net.ConnectException:Connection refused

9、MyCAT对后端服务器的健康性检查方法select user()

#开启通用日志
[root@master ~]#mysql
mysql>set global general_log=1;

[root@slave ~]#mysql
mysql>set global general_log=1;

#查看通用日志
[root@master ~]#tail -f /var/lib/mysql/master.log
[root@slave ~]#tail -f /var/lib/mysql/slave.log
4、ansible常用模块介绍
  1. Command模块
    功能:在远程主机执行命令,此为默认模块,可忽略-m选项
    注意:此命令不支持$VARNAME < > | ; &等,可以用shell模块实现
    注意:此模块不具有幂等性
    范例
ansible websrvs -m command -a 'chdir=/data ls -l'
ansible websrvs -m command -a 'creates=/data/mysql mkdir /data/mysql'    #存不存在。存在,不执行后面命令;不存在,执行后面命令
ansible websrvs -m command -a 'ls -l /data'
  1. Shell模块
    功能:和command相似,用shell执行命令,支持各种符号,比如*,$,>
    注意:此模块不具有幂等性
    范例
ansible websrvs -m shell -a 'echo hello > /data/hello.log'
ansible websrvs -m shell -a 'cat /data/hello.log'
  1. Script模块
    功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
    注意:此模块不具有幂等性
    范例
ansible websrvs -m script -a /data/test.sh
  1. Copy模块
    功能:从ansible服务器主控端复制文件到远程主机
    注意:src=file如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
    范例
ansible websrvs -m copy -a 'src=ssh_key.sh dest=/data/ssh.sh owner=wang group=bin mode=700'

#复制/etc目录自身,注意/etc/后面 没有/
ansible websrvs -m copy -a "src=/etc dest=/backup"
#复制/etc/下的文件,不包括/etc/目录自身,注意/etc/后面 有/
ansible websrvs -m copy -a "src=/etc/ dest=/backup"

  1. Get_url模块
    功能:用于将文件从http、https或ftp下载到被管理机节点上
    常用参数如下
    url:下载文件的URL,支持HTTP,HTTPS或FTP协议
    dest:下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
    owner:指定属主
    group:指定属组
    mode:指定权限
    force:如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
    checksum:对目标文件在下载后计算摘要,以确保其完整性
    示例:checksum=”sha256:D98291AC[…]B6DC7B97”,
    checksum=”sha256:http://example.com/path/sha256sum.txt
    url_username:用于HTTP基本认证的用户名。对于允许空密码的站点,此参数可以不使用’url_password’
    url_password:用于HTTP基本认证的密码。如果未指定’url_username’参数,则不会使用’url_password’参数
    validate_certs:如果”no”,SSL证书将不会被验证。适用于自签名证书在私有网站上使用
    timeout:URL请求的超时时间,秒为单位
    范例
ansible websrvs -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/usr/local/src/nginx.tar.gz checksum="md5:b2d33d24d89b8b1f87ff5d251aa27eb8"'
  1. Fetch模块
    功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
    范例
ansible websrvs -m fetch -a 'src=/root/test.sh dest=/data/scripts'
  1. File模块
    功能:设置文件属性,创建软链接等
    范例
#创建空文件
ansible websrvs -m file -a 'path=/data/a.txt state=touch owner=wang'

#创建目录(文件夹)
ansible websrvs -m file -a 'path=/data/mysql-5.7 state=directory'

#创建软链接
ansible websrvs -m file -a 'src=/data/mysql-5.7  path=/data/mysql-link state=link'

#删除目录
ansible websrvs -m file -a 'path=/data/mysql-5.7 state=absent'

#递归修改目录属性,但不递归至子目录
ansible all -m file -a  "path=/data/mysql state=directory owner=mysql group=mysql"

#递归修改目录及子目录的属性
ansible all -m file -a  "path=/data/mysql state=directory owner=mysql group=mysql recurse=yes"
  1. stat模块
    功能:检查文件或文件系统的状态
    注意:对于Windows目标,请改用win_stat模块
    选项
    path:文件/对象的完整路径(必须)
    常用的返回值判断
    exists:判断是否存在
    isuid:调用用户的ID与所有者ID是否匹配

  2. unarchive模块
    功能:解包解压缩
    实现有两种用法
    1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
    2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
    常见参数
    copy:默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置copy=no,会在远程主机上寻找src源文件
    remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在ansible主机上
    src:源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或第三方主机)上的路径,如果是远程主机上的路径,则需要设置copy=no
    dest:远程主机上的目标路径
    mode:设置解压缩后的文件权限
    范例:

#从ansible主机上的压缩包传到远程主机,并解压缩至特定目录
ansible all -m unarchive -a 'src=nginx-1.8.0.tar.gz dest=/usr/local/src owner=wang group=bin'

#从网上下载到远程主机,并解压缩至特定目录
ansible all -m unarchive -a 'src=http://nginx.org/download/nginx-1.8.0.tar.gz dest=/data copy=no'

#将远程主机上的压缩包解压缩至特定目录
ansible websrvs -m unarchive -a 'src=/usr/local/src/nginx.tar.gz dest=/opt copy=no'
  1. Archive模块
    功能:打包压缩保存在被管理节点
    范例
ansible websrvs -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600'
  1. Hostname模块
    功能:管理主机名
    范例
ansible 10.0.0.7 -m hostname -a 'name=test.magedu.org'
  1. Cron模块
    功能:计划任务
    支持时间:minute,hour,day,month,weekday
    范例
#创建任务
ansible 10.0.0.18 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'

#禁用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=yes "

#删除任务
ansible websrvs -m cron -a "name='backup mysql' state=absent"
  1. Yum和Apt模块
    功能
    Yum管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本
    Apt模块管理Debian相关版本的软件包
    范例
ansible 10.0.0.100 -m apt -a 'name=sl'        #安装小火车
ansible 10.0.0.18 -m yum -a 'name=httpd'    #安装httpd
ansible 10.0.0.18 -m yum -a 'name=httpd,vsftpd'     #安装多个包,逗号隔开
ansible 10.0.0.18 -m yum -a 'name=httpd state=absent'    #卸载(删除)
#启用epel源进行安装
ansible websrvs -m yum -a 'name=nginx state=present enablerepo=epel '    
#升级除kernel和foo开头以外的所有包
ansible websrvs -m yum -a 'name=* state=lastest exclude=kernel*,foo* '

#直接从互联网上安装包
ansible websrvs -m yum -a "name=https://mirror.tuna.tsinghua.edu.cn/zabbix/5.2/rhel/7/x86_64/zabbix-agent-5.2.5-1.el7.x86_64.rpm"

#查看包
ansible 10.0.0.18 -m yum -a "list=httpd"
  1. yum_repository模块

  2. Service模块
    功能:管理服务
    范例

ansible 10.0.0.18 -m service -a "name=httpd state=started enabled=yes"
ansible 10.0.0.18 -m service -a "name=httpd state=stopped enabled=no"
  1. User模块
    功能:管理用户
    范例
#创建用户
ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
ansible all -m user -a 'name=nginx comment=nginx uid=88 group=nginx groups="root,daemon" shell=/sbin/nologin system=yes create_home=no home=/data/nginx non_unique=yes'

#remove=yes表示删除用户及家目录等数据,默认remove=no
ansible all -m user -a 'name=nginx state=absent remove=yes'
  1. Group模块
    功能:管理组
    范例
#创建组
ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
#删除组
ansible websrvs -m group -a 'name=nginx state=absent'
  1. Lineinfile模块(单行替换)
    regexp参数:使用正则表达式匹配对应的行,当替换文本时,如果由多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这些行都会被删除。
    如果想进行 多行匹配进行替换 需要 使用replace模块
    功能:相当于sed,可以修改文件内容
    范例
ansible websrvs -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'"
ansible all -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX' line='SELINUX=disabled'"
ansible all -m lineinfile -a 'dest=/etc/fstab state=absent regexp="^#"'
  1. Replace模块(全部替换)
    该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
    范例
ansible 10.0.0.18 -m replace -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen.* ' replace='Listen 80'"
  1. SELinux模块
    该模块管理SELinux策略
    范例
ansible 10.0.0.18 -m selinux -a 'state=disabled'   #重启生效
  1. reboot模块
ansible websrvs -m reboot
  1. mount挂载和卸载
    功能:挂载和卸载文件系统
    范例
#临时挂载
mount websrvs -m mount -a 'src="UUID=b3e48f45-f933-4c8e-a700-22a159ec9077" path=/home fstype=xfs opts=noatime state=present'
#临时取消挂载
mount websrvs -m mount -a 'path=/home fstype=xfs opts=noatime state=unmounted'

#永久挂载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads opts="_netdev" state=mounted'
#永久卸载
ansible websrvs -m mount -a 'src=10.0.0.8:/data/wordpress path=/var/www/html/wp-content/uploads state=absent'
  1. Setup模块
    功能:setup模块来收集主机的系统信息,这些facts信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度
    可以使用gather_facts:no来禁止Ansible收集facts信息
    范例
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"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_default_ipv4"
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'
  1. debug模块

此模块可以用于输出信息,并且通过msg定制输出的信息内容

注意:msg后面的变量有时需要加" "引起来

范例:debug模块默认输出Hello world

[root@ansible ~]#ansible 10.0.0.18 -m debug
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容