2024.8.16(ansible)

news2024/11/25 22:38:53

一、回顾

1、mysql和python
        1. mysql5.7

                1.1 不需要执行mysql_ssl_rsa_setup

                1.2 Change_master_to. 不需要get public key

        2. 可以使用pymysql非交互的管理mysql

                2.1 conn=pymysql.connect(host,user,password,database,port)

                2.2 cursor=conn.cursor()

                2.3 cursor.execute("create user...")

                2.4 cursor.execute("grant 权限 on 库.表 to 用户")

                2.5 conn.commit()

                2.6 cursor.fetchall()

2、mycat中间件
        1. 独属于mysql主从的负载均衡策略
        2.配置写主读从
        3. 步骤
                3.1 安装jdk

                tar -xf jdk_8u192.tar.gz

                cp jdk/ /usr/local/jdk

                sed -i '$aexport JAVA_HOME=/usr/local/jdk' /etc/profile

                sed -i '$aexport PATH=$PATH:$JAVA_HOME:/bin' /etc/profile

                source /etc/profile

                javac -version

                3.2 mycat

                tar -xf MyCat.tar.gz

                cp -r mycat/ /usr/local/

                 #测试启动

                /usr/local/mycat/bin/mycat console       //用控制台打印

                3.3 配置

                        (1) server.xml              

 <user name="blt" defaultAccount="true">
                <property name="password">blt</property>
                <property name="schemas">test</property>

<!--
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">TESTDB</property>
                <property name="readOnly">true</property>
        </user>
-->

                        (2) schema.xml

        <schema name="test" dataNode="dn1" checkSQLschema="false" sqlMaxLimit="100">
        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="test" />
                
<writeHost host="hostM1" url="192.168.8.150:3306" user="blt"
                                   password="blt">
                   
                        <readHost host="hostS2" url="192.168.8.151:3310" user="blt" password="blt" />
                </writeHost>

                3.4 启动和调试

                        (1)/usr/local/mycat/bin/mycat start

                          (2) netstat -lnput | grep 8066

                          (3) mysql -hmycat的ip或者域名 -P8066 -userver.xml中填入账号 -p在service.xml中填入的密码

                        (4) cat /usr/local/mysql/logs/wrapper.log

                                1. cause by.... 

二、运维自动化(ansible)

1、任务背景

公司的服务器越来越多,维护一些简单的事情都会变得很繁琐。用shell脚本来管理少量服务器效率还行,服务器多了之后,shell脚本无法实现高效率运维。这种情况下,我们需要引入自动化运维工具,对多台服务器实现高效运维。

2、任务拆解

1. 需要一台服务器做管理端,来连接管理所有的应用服务器

2. 考虑如果只针对一部分应用服务器进行运维操作如何实现(服务器分组)

3. 学会将平台烂熟于心的linux操作命令转化为自动化运维的方式(常见模块的学习)

4. 如果操作非常的冗长,学会使用playbook和role的方式来管理

3、学习目标

能够安装ansible服务器和客户端

能够定义ansible主机清单进行服务器分组

能够使用hostname模块修改主机名

能够使用file模块做基本的文件操作

能够使用copy模块把文件拷贝到远程机器

能够使用fetch模块把文件从远程拷贝到本地

能够使用user模块管理用户

能够使用group模块管理用户组

能够使用cron模块管理时间任务

能够使用yum_repository模块配置yum

能够使用yum模块安装软件包

能够使用service模块控制服务的启动,关闭,开机自启动

能够使用script模块在远程机器上执行本地脚本

能够使用command与shell模块远程执行命令

能够编写playbook实现httpd

三、认识自动化运维

1、问题:

假设我要去1000台服务上做一个操作(如nginx服务器修改配置文件里的某一个参数),下面两种方法缺点明显:

1. 按传统的方法,一台连着一台服务器的ssh上去手动操作。

        缺点: 效率太低。

2. 写个shell脚本来做。

        缺点:

                1. 管理的机器平台不一致,脚本可能不具备通用性。

                2. 传密码麻烦(在非免密登录的环境下,需要expect来传密码)

                3. 效率较低,循环1000次也需要一个一个的完成,如果用&符放到后台执行,则会产生1000个进程。

自动化运维:将日常IT运维中大量的重复性工作,小到简单的日常检查、配置变更和软件安装,大到整个变更流程的组织调度,由过去的手工执行转为自动化操作,从而减少乃至消除运维中的延迟,实现“零延时”的IT运维。

2、自动化运维主要关注的方面

假如管理很多台服务器,主要关注以下几个方面:

1. 管理机与被管理机的连接(管理机如何将管理指令发送给被管理机)

2. 服务器信息收集(如果被管理的服务器有centos7.5外还有其它
linux发行版,如suse,ubuntu等。当你要做的事情在不同OS上有所
不同,你需要收集信息,并将其分开处理)

3. 服务器分组(因为有些时候我要做的事情不是针对所有服务器,可
能只针对某一个分组)

4. 管理内容的主要分类

        4.1 文件目录管理(包括文件的创建,删除,修改,查看状态,远程拷贝等)

        4.2 用户和组管理

        4.3 cron时间任务管理

        4.4 yum源配置与通过yum管理软件包

        4.5 服务管理

        4.6 远程执行脚本

        4.7 远程执行命令

3、常见的开源自动化运维工具比较
1. puppet(拓展)

基于ruby语言,成熟稳定。适合于大型架构,相对于ansible和saltstack会复杂些。

2. saltstack(拓展)

基于python语言。相对简单,大并发能力比ansible要好,需要维护被管理端的服务。如果服务断开,连接就会出问题。

3. ansible

基于python语言。简单快捷,被管理端不需要启服务。直接走ssh协议,需要验证所以机器多的话速度会较慢。

四、ansible

1、ansible

ansible是一种由Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

特点:

1. 部署简单

2. 默认使用ssh进行管理,基于python里的paramiko模块开发

3. 管理端和被管理端不需要启动服务

4. 配置简单,功能强大,扩展性强

5. 能过playbook(剧本)进行多个任务的编排

2、在m0安装ansible(搭建四台机器 m0 s0 s1 s2)

[root@m0 ~]# yum -y install epel-release
[root@m0 ~]# yum -y install ansible

[root@m0 ~]# ansible --version
ansible 2.9.27
[root@m0 ~]# find /etc/ -name "*ansible*"
/etc/ansible
/etc/ansible/ansible.cfg

3、实现master对agent的免密登录,(s0 和s1)

[root@m0 ~]# ssh -keygen
[root@m0 ~]# ls ./.ssh/
id_rsa  id_rsa.pub
[root@m0 ~]# cat ./.ssh/id_rsa.pub
[root@m0 ~]# ssh-copy-id -i 192.168.8.157
[root@m0 ~]# ssh-copy-id -i 192.168.8.158

4、在master上定义主机组,并测试连接

[root@m0 ~]# vim /etc/ansible/hosts    //最后一行

[root@m0 ~]# ansible 192.168.8.157 -m ping 

[root@m0 ~]# ansible group01 -m ping 

[root@m0 ~]# ansible group02 -m ping 

没有免密登陆的用户可以指定用户名和密码

可以利用别名分组

[root@m0 ~]# vim /etc/ansible/hosts 

[root@m0 ~]# ansible group02 -m ping 

可以直接ping别名

[root@m0 ~]# ansible other -m ping 

主机清单的作用:服务器分组。

主机清单的常见功能:

1. 可以通过IP范围来分,主机名名字的范围来分

2. 如果ssh端口不是22的,可以传入新的端口。

3. 没有做免密登录,可以传密码。

vim /etc/ansible/hosts

web01 ansible_ssh_host192.168.8.xx 

ansible_ssh_user=root ansible_ssh_pass=1 ansible_ssh_port=22

web02 ansible_ssh_host192.168.8.xx 

ansible_ssh_user=root ansible_ssh_pass=1 ansible_ssh_port=22

[group1]

web01

web02  

ansible 主机ip|域名|别名  -m ping|copy|...'参数'

五、ansible模块

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

ansible支持的模块非常的多,我们并不需要把每个模块都记住,而只需要熟悉一些常见的模块,其它的模块在需要用到时再查询即可。

1、查看所有支持模块

[root@m0 ~]# ansible-doc -l

2、查看所有ping模块

[root@m0 ~]# ansible-doc ping

3、远程修改主机名称

[root@m0 ~]# ansible group02 -m hostname -a 'name=ab'
[root@s0 ~]# hostname
ab
[root@s1 ~]# hostname
ab
[root@s2 ~]# hostname
ab

4、file模块(重点)

file模块用于对文件相关的操作(创建,删除,软硬钟接等)

# path        文件的地址
# state        方法
# directory 创建目录
# touch         创建文件

# absent         删除文件
# link                创建软链接
# hard        创建硬链接

# recurse        允许递归操作

# src        文件源

1. 创建一个目录

[root@m0 ~]# ansible group01 -m file -a 'path=/tmp/abc state=directory'
[root@s0 ~]# ls -l /tmp/     //s0 s1 s2 都有

2. 创建一个文件

[root@m0 ~]# ansible group02 -m file -a 'path=/tmp/abc/def state=touch'

[root@s0 ~]# ls /tmp/abc
def

3. 递归修改

[root@m0 ~]# ansible group02 -m file -a 'path=/tmp/abc recurse=yes owner=bin group=daemon mode=1777'

[root@s0 ~]# ll /tmp/


[root@s0 ~]# ll /tmp/abc/

4. 删除目录(连同目录里的所有文件)

[root@m0 ~]# ansible group02 -m file -a 'path=/tmp/abc state=absent'
[root@s0 ~]# ls /tmp/

5. 创建文件并指定group owner mode

[root@m0 ~]# ansible group02 -m file -a 'path=/tmp/aaaa state=touch owner=bin group=daemon mode=1777'
[root@s0 ~]# ls -l /tmp/
 

6. 删除

[root@m0 ~]# ansible group02 -m file -a 'path=/tmp/aaaa  state=absent'

7. 创建软链接文件   #软链接指向硬链接

[root@m0 ~]# ansible group02 -m file -a 'src=/etc/fstab path=/tmp/xxx state=link'
[root@s0 ~]# ll /tmp/

8. 创建硬链接文件   #硬链接指向文件

[root@m0 ~]# ansible group02 -m file -a 'src=/etc/fstab path=/tmp/xxx2  state=hard'

 6、stat模块(了解)

[root@m0 ~]# ansible group02 -m stat -a 'path=/etc/fstab'

7、copy模块

copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)

1.copy模块

[root@m0 ~]# ls
mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz
[root@m0 ~]# mv mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz my57.tar.gz
[root@m0 ~]# ls
my57.tar.gz

[root@m0 ~]# ansible group02 -m copy -a 'src=./my57.tar.gz dest=~'

[root@s0 ~]# ls
my57.tar.gz

2. 使用content参数远程给文件里写入内容(会覆盖原内容)

[root@m0 ~]# ansible group02 -m copy -a 'content="wo wo wo" dest=~/test'

[root@s0 ~]# ls 
test
[root@s0 ~]# cat test
wo wo wo

3. 使用force参数控制是否强制覆盖

如果目标文件已经存在,则不覆盖
[root@m0 ~]# ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333 force=no'
如果目标文件已经存在,则会强制覆盖
[root@m0 ~]# ansible group1 -m copy -a 'src=/tmp/222 dest=/tmp/333 force=yes'

4. 使用backup参数控制是否备份文件

[root@m0 ~]#  ansible group02 -m copy -a 'src=./test dest=~ backup=yes owner=bin group=daemon mode=1777'
[root@s0 ~]# ls -lh

[root@m0 ~]#  ansible group02 -m file -a 'path=/tmp/a.txt state=touch'

[root@m0 ~]#  ansible group02 -m copy -a 'src=/etc/fstab dest=/tmp/a.txt backup=yes owner=bin group=daemon mode=1777'

[root@s0 ~]# ls /tmp

[root@s0 ~]# cat /tmp/a.txt

5. copy模块拷贝时要注意拷贝目录后面是否带"/"符号

[root@m0 ~]# ansible group02 -m copy -a 'src=/etc/yum.repos.d dest=/etc/yum.repos.d/ backup=yes'         //同步整个目录

[root@m0 ~]# ansible group02 -m copy -a 'src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/ backup=yes'        //同步目录下的内容

8、 fetch模块

fetch模块与copy模块类似,但作⽤相反。⽤于把远程机器的⽂件拷贝到本地。

[root@m0 ~]# ansible group02 -m fetch -a 'src=/etc/sysconfig/network-scripts/ifcfg-ens33 dest=/tmp'
[root@m0 ~]# ls /tmp/ 

9、user模块
1. user模块用于管理用户账号和用户属性

[root@m0 ~]# ansible group02 -m user -a 'name=aaaa state=present'

[root@s0 yum.repos.d]# grep aaaa /etc/passwd

2. 创建用户mysql设置登录shell环境为/sbin/nologin

[root@m0 ~]# ansible group02 -m user -a 'name=mysql state=present system=yes shell="/sbin/nologin"'

[root@s0 ~]# grep mysql /etc/passwd

3. 指定group mode owner

[root@m0 ~]# ansible group02 -m file -a 'path=/usr/local/mysql/mysql-files state=directory owner=mysql group=mysql mode=750'
[root@s0 ~]# ll /usr/local/mysql/

4. 指定uid使用password传密码

[root@m0 ~]# echo 123456 | openssl passwd -1 -stdin

[root@m0 ~]# ansible group02 -m user -a 'name=abc state=present uid=1999 password=abc'

[root@s0 ~]# grep abc /etc/passwd
abc:x:1999:1999::/home/abc:/bin/bash
[root@s0 ~]# grep abc /etc/group
abc:x:1999:

5. 创建普通用户hadpoop,并产生空密码密钥对

[root@m0 ~]# ansible group02 -m user -a 'name=hadoop generate_ssh_key=yes'

6. 删除hadpoop用户,但默认家目录没有删除

[root@m0 ~]# ansible group02 -m user -a 'name=hadoop state=absent'

[root@m0 ~]# ansible group02 -m user -a 'name=aaaa state=absent'

[root@s0 ~]# ll /home/

7. 使用remove参数,删除用户的同时删除家目录

[root@m0 ~]# ansible group02 -m user -a 'name=mysql state=absent remove=yes'
[root@s0 ~]# ll /home/

10、group模块

group模块⽤于管理⽤户组和⽤户组属性。

11、yum 模块

yum模块⽤于使⽤yum命令来实现软件包的安装与卸载。

1. 使用yum安装一个软件

[root@m0 ~]# ansible group02 -m yum -a 'name=ntpdate state=present'

[root@m0 ~]# ansible group02 -m yum -a 'name=tree state=present'

[root@s0 ~]# ntpdate cn.ntp.org.cn
16 Aug 16:36:29 ntpdate[14892]: adjust time server 182.92.12.11 offset -0.000865 sec

[root@s0 ~]# tree

12、cron模块

cron模块⽤于管理周期性时间任务

1. 创建一个cron任务

不指定user的话,默认就是root(因为我这里是用root操作的)。
如果minute,hour,day,month,week不指定的话,默认都为*

[root@m0 ~]# crontab -e
[root@m0 ~]# crontab -l
*/1 * * * * echo $( date ) >> ~/data.txt

[root@m0 ~]# ansible group02 -m cron -a 'name="abc" user=root job="/usr/sbin/ntpdate cn.ntp.org.cn" hour=2'
[root@s0 ~]# crontab -l
#Ansible: abc
* 2 * * * /usr/sbin/ntpdate cn.ntp.org.cn

13、service模块
1. 关闭防火墙

[root@m0 ~]# ansible group02 -m service -a 'name=firewalld state=stopped enabled=false'
[root@s0 ~]# systemctl status firewalld.service 

2. 关机

[root@s0 ~]# ansible group02 -m command -a 'shutdown -h 0' 


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

激光雷达点云投影到图像平面

将激光雷达点云投影到图像平面涉及几何变换和相机模型的应用。以下是该过程的基本原理&#xff1a; 1. 坐标系转换 激光雷达生成的点云通常位于激光雷达的坐标系中&#xff0c;而图像则在相机坐标系中。为了将点云投影到图像上&#xff0c;首先需要将点云从激光雷达坐标系转换…

绝对的美剧之最:通宵追剧的最佳选择

在众多美剧中&#xff0c;《火线》堪称冷门中的神作。2002年由HBO出品&#xff0c;共五季&#xff0c;豆瓣评分9.4到9.7分&#xff0c;IMDb也高达9.3分。对于剧迷来说&#xff0c;《火线》无疑是美剧中的天花板。 不同于一般美剧&#xff0c;《火线》没有炫目的动作场面&#x…

使用MYSQL函数问题

使用mysql函数遇到的坑 最近项目需要做很多的报表统计&#xff0c;用到一些mysql的函数。今天就讲其中两个函数的问题 DATE_SUB函数 查询近七天数据 SELECT * FROM my_table WHERE DATE(create_date) >DATE_SUB(CURDATE(), INTERVAL 7 DAY) 这是在网上找的答案&#xf…

Royal累计勒索金额超36亿元,加强服务器防勒索防护迫在眉睫

近日&#xff0c;美国联邦调查局&#xff08;FBI&#xff09;和网络安全与基础设施安全局&#xff08;CISA&#xff09;联合发布的警报引起了全球网络安全界的广泛关注。曾以"皇家&#xff08;Royal&#xff09;"之名臭名昭著的勒索软件组织&#xff0c;现更名为&quo…

AI大模型开发——5.transformer模型(0基础也可懂)(2)

3. 编码处理器&#xff08;Bert&#xff09; transformer模型的编码器构成了模型处理输入数据的基础部分。编码器的设计使其能够处理复杂的序列数据&#xff0c; 捕获序列内部的细粒度依赖关系。它通过一系列的层来实现&#xff0c; 每一层都包含自注意力机制、残差连接( Resid…

【三维重建】InstantSplat:稀疏视角的无SfM高斯泼溅 (3D Gaussian Splatting)

提示&#xff1a;关注B站【方矩实验室】&#xff0c;查看视频讲解 文章目录 1.摘要2.Introduction3.主要方法3.1 MVS&#xff08; DUSt 3R &#xff09;3.2 GS的初始化3.3 联合优化 4.实验5.总结 1.摘要 InstantSplat将多视图立体&#xff08;MVS&#xff09;预测与基于点的表示…

【计算机方向】五本中科院二区SCI神刊!最快3个月accept,国人发文友好,晋升靠它们!

本期将为您带来五本计算机SCI 妥妥毕业神刊&#xff01; VISUAL COMPUTER International Journal of Computer Vision INFORMATION AND SOFTWARE TECHNOLOGY Nonlinear Analysis-Hybrid Systems Complex & Intelligent Systems 期刊名称&#xff1a;VISUAL …

总结常见报错信息

一、报错内容 Circular view path [index]: would dispatch back to the current handler URL [/login/index] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.) 解决方法&#xff1a;把C…

复习之 JVM【类加载机制,内存模型,GC 】

裁员在家&#xff0c;没有面试机会&#xff0c;整理整理面试知识点吧&#xff01; JVM 全名 Java Virtual Machine&#xff08;Java虚拟机&#xff09; Java中的所有类&#xff0c;必须被装载到JVM中才能运行&#xff0c;这个装载工作是由jvm中的类装载器完成的&#xff0c;.…

如何一眼识破电子元器件缺陷?这台设备教你!

电子元器件外观缺陷检测设备是一种用于检测电子元器件外观缺陷的专业设备。随着电子元器件的广泛应用&#xff0c;对其质量和可靠性的要求也越来越高。而电子元器件外观缺陷是影响其性能和寿命的重要因素之一。因此&#xff0c;开发一种高效、准确的电子元器件外观缺陷检测设备…

Qt (6)【按钮类控件 | QPushButton | QCheckBox | QRadioButton | QToolButton】

阅读导航 引言一、按钮类控件概述&#xff08;继承关系&#xff09;二、QPushButton三、QRadioButton四、QCheckBox五、QToolButton 引言 在之前的文章中&#xff0c;我们聊到了Qt中QWidget的基础属性&#xff0c;它是构建所有GUI元素的基础。今天&#xff0c;我们要更进一步&…

低代码时代:重塑软件开发版图的机遇与挑战

低代码时代&#xff1a;重塑软件开发版图的机遇与挑战 在数字化转型的浪潮中&#xff0c;低代码&#xff08;Low-Code&#xff09;开发平台如同一股清新的风&#xff0c;迅速席卷了整个IT行业&#xff0c;以其“让非专业人士也能快速构建应用程序”的承诺&#xff0c;引发了广…

如何彻底清除硬盘数据不被恢复?保护隐私无忧

在数字时代&#xff0c;硬盘作为存储重要数据的主要设备&#xff0c;其安全性备受关注。当我们需要出售、赠送或报废电脑时&#xff0c;彻底清除硬盘上的数据以防止敏感信息泄露显得尤为重要。本文将详细介绍几种彻底清除硬盘数据且不可恢复的方法&#xff0c;帮助用户保护个人…

自制深度学习推理框架之计算图设计

文章目录 一、计算图1.1 计算图定义1.2 计算图的生成1.2.1 **静态计算图&#xff08;Static Computational Graph&#xff09;**1.2.2 **动态计算图&#xff08;Dynamic Computational Graph&#xff09;** 1.3 计算图功能1.3.1 训练阶段1.3.2 推理部署阶段 1.4 计算图的调度(执…

Datawhale X 魔搭 AI夏令营第四期-魔搭生图task3学习笔记

进入魔搭社区&#xff0c;找到我的Notebook选择对应运行环境 因为我是一天前登录的&#xff0c;所以需要重新使用相关账号重新登陆。大家可以根据自己的具体情况来登录&#xff0c;仅供参考 进入后&#xff0c;新建终端 在命令行输入如下命令下载安装ComfyUI的执行文件和task1中…

观察者模式(ObserverPattern)

文章目录 1.观察者模式定义2.UML类图3.实现代码 1.观察者模式定义 定义一种订阅机制&#xff0c; 可在对象事件发生时通知多个 “观察” 该对象的其他对象 如果你订阅了一份杂志或报纸&#xff0c; 那就不需要再去报摊查询新出版的刊物了。 出版社 &#xff08;即应用中的 “…

记录一个lombok和mybatisplus的问题,@Data注解失效

刚开始我这里一直爆红&#xff0c;Article实体类也加了Data注解 依赖也导入了lombok&#xff0c;后来觉得是版本的问题&#xff0c;换了几个版本也是不行 后来最后还是在各种资料下&#xff0c;找到了原因 首先使用lombok不是只要导入依赖就行的&#xff0c;还要有插件&#…

软件工程造价师习题练习 11

1.如果数据功能由被度量应用维护&#xff0c;则为一个EIF。 错误 正确 如果数据功能由被度量应用维护&#xff0c;则为一个ILF。如果数据功能由被度量应用引用但不维护&#xff0c;且其为其他应用的一个ILF&#xff0c;则为一个 EIF。 答案&#xff1a;错误 2.图书管理系统…

【傅里叶分析】复数基础知识

【傅里叶分析】复数基础知识 复数复数的几何意义与点的对应与向量的对应 复数与极坐标辐角与辐角主值三角函数 参考文献 本文参考了网上的其他文章&#xff0c;已在文末参考文献中列出&#xff1b;如有侵权&#xff0c;请联系我删除。 复变函数是傅里叶分析的基础&#xff0c;而…