A配置master服务器
[root@centos7 ~]#yum install mariadb-server -y
[root@centos7~]#vim /etc/my.cnf
[mysqld]
server-id=8
log-bin
[root@centos7 ~]#systemctl start mariadb
2.创建复制用户
[root@centos7 ~]#mysql
MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by 'replpass';
MariaDB [(none)]> show master status;
---------------------------------------------------------------------------------
B配置slave服务器
[root@centos7 ~]#yum install mariadb-server -y
[root@centos7 ~]#vim /etc/my.cnf
[mysqld]
server-id=17
2.修改主节点备份文件
[root@centos7 ~]#mysql
MariaDB [(none)]> show slave status;
看到数据库已经复制成功。(注意配置信息一定要和master服务器信息一致!)
1、安装Java Mariadb
[root@web02 ~]# yum -y install jave mariadb
[root@web02 ~]# java -version
[root@web02~]#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@web02 ~]# mkdir /apps
[root@web02 ~]# tar xvf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /apps/
[root@web02 ~]# vim /apps/mycat/conf/server.xml
[root@web01 ~]# yum -y install mariadb
Mycat服务器配置
[root@web02 ~]# vim /apps/mycat/conf/schema.xml
重启mycat
[root@web02 ~]# mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
主从数据库创建mycat账户授权
通过通用日志确认实现读写分离(general_log)
测试mycat自动调度读请求至主节点
####################################################################
功能:在远程主机执行命令,此为默认模块,可忽略-m选项
作用&#xff1a;执行系统命令&#xff08;linux windows&#xff09;&#xff0c;不支持变量&#xff0c;"<"&#xff0c;">"&#xff0c;"|"&#xff0c;";"&#xff0c;"&"等符号
这个批量处理设备相同操作很方便&#xff01;注意颜色&#xff01;
shell模块增强版Command模块
功能&#xff1a;执行复杂的命令
功能&#xff1a;作用&#xff1a;将本地脚本复制到远程主机&#xff0c;并执行。&#xff08;不需要给脚本添加执行权限&#xff09;
拷贝, 修改文件或目录, 修改已经存在的目录的权限
使用content可以直接在远端创建文件&#xff0c;同时指定文件内容
使用backup&#61;yes备份配置文件&#xff0c;可以实现配置文件的修改或回滚
该模块可以直接拷贝链接
[root&#64;m01 ~]# ansible-doc copy #查看copy模块用法
src: #源文件或目录&#xff0c;要复制到远程主机的文件在本地的地址&#xff0c;可以是绝对路径&#xff0c;也可以是相对路径。如果路径是一个目录&#xff0c;它将递归复制。在这种情况下&#xff0c;如果路径使用"/"来结尾&#xff0c;则只复制目录里的内容&#xff0c;如果没有使用"/"来结尾&#xff0c;则包含目录在内的整个内容全部复制&#xff0c;类似于rsync&#xff08;#&#xff09;。&#xff08;src为空目录是时候是不会拷贝的&#xff0c;一致显示绿色&#xff09;
content&#xff1a;用于替代"src",可以在命令行直接设定指定文件的值
dest: #目标目录
owner: foo #属主
group: foo #属组&#xff08;不能使用gid指定&#xff09;
mode: &#39;0644&#39; #权限&#xff0c;数字(3位|4位)&#xff0c;字母&#xff0c;UGO
backup: yes #当出现同名的文件&#xff0c;直接覆盖&#xff0c;因为默认是no&#xff0c;指定yes后&#xff08;文件内容不同会以当前时间戳备份该文件&#xff09;
force&#xff1a;如果目标主机包含该文件&#xff0c;但内容不同&#xff0c;如果设置为yes&#xff0c;则强制覆盖&#xff0c;如果为no&#xff0c;则只有当目标主机的目标位置不存在该文件时&#xff0c;才复制。默认为yes&#xff08;force&#61;no和state&#61;backup可以二选一&#xff09;
remote_src&#xff1a;
yes #受控端自己玩(可以做批量回滚)
no #默认
--------------------------------------------------
#远程批量拷贝&#xff0c;相当于scp&#xff0c;rsync
目标目录下文件存在的话会报错&#xff0c;被控端主机用户不存在会报错&#xff08;但是它把能做的都做了&#xff09;
与copy相反&#xff0c;copy是把本机文件发到所有node节点&#xff0c;用fetch可以比如从node节点抓取日志信息
只能抓取单个文件&#xff0c;抓多个需要把那些文件打包再抓
功能&#xff1a;创建文件或目录&#xff0c;修改已经存在的目录的权限&#xff0c;创建软硬连接
file:
path: /etc/foo.conf #指定创建的目录或文件
state&#xff1a;
touch #创建文件
directory #创建目录
absent #删除目录或文件
link #做软链接
owner: foo #属主
group: foo #属组
mode: &#39;0644&#39; #权限
recurse #递归
1 force&#xff1a;需要在两种情况下强制创建软链接&#xff0c;一种是源文件不存在但之后会建立的情况下&#xff1b;另一种是目标软链接已存在,需要先取消之前的软链&#xff0c;然后创建新的软链&#xff0c;有两个选项&#xff1a;yes|no
2 group&#xff1a;定义文件/目录的属组
3 mode&#xff1a;定义文件/目录的权限&#xff08; 1.一次创建多个目录的时候才会递归授权&#xff0c; 2.recurse&#61;yes也会递归授权&#xff09;
4 owner&#xff1a;定义文件/目录的属主
5 path&#xff1a;必选项&#xff0c;定义文件/目录的路径&#xff08;不存在的话可以直接创建&#xff09;#
6 recurse&#xff1a;&#39;递归&#39;的设置文件的属性&#xff0c;只对&#39;目录&#39;有效&#xff08;指定recurce的话&#xff0c;可以修改已经存在的文件或者目录的权限&#xff0c;默认关闭&#xff09;&#xff08;需要配合mode owner group一起使用&#xff09;
7 src&#xff1a;要被链接的源文件的路径&#xff0c;只应用于state&#61;link的情况
8 dest&#xff1a;被链接到的路径&#xff0c;只应用于state&#61;link的情况
9 state&#xff1a;
directory&#xff1a;如果目录不存在&#xff0c;创建目录
file&#xff1a;只能修改文件或目录的时间 &#xff08;配合modification_time access_time&#xff09;
link&#xff1a;创建软链接
功能&#xff1a;解压缩
1、解压ansible管理机上的压缩文件到远程主机&#xff1a;
ansible all -m unarchive -a "src&#61;/tmp/install/zabbix-3.0.4.tar.gz dest&#61;/tmp/ mode&#61;0755 copy&#61;yes"
2、解压远程主机上的文件到目录&#xff1a;
ansible all -m unarchive -a "src&#61;/tmp/install/zabbix-3.0.4.tar.gz dest&#61;/tmp/ mode&#61;0755 copy&#61;no"
copy&#xff1a;默认为yes&#xff0c;当copy&#61;yes&#xff0c;那么拷贝的文件是从ansible主机复制到远程主机上的&#xff0c;如果设置为copy&#61;no&#xff0c;那么会在远程主机上寻找src源文件
src&#xff1a;源路径&#xff0c;可以是ansible主机上的路径&#xff0c;也可以是远程主机上的路径&#xff0c;如果是远程主机上的路径&#xff0c;则需要设置copy&#61;no
dest&#xff1a;远程主机上的目标路径
会修改配置文件&#xff0c;不是临时更改
[root&#64;web01 ~]# ansible 10.0.0.8 -m hostname -a &#39;name&#61;node8.wutongweng.com&#39;
功能&#xff1a;添加定时任务
#使用crontab之前最好同步时间&#xff08;注意单引号和双引号的作用&#xff09;&#xff08;*有时候需要加&#39;&#39;&#xff09;
[root&#64;m01 ~]# ansible &#39;*&#39; -m cron -a "name&#61;同步时间 minute&#61;*/5 job&#61;&#39;/usr/sbin/ntpdate time1.aliyun.com &>/dev/null&#39;"
ansible-doc cron
ansible db -m cron -a &#39;minute&#61;"" hour&#61;"" day&#61;"" month&#61;"" weekday&#61;"" job&#61;"" name&#61;"&#xff08;必须填写&#xff09;" state&#61;&#39;
1、定时设置指定值的写入即可&#xff0c;没有设置的要删除
2、name必须写&#xff08;创建定时任务或者删除定时任务的 标志&#xff0c;不能修改注释&#xff09;(这一点和yum仓库名一样)
3、state有两个状态&#xff1a;present&#xff08;添加&#xff08;默认值&#xff09;&#xff09;or absent&#xff08;移除&#xff09;
#添加定时任务
ansible db -m cron -a &#39;minute&#61;"*/10" job&#61;"/bin/echo hello" name&#61;"test cron job" state&#61;"present"&#39;
查看定时任务
ansible db -a "crontab -l"
#修改定时任务
ansible db -m cron -a &#39;minute&#61;"*/5" job&#61;"/bin/echo hello" name&#61;"test cron job" state&#61;"present"&#39;
#移除定时任务&#xff08;根据name来删除&#xff09;
ansible db -m cron -a &#39;minute&#61;"*/10" job&#61;"/bin/echo hello" name&#61;"test cron job" state&#61;"absent"&#39;
ansible all -m cron -a "name&#61;test state&#61;absent"
查看定时任务
ansible db -a "crontab -l"
# 注释相应定时任务&#xff0c;使定时任务失效
ansible web_group -m cron -a "name&#61;&#39;ansible cron01&#39; minute&#61;0 hour&#61;0 job&#61;&#39;/bin/sh /server/scripts/test.sh&#39; disabled&#61;yes"
功能&#xff1a;远程下载
name #包名&#xff0c;用等于号表示&#xff08;指定要安装的软件包的名称&#xff09;
file:// #指定本地安装路径&#xff0c;&#61;yum localinstall -y
http:// #指定yum仓库
state #指定动作,用等于号表示
present #安装软件包(默认)&#xff08;&#61;install&#xff09;
absent #删除软件包&#xff08;&#61;remove&#xff09;
latest #安装最新版本的软件包或&#xff0c;升级
disable_gpg_check #默认值为 no&#xff0c;表示不禁用验证&#xff0c;设置为 yes 表示禁用验证&#xff0c;即不验证包&#xff0c;直接安装。
enablerepo #临时启用源&#xff08;无论此源是否开启&#xff09;
disablerepo #临时禁用某个源&#xff0c;这样设置后&#xff0c;在安装软件包时则不会从对应的源中选择安装包。
download_only&#61;true #只下载不安装 yum install [d]
-------------------------------------------------------------
#下载安装&#xff0c;使用被控端的源安装软件包
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m yum -a &#39;name&#61;vsftpd&#39;
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m yum -a &#39;name&#61;vsftpd state&#61;present&#39;
#下载安装&#xff0c;指定源的rpm包&#xff0c;相当于wget&#43;localinstall&#xff0c;可以指定包名和协议
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m yum -a &#39;name&#61;https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent-5.0.0-1.el7.x86_64.rpm state&#61;present&#39;
#安装&#xff0c;前提是客户端指定目录下有这个rpm包&#xff08;相当于yum localinstall&#xff09;
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m yum -a &#39;name&#61;/root/zabbix-agent-5.0.0-1.el7.x86_64.rpm state&#61;present&#39;
--------------------------------------------------------------
#卸载
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m yum -a &#39;name&#61;zabbix-agent-5.0.0-1.el7.x86_64 state&#61;absent&#39;
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m yum -a &#39;name&#61;zabbix state&#61;absent&#39;
-----------------------------------------------------------------------
#扩展
[root&#64;localhost ~]# ansible all -m yum -a "name&#61;httpd state&#61;latest disable_gpg_check&#61;yes enablerepo&#61;epel"
#升级所有软件包&#xff0c;排除httpd
[root&#64;Ansible ~]# ansible all -m yum -a "state&#61;latest name&#61;&#39;*&#39; exclude&#61;&#39;httpd&#39;"
远程启停&#xff0c;重载服务
service模块(可以跨平台&#xff0c;跨系统) 与systemd模块作用类似&#xff0c;使用命令类似
1 arguments&#xff1a;给命令行提供一些选项 #
2 enabled&#xff1a;是否开机启动 yes|no&#xff08;默认是no&#xff09;
3 name&#xff1a;必选项&#xff0c;服务名称
4 pattern&#xff1a;定义一个模式&#xff0c;如果通过status指令来查看服务的状态时&#xff0c;没有响应&#xff0c;就会通过ps指令在进程中根据该模式进行查找&#xff0c;如果匹配到&#xff0c;则认为该服务依然在运行 #
5 runlevel&#xff1a;运行级别 #
6 sleep&#xff1a;如果执行了restarted&#xff0c;在则stop和start之间沉睡几秒钟
7 state&#xff1a;对当前服务执行启动&#xff0c;停止、重启、重新加载等操作&#xff08;started,stopped,restarted,reloaded&#xff09;
#保持服务启动并设置为开机自启
ansible web_group -m service -a &#39;enabled&#61;yes name&#61;httpd state&#61;started&#39;
使用yml语法修改用户密码
多种加密方式获取加密密码
功能&#xff1a;管理远程主机上的用户&#xff0c;比如创建用户、修改用户、删除用户、为用户创建密钥对等操作
user模块是请求的是useradd, userdel, usermod三个指令&#xff0c;goup模块请求的是groupadd, groupdel, groupmod 三个指令。
groups&#xff1a; #修改附加组为
append&#61;no #默认&#xff0c;覆盖&#xff08;相当于usermod -G&#xff09;
append&#61;yes #追加&#xff08;相当于usermod -aG&#xff09;
uid&#xff1a; 指定用的uid
group: #指定主组
password&#xff1a; #明文密码进行哈希后的字符串&#xff0c;你可以在 python 的命令提示符下输入如下命令&#xff0c;生成明文密码对应的加密字符串 "import crypt; crypt.crypt(&#39;666666&#39;)"
update_password:
always: 只有当密码不相同时才会生效&#xff0c;即修改密码(默认) #
on_create: 只为新用户设置密码
name&#xff1a; 指定用户名
system&#xff1a; 是否为系统用户 yes|no&#xff08;默认是no&#xff09;
remove&#xff1a; 当state&#61;absent时&#xff0c;remove&#61;yes则表示连同家目录,邮件目录一起删除&#xff0c;等价于userdel -r&#xff08;默认是no&#xff09;
state&#xff1a;
absent #删除用户
remove&#61;no #默认&#xff0c;删除用户时&#xff0c;不会删除用户的家目录等信息
remove&#61;yes #删除用户的同时&#xff0c;会删除用户的家目录&#xff0c;邮件目录
present #创建用户&#xff08;默认&#xff09;
shell&#xff1a; 指定用户的shell环境(默认是/bin/bash)
expires: 设置用户的过期时间&#xff0c;值是一个时间戳&#xff08;转化命令&#xff1a;date -d 2018-12-31 &#43;%s&#xff0c;命令行设置 expires&#61;&#xff09;
comment: #创建用户的时候添加一段注释
generate_ssh_key: yes #创建公钥&#xff08;默认&#xff09;
ssh_key_bits: 2048 #指定公钥长度
ssh_key_file: .ssh/id_rsa #创建私钥(创建用户的家目录下)
create_home&#61;false #是否创建家目录&#xff08;默认创建true&#xff09;
------------------------------------------------------------------------
#创建用户,修改用户
ansible &#39;web_group&#39; -m user -a &#39; &#39;
name&#61;ll
name&#61;hh comment&#61;"zhushi" uid&#61;1040 group&#61;adm #该组必须存在
name&#61;hh shell&#61;/bin/bash groups&#61;adm,lp append&#61;yes
name&#61;hh state&#61;absent remove&#61;yes
name&#61;hh expires&#61;1422403387
name&#61;hh generate_ssh_key&#61;yes ssh_key_bits&#61;2048 ssh_key_file&#61;.ssh/id_rsa
name&#61;"testops" password&#61;"$6$0lwTSmqKOkL.ktgl$OnBexXC7haBf0FRHVMIZM2edDeFWBbpKJ2r9cxVwNvY.vh3IIUzwFz8n7jFglc0CrtQSY12ziDonVL6e71Og2."
--------------------------------------------------------------
#生成密钥时&#xff0c;只会生成公钥文件和私钥文件&#xff0c;和直接使用ssh-keygen指令效果相同&#xff0c;不会生成authorized_keys文件。复制id_rsa.pub粘贴为authorized_keys文件即可使用
name&#61;test generate_ssh_key&#61;yes ssh_key_bits&#61;2048 ssh_key_file&#61;~/.ssh/id_rsa
-----------------------------------------------------------------------
#指定password参数时&#xff0c;不能使用后面这一串密码会被直接传送到被管理主机的/etc/shadow文件中&#xff0c;所以需要先将密码字符串进行加密处理。然后将得到的字符串放到password中即可。
1.加密
[root&#64;ansible-manager ~]# python
>>> import crypt;crypt.crypt(&#39;666666&#39;)
&#39;$6$ziT/sb5KRtUaxoq7$ulfHVLqVgXfmfFUYY7FppzqBQMUYd.2GLDyQwmKv4dYAd0zpgtt5JDheoO/OvvTvY53x9UShX.PtHykJEvsmG0&#39;
2.创建用户指定密码 或 修改用户密码
------------------------------------------------------------------
#删除用户
注意该用户下不能有任何进程&#xff0c;否则会报错(但是能删除的都删除了)
ansible &#39;web_group&#39; -m user -a &#39; &#39;
name&#61;ll state&#61;absent remove&#61;yes
功能&#xff1a;创建用户组
[root&#64;m01 ~]# ansible-doc group
name: somegroup #指定组名
state: present #创建&#xff08;默认&#xff0c;课省略&#xff09;
state: absent #删除
gid #指定创建的组的gid
#远程创建组
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m group -a &#39;name&#61;dd gid&#61;233 state&#61;present&#39;
#远程删除组
[root&#64;m01 ~]# ansible &#39;web_group&#39; -m group -a &#39;name&#61;dd gid&#61;233 state&#61;absent&#39;
参考网页&#xff1a;https://www.cnblogs.com/syy1757528181/p/13069043.html
#####################################################################
&#xff08;index.html的获取主机变量好像没有成功&#xff0c;有空再试试编写部分&#xff09;
###################################################################
[root&#64;web01 ~] wget http://download.redis.io/releases/redis-5.0.9.tar.gz
[root&#64;web01 ~]yum -y install gcc jemalloc-devel
[root&#64;web01 ~]tar xvf redis-5.0.9.tar.gz
[root&#64;web01 ~]cd redis-5.0.9/
[root&#64;web01 redis-5.0.9]make PREFIX&#61;/apps/redis install
[root&#64;web01 redis-5.0.9]tree /apps/redis/
[root&#64;web01 redis-5.0.9]#ln -s /apps/redis/bin/* /usr/bin/
[root&#64;web01 redis-5.0.9] #mkdir /apps/redis/{etc,log,data,run}
[root&#64;web01 redis-5.0.9]#useradd -r -s /sbin/nologin redis
[root&#64;web01 redis-5.0.9]#chown redis.redis /apps/redis -R
[root&#64;web01 redis-5.0.9]# vim /etc/sysctl.conf
[root&#64;web01 redis-5.0.9]# sysctl -p
net.core.somaxconn &#61; 1024
vm.overcommit_memory &#61; 1
[root&#64;web01 redis-5.0.9]# echo &#39;echo never > /sys/kernel/mm/transparent_hugepage/enabled&#39; >> /etc/rc.d/rc.local
[root&#64;web01 redis-5.0.9]# chmod &#43;x /etc/rc.d/rc.local
[root&#64;web01 redis-5.0.9]# cp redis.conf /apps/redis/etc/
[root&#64;web01 redis-5.0.9]# chown -R redis.redis /apps/redis/
[root&#64;web01 redis-5.0.9]# vim /apps/redis/etc/redis.conf
[root&#64;web01 redis-5.0.9]# redis-server /apps/redis/etc/redis.conf
[root&#64;web01 redis-5.0.9]# vim /apps/redis/etc/redis.conf
Bind0.0.0.0
daemonize yes
[root&#64;web01 redis-5.0.9]# redis-server /apps/redis/etc/redis.conf