第十二周作业
1、主从复制及主主复制的实现
主从复制
#主节点
[root@centos8 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server-id=18
log-bin=/data/mysql/logbin/mysql-bin
[root@centos8 ~]# mkdir -pv /data/mysql/logbin
[root@centos8 ~]# chown -R mysql.mysql /data/mysql/logbin
[root@centos8 ~]# systemctl restart mysqld
#查看二进制文件和位置
mysql> show master logs;
#如果是MySQL 8.0 需要分成下面两步实现
mysql> create user 'repluser'@'10.0.0.18' identified by '123456';
mysql> grant replication slave on *.* to 'repluser'@'10.0.0.%';
#从节点
[root@centos28 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=28
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=4,master_connect_retry=1103;
mysql> start slave;
mysql> show slave status\G
#查看启用进程
mysql> show processlist;
#进行测试
[root@centos8 ~]# mysql < hellodb_innodb.sql
[root@centos8 ~]# mysql hellodb < testlog.sql
mysql> call sp_testlog
mysql> show databases;
主主复制
#在第一个master节点上实现
[root@master1 ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=8
log-bin=/data/mysql/mysql-bin
auto_increment_offset=1
auto_increment_increment=2
[root@master1 ~]# mkdir -p /data/mysql;chown -R mysql.mysql /data/mysql
[root@master1 ~]#systemctl restart mysqld
mysql> create user 'repluser'@'10.0.0.18' identified by '123456';
mysql> grant replication slave on *.* to 'repluser'@'10.0.0.%';
mysql> show master status;
#在第二个master节点上实现
[root@master2 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=18
log-bin=/data/mysql/mysql-bin
auto_increment_offset=2
auto_increment_increment=2
[root@master2 ~]# mkdir -p /data/mysql;chown -R mysql.mysql /data/mysql
[root@master1 ~]#systemctl restart mysqld
mysql> change master to master_host='10.0.0.18',master_user='repluser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000003',master_log_pos=156;
mysql> start slave;
mysql> show master status; #查看二进制位置
mysql> show slave status\G
#在第一个master节点上实现
mysql> change master to master_host='10.0.0.18',master_user='repluser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000003',master_log_pos=156;
mysql> show slave status\G
mysql> start slave;
#两个节点分别插入数据
#在第一个节点上执行
mysql> use db1
mysql> create table t1 (id int);
#在第二个节点上执行
mysql> use db1
mysql> create table t1 (id int);
#复制失败报错,修改配置跳过错误!
mysql> show slave status\G
Last_Errno: 1050
Last_Error: Error 'Table 't1' already exists' on query. Default database: 'db1'. Query: 'create table t1 (id int)'
#在第一个节点上执行
[root@master1 ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=8
log-bin=/data/mysql/mysql-bin
slave_skip_errors=1050
[root@master1 ~]#systemctl restart mysqld
#在第二个节点上执行
[root@master2 ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=8
log-bin=/data/mysql/mysql-bin
slave_skip_errors=1050
[root@master2 ~]#systemctl restart mysqld
2、xtrabackup实现全量+增量+binlog恢复库
1 备份过程
1)完全备份:
[root@centos8 ~]# xtrabackup -uroot --backup --target-dir=/backup/base
2)第一次修改数据
mysql> insert teacher values(null,'wang',18,'M');
mysql> insert teachers values(null,'mage',18,'M');
3)第一次增量备份
[root@centos8 ~]# xtrabackup -uroot --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
4)第二次修改数据
mysql> insert teachers values(null,'zhang',19,'M');
mysql> insert teachers values(null,'jie',20,'M');
5)第二次增量
[root@centos8 ~]# xtrabackup -uroot --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
#停止并清除数据
[root@centos28 ~]# systemctl stop mysqld
[root@centos28 ~]# rm -rf /var/lib/mysql/*
[root@centos28 ~]# rm -rf /backup/*
6)[root@centos8 ~]# scp -r /backup/* 10.0.0.28:/backup/
#备份过程生成三个备份目录
/backup/{base,inc1,inc2}
2还原过程
1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@centos28 ~]#yum -y install percona-xtrabackup-24-2.4.20-1.el8.x86_64.rpm
[root@centos28 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
2)合并第1次增量备份到完全备份
[root@centos28 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
--incremental-dir=/backup/inc1
3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos28 ~]#xtrabackup --prepare --target-dir=/backup/base --incremental-
dir=/backup/inc2
4)复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
[root@centos28 ~]#xtrabackup --copy-back --target-dir=/backup/base
5)还原属性:
[root@centos28 ~]#chown -R mysql:mysql /var/lib/mysql
6)启动服务:
[root@centos28 ~]#systemctl start mysqld
#二进制还原
[root@centos8 ~]# mysqlbinlog /data/mysql/logbin/mysql-bin.000010 > /opt/binlog.sql
[root@centos8 ~]# scp /opt/binlog.sql 10.0.0.28:/root
[root@centos28 ~]# mysql hellodb < binlog.sql
3、MyCAT实现MySQL读写分离
mycat-server 10.0.0.8 #内存建议2G以上
mysql-master 10.0.0.18 MySQL 8.0
mysql-slave 10.0.0.28 MySQL 8.0
1 搭建主从复制数据库
[root@master ~]#yum -y install mysql-server
[root@slave ~]#yum -y install mysql-server
#主节点
[root@master ~]# vim /etc/my.cnf.d/mysql-server.cnf
server-id=18
log-bin=/data/mysql/logbin/mysql-bin
[root@master ~]# mkdir -pv /data/mysql/logbin
[root@master ~]# chown -R mysql.mysql /data/mysql/logbin
[root@master ~]# systemctl restart mysqld
#查看二进制文件和位置
mysql> show master logs;
#如果是MySQL 8.0 需要分成下面两步实现
mysql> create user 'repluser'@'10.0.0.%' identified by '123456';
mysql> grant replication slave on *.* to 'repluser'@'10.0.0.%';
#从节点
[root@slave ~]# vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=28
read-only
mysql> change master to master_host='10.0.0.18',master_user='repluser',master_password='123456',master_port=3306,master_log_file='centos8-bin.000001',master_log_pos=4,master_connect_retry=681;
mysql> start slave;
mysql> show slave status\G
#进行测试
[root@master ~]# mysql < hellodb_innodb.sql
2、在MySQL代理服务器10.0.0.8安装mycat并启动
[root@mycat ~]#yum install -y java mysql
[root@mycat ~]#java -version
[root@mycat ~]#wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
[root@mycat ~]#mkdir /apps
[root@mycat ~]#tar xvf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /apps
[root@mycat ~]#echo 'PATH=/apps/mycat/bin:$PATH' > /etc/profile.d/mycat.sh
[root@mycat ~]#. /etc/profile.d/mycat.sh
[root@mycat ~]#mycat start
[root@mycat ~]#tail /apps/mycat/logs/wrapper.log
#用默认密码123456来连接mycat
[root@centos7 ~]#mysql -uroot -p123456 -h 10.0.0.8 -P8066
3、在mycat 服务器上修改server.xml文件配置Mycat的连接信息
[root@centos8 ~]#vim /apps/mycat/conf/server.xml
#或者删除注释,并修改下面行的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>
<property name="frontWriteQueueSize">4096</property> <propertyname="processors">32</property>
.....
<user name="root"> #连接Mycat的用户名
<property name="password">magedu</property> #连接Mycat的密码
<property name="schemas">TESTDB</property> #数据库名要和schema.xml相对应
</user>
</mycat:server>
这里使用的是root,密码为magedu,逻辑数据库为TESTDB,这些信息都可以自己随意定义,读写权限都
有,没有针对表做任何特殊的权限。重点关注上面这段配置,其他默认即可。
4、修改schema.xml实现读写分离策略
[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" slaveTh
reshold="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 ~]#mycat restart
5、在后端主服务器创建用户并对mycat授权
#master节点
mysql> create user root@'10.0.0.%' identified by '123456';
mysql> grant all on *.* to root@'10.0.0.%';
6、连接并测试
[root@centos7 ~]#mysql -uroot -pmagedu -h 10.0.0.8 -P3306
MySQL [TESTDB]> create table t1 (id int);
MySQL [TESTDB]> select @@server_id;
4、ansible常用模块介绍
4.1 Command 模块
功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项
注意:此命令不支持 $VARNAME < > | ; & 等,可能用shell模块实现
注意:此模块不具有幂等性
范例:
[root@centos8 ~]#ansible websrvs -m command -a 'chdir=/etc cat centos-release'
10.0.0.7 | CHANGED | rc=0 >>
CentOS Linux release 7.9.2009 (Core)
10.0.0.18 | CHANGED | rc=0 >>
CentOS Linux release 8.3.2011
[root@centos8 ~]#ansible websrvs -m command -a 'chdir=/etc creates=/data/f1.txt cat centos-release'
10.0.0.7 | CHANGED | rc=0 >>
CentOS Linux release 7.9.2009 (Core)
10.0.0.18 | CHANGED | rc=0 >>
CentOS Linux release 8.3.2011
[root@centos8 ~]#ansible websrvs -m command -a 'chdir=/etc removes=/data/f1.txt cat centos-release'
10.0.0.7 | CHANGED | rc=0 >>
CentOS Linux release 7.9.2009 (Core)
10.0.0.18 | SUCCESS | rc=0 >>
skipped, since /data/f1.txt does not exist
4.2 Shell 模块
功能:和command相似,用shell执行命令,支持各种符号,比如:*,$, >
注意:此模块不具有幂等性
范例:
[root@centos8 ~]#ansible websrvs -m shell -a "echo $HOSTNAME"
10.0.0.7 | CHANGED | rc=0 >>
centos8.magedu.org
10.0.0.18 | CHANGED | rc=0 >>
centos8.magedu.org
[root@centos8 ~]#ansible websrvs -m shell -a 'echo $HOSTNAME'
10.0.0.7 | CHANGED | rc=0 >>
centos7.magedu.org
10.0.0.18 | CHANGED | rc=0 >>
centos8.magedu.org
[root@centos8 ~]#ansible websrvs -m shell -a 'echo centos|passwd --stdin wang'
10.0.0.7 | CHANGED | rc=0 >>
Changing password for user wang.
passwd: all authentication tokens updated successfully.
10.0.0.18 | CHANGED | rc=0 >>
Changing password for user wang.
passwd: all authentication tokens updated successfully.
[root@centos8 ~]#ansible websrvs -m shell -a 'ls -l /etc/shadow'
10.0.0.7 | CHANGED | rc=0 >>
---------- 1 root root 709 Mar 19 23:30 /etc/shadow
10.0.0.18 | CHANGED | rc=0 >>
---------- 1 root root 835 Mar 19 23:30 /etc/shadow
[root@centos8 ~]#ansible websrvs -m shell -a 'echo hello > /data/hello.log'
10.0.0.7 | CHANGED | rc=0 >>
10.0.0.18 | CHANGED | rc=0 >>
[root@centos8 ~]#ansible websrvs -m shell -a 'cat /data/hello.log'
10.0.0.7 | CHANGED | rc=0 >>
hello
10.0.0.18 | CHANGED | rc=0 >>
hello
4.3 Script 模块
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
范例:
[root@centos8 ~]#ansible websrvs -m script -a /data/test.sh
10.0.0.7 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.7 closed.\r\n",
"stderr_lines": [
"Shared connection to 10.0.0.7 closed."
],
"stdout": "hello\r\n",
"stdout_lines": [
"hello"
]
}
10.0.0.18 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 10.0.0.18 closed.\r\n",
"stderr_lines": [
"Shared connection to 10.0.0.18 closed."
],
"stdout": "hello\r\n",
"stdout_lines": [
"hello"
]
}
4.4 Copy 模块
功能:从ansible服务器主控端复制文件到远程主机
注意: src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件
#如目标存在,默认覆盖,此处指定先备份
[root@centos8 ~]#ansible websrvs -m copy -a "src=/root/base.repo dest=/data/base.repo owner=wang mode=600 backup=yes"
#指定内容,直接生成目标文件
[root@centos8 ~]#ansible websrvs -m copy -a "content='test line1\ntest line2\n' dest=/data/test.txt"
以下操作不建议:速度慢!建议本机拷贝
#复制/etc目录自身,注意/etc/后面没有/
[root@centos8 ~]#ansible websrvs -m copy -a "src=/etc dest=/data"
#复制/etc/下的文件,不包括/etc/目录自身,注意/etc/后面有/
[root@centos8 ~]#ansible websrvs -m copy -a "src=/etc/ dest=/data"
4.5 Get_url 模块
功能: 用于将文件从http、https或ftp下载到被管理机节点上
常用参数如下:
[root@centos8 ~]#md5sum nginx-1.20.2.tar.gz
3bcc5ccdc052c35d0d3c5557cf56c7d2 nginx-1.20.2.tar.gz
[root@centos8 ~]#ansible websrvs -m get_url -a 'url=https://nginx.org/download/nginx-1.20.2.tar.gz dest=/usr/local/src/nginx.tar.gz checksum="md5:3bcc5ccdc052c35d0d3c5557cf56c7d2"'
4.6 Fetch 模块
功能:从远程主机提取文件至ansible的主控端,copy相反,目前不支持目录
范例:
[root@centos8 ~]#ansible websrvs -m fetch -a 'src=/etc/redhat-release dest=/data'
4.7 File 模块
功能:设置文件属性,创建软链接等
范例:
#创建空文件
[root@centos8 ~]#ansible all -m file -a 'path=/data/test.txt state=touch'
[root@centos8 ~]#ansible websrvs -m file -a "path=/root/test.sh owner=wang mode=755"
#删除文件
[root@centos8 ~]#ansible all -m file -a 'path=/data/test.txt state=absent'
#创建目录
[root@centos8 ~]#ansible websrvs -m shell -a "useradd mysql"
[root@centos8 ~]#ansible websrvs -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
#创建软链接
[root@centos8 ~]#ansible websrvs -m file -a "src=/data/hello.log dest=/data/hello-link state=link"
#递归修改目录属性,但不递归至子目录
[root@centos8 ~]#ansible websrvs -m file -a "path=/data/mysql state=directory owner=mysql group=mysql"
#递归修改目录及子目录的属性
[root@centos8 ~]#ansible websrvs -m file -a "path=/data/mysql state=directory owner=mysql group=mysql recurse=yes"
4.8 stat 模块
功能:检查文件或文件系统的状态
注意:对于Windows目标,请改用win_stat模块
选项:
[root@centos8 ~]#ansible 127.0.0.1 -m stat -a 'path=/etc/passwd'
[root@centos8 ~]#vim stat.yml
---
- hosts: websrvs
tasks:
- name: check file
stat: path=/data/mysql
register: st
- name: debug
debug:
msg: "/data/mysql is not exist"
when: not st.stat.exists
[root@centos8 ~]#ansible-playbook stat.yml
PLAY [websrvs] ****************************************************************************************
TASK [Gathering Facts] ********************************************************************************
ok: [10.0.0.18]
ok: [10.0.0.7]
TASK [check file] *************************************************************************************
ok: [10.0.0.7]
ok: [10.0.0.18]
TASK [debug] ******************************************************************************************
ok: [10.0.0.7] => {
"msg": "/data/mysql is not exist"
}
ok: [10.0.0.18] => {
"msg": "/data/mysql is not exist"
}
PLAY RECAP ********************************************************************************************
10.0.0.18 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
10.0.0.7 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
4.9 unarchive 模块
功能:解包解压缩
实现有两种用法:
1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值,可省略
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
#如果设置为copy=no,会在远程主机上寻找src源文件
[root@centos8 ~]#ansible all -m unarchive -a 'src=/data/nginx.tar.gz dest=/var/lib/nginx owner=wang group=bin copy=no'
#从ansible主机复制到远程主机上
[root@centos8 ~]#ansible websrvs -m unarchive -a 'src=/root/nginx-1.18.0.tar.gz dest=/data/nginx'
#保存在本地,在远程主机解压缩
[root@centos8 ~]#ansible websrvs -m unarchive -a 'src=https://nginx.org/download/nginx-1.20.2.tar.gz dest=/data/ owner=root remote_src=yes'
#不保存在本地,在远程主机解压缩
[root@centos8 ~]#ansible websrvs -m unarchive -a 'src=https://nginx.org/download/nginx-1.18.0.tar.gz dest=/data/ owner=root copy=no'
4.10 Archive 模块
功能:打包压缩保存在被管理节点
范例:
[root@centos8 ~]#ansible websrvs -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600'
4.11 Hostname 模块
功能:管理主机名
范例:
[root@centos8 ~]#ansible websrvs -m hostname -a "name=websrv"
4.12 Cron 模块
功能:计划任务
支持时间:minute,hour,day,month,weekday
范例:
#备份数据库脚本
[root@centos8 ~]#vim mysql_backup.sh
#!/bin/bash
mysqldump -A -F --single-transation --master-data=2 -q -uroot |gzip > /data/mysql_`date +%F_%T`.sql.gz
[root@centos8 ~]#chmod +x mysql_backup.sh
#创建任务
[root@centos8 ~]#ansible 127.0.0.1 -m cron -a 'hour=15 minute=39 weekday=1-7 name="backup mysql" job=/root/mysql_backup.sh'
#禁用计划任务
[root@centos8 ~]#ansible 127.0.0.1 -m cron -a 'hour=15 minute=39 weekday=1-7 name="backup mysql" job=/root/mysql_backup.sh disabled=yes'
#启用计划任务
[root@centos8 ~]#ansible 127.0.0.1 -m cron -a 'hour=15 minute=39 weekday=1-7 name="backup mysql" job=/root/mysql_backup.sh disabled=no'
#删除任务
[root@centos8 ~]#ansible 127.0.0.1 -m cron -a "name='backup mysql' state=absent"
4.13 Yum 和 Apt 模块
功能:
yum 管理软件包,只支持RHEL,CentOS,fedora,不支持Ubuntu其它版本
apt 模块管理 Debian 相关版本的软件包
范例:
#安装
[root@centos8 ~]#ansible websrvs -m yum -a 'name=httpd state=present'
#删除
[root@centos8 ~]#ansible websrvs -m yum -a 'name=httpd state=absent'
4.14 yum_repository 模块
- name: Add multiple repositories into the same file (1/2)
yum_repository:
name: epel
description: EPEL YUM repo
file: external_repos
baseurl: https://download.fedoraproject.org/pub/epel/$releasever/$basearch/
gpgcheck: no
- name: Add multiple repositories into the same file (2/2)
yum_repository:
name: rpmforge
description: RPMforge YUM repo
file: external_repos
baseurl: http://apt.sw.be/redhat/el7/en/$basearch/rpmforge
mirrorlist: http://mirrorlist.repoforge.org/el7/mirrors-rpmforge
enabled: no
- name: Remove repository from a specific repo file
yum_repository:
name: epel
file: external_repos
state: absent
4.15 Service 模块
功能:管理服务
范例:
[root@centos8 ~]#ansible websrvs -m service -a 'name=httpd state=started enabled=yes'
[root@centos8 ~]#ansible websrvs -m service -a 'name=httpd state=stopped'
[root@centos8 ~]#ansible websrvs -m service -a 'name=httpd state=reloaded'
[root@centos8 ~]#ansible websrvs -m shell -a "sed -i 's/^Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf"
4.16 User 模块
功能:管理用户
范例:
#创建用户
[root@centos8 ~]#ansible websrvs -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
#创建特定用户
[root@websrv ~]#groupadd nginx
[root@centos8 ~]#ansible websrvs -m user -a 'name=nginx comment=nginx uid=88 group=nginx groups="root,daemon" shell=/sbin/nologin system=yes create_home=yes home=/data/nginx non_unique=yes'
#remove=yes表示删除用户及家目录等数据,默认remove=no
[root@centos8 ~]#ansible websrvs -m user -a 'name=nginx state=absent remove=yes'
#生成123456加密的密码
[root@centos8 ~]#ansible localhost -m debug -a "msg={{ '123456'|password_hash('sha512','salt') }}"
localhost | SUCCESS => {
"msg": "$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69."
}
#用上面创建的密码创建用户
[root@centos8 ~]#ansible websrvs -m user -a 'name=test password="$6$salt$MktMKPZJ6t59GfxcJU20DwcwQzfMvOlHFVZiOVD71w.igcOo1R7vBYR65JquIQ/7siC7VRpmteKvZmfSkNc69."'
4.17 Group 模块
功能:管理组
范例:
[root@centos8 ~]#ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
[root@centos8 ~]#ansible websrvs -m group -a 'name=nginx state=absent'
4.18 Lineinfile 模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,
存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块:lineinfile模块和replace模块,可
以方便的进行替换
一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最
后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被
删除。
如果想进行多行匹配进行替换需要使用replace模块
功能:相当于sed,可以修改文件内容
范例:
#修改httpd端口
[root@centos8 ~]#ansible websrvs -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 80'"
#修改selinux
[root@centos8 ~]#ansible websrvs -m lineinfile -a "path=/etc/selinux/config regexp='^SELINUX=' line='SELINUX=disabled'"
#去除#号行
[root@centos8 ~]#ansible websrvs -m lineinfile -a "dest=/data/fstab state=absent regexp="^#""
4.19 Replace 模块
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用
范例:
#UUID行添加#号注释
[root@centos8 ~]#ansible websrvs -m replace -a "path=/data/fstab regexp='^(UUID.*)' replace='#\1'"
#去除UUID行#号注释
[root@centos8 ~]#ansible websrvs -m replace -a "path=/data/fstab regexp='^#(UUID.*)' replace='\1'"
4.20 SELinux 模块
该模块管理 SELInux 策略
范例:
[root@centos8 ~]#ansible websrvs -m selinux -a 'state=disabled'
4.21 reboot 模块
[root@centos8 ~]#ansible websrvs -m reboot
4.22 mount 挂载和卸载
功能: 挂载和卸载文件系统
范例:
#永久挂载
[root@centos8 ~]#ansible websrvs -m mount -a 'src="UUID=a32cc621-a558-4ebe-a035-9fe940c52b6a" path=/opt fstype=xfs opts=noatime state=mounted'
#永久卸载
[root@centos8 ~]#ansible websrvs -m mount -a 'src="UUID=a32cc621-a558-4ebe-a035-9fe940c52b6a" path=/opt fstype=xfs opts=noatime state=absent'
4.23 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_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'
4.24 debug 模块
此模块可以用于输出信息,并且通过 msg 定制输出的信息内容
注意: msg后面的变量有时需要加 " " 引起来
范例: debug 模块默认输出Hello world
[root@centos8 ~]#ansible websrvs -m debug
10.0.0.7 | SUCCESS => {
"msg": "Hello world!"
}
浙公网安备 33010602011771号