Ansible playbook 使用介绍
环境信息
- Centos 7
- ansible 2.9.27
Playbook 语法示例
ansible playbook 使用的是 YAML 格式的语法。
--- |
playbook 由一个或多个 play
组成。它的内容是一个以 play
为元素的列表。以上示例仅包含一个 play
ansible playbook 使用的是 YAML 格式的语法。
--- |
playbook 由一个或多个 play
组成。它的内容是一个以 play
为元素的列表。以上示例仅包含一个 play
在需要免密码登陆的场景下,可以配置 ssh 密钥登陆。配置步骤如下
$ ssh-keygen |
/home/testuser/.ssh/id_rsa.pub
和 /home/testuser/.ssh/id_rsa
中。/home/testuser/.ssh/authorized_keys
。或者手动拷贝公钥追加到目标主机的 .ssh/authorized_keys
$ ssh-copy-id -p 30000 testuser@172.31.30.115 |
如果要配置双向免密,将以上步骤反过来操作一遍即可
登录服务器,经常遇见以下提示信息,说明有主机一直在尝试暴力破解用户名密码
There were 696 failed login attempts since the last successful login. |
查看登录失败的用户名和 ip 地址
$ grep "Failed password for invalid user " /var/log/secure | awk '{print $11,$13}' | sort | uniq -c | sort -k1 -n |
开始使用 Django 时,需要初始化配置,执行以下命令生成初始化的工程环境 [1]
django-admin startproject mysite |
创建 Project 成功后,会生成以 Project 命名的根目录(此处为 mysite
),根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。以下为目录结构 [1]
mysite/ |
其中:
mysite/mysite/settings.py
为项目配置文件,包括配置 app,数据库等。创建 App
python manage.py startapp myapp |
创建 app 后,会在项目根目录下生成 app 命名的目录。创建 app 后,需要将 app 添加到项目配置文件 settings.py
中的 INSTALLED_APPS
settings.py
常用配置说明ALLOWED_HOSTS = ['*'] |
访问控制,默认只允许从本地访问 Django Server,如果需要远程访问,需要配置远程主机地址,*
可以配置允许任一客户端访问。
要为项目配置使用 Mysql 数据库,可以使用以下配置。
DATABASES = { |
LANGUAGE_CODE = 'zh-hans' |
TIME_ZONE = 'Asia/Shanghai' |
如果需要限制只有登陆的用户才能访问 url。可以在视图函数中使用 login_required
装饰器
from django.shortcuts import render |
使用了 login_required
装饰器后,未登录的用户会跳转到登陆页面,要配置登陆页面使用 Django Admin 的登陆 url,需要在 settings.py
中添加以下配置
LOGIN_URL = 'admin:login' |
要配置登陆用户在指定时间内未操作(发送 url 请求)后自动注销,使用以下配置
# 设置会话的过期时间为10分钟(以秒为单位) |
python manage.py makemigrations |
urls.py
文件中配置以下内容 from django.contrib import admin |
/
时,重定向到管理后台,可以在项目的 views.py
文件中添加以下内容,将 /
重定向到 /admin/
from django.shortcuts import redirect |
scores = {'语文': 89} |
clear()
用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典
update()
方法可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update()
方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去;原来的 dict
中存在(更新中不存在)的 key-value 保持不变。
update()
方法也可以用于合并字典,如果 key 重复,会使用新字典中的值替换原来的字典中的值。更新操作不返回任何值,返回结果为 None
dict1 = {'a': 1, 'b': 2} |
要将多个字典的键值合并到一个新的字典中,可以使用字典的解包方式。如果字典中有重复的 key,最终的值为最后的字典中的值
query = {'name': 'd'} |
在 Cloudflare 中,配置的规则 (比如 自动 HTPTPS 重写
功能) 对所有使用了 Cloudflare 加速的域名都生效。
此时假如有 2 个二级域名 d1.abc.com
和 d2.abc.com
,都启用了 Cloudflare 加速功能,此时开启 自动 HTPTPS 重写
功能,则使用 HTTP 协议访问,都会被重定向到 HTTPS。假如域名 d2.abc.com
不想进行 HTTPS 重定向,即使用 HTTP 访问 d2.abc.com
不重定向到 https://d2.abc.com
。要实现此功能,参考以下步骤
SSL/TLS
–> 边缘证书
中 开启 自动 HTPTPS 重写
功能,关闭 始终使用 HTTPS
功能自动 HTPTPS 重写
中配置规则,参考下图,定义规则名称,选择 自定义筛选表达式
,在表达式中配置筛选条件匹配 d2.abc.com
,在下面的设置中 关闭 自动 HTPTPS 重写
功能通过以上配置即可实现,同一个域名的不同子域名有不同的重定向规则。其他类似需求也可参考此思路配置
request.method
: 返回当前请求的 HTTP 方法(GET、POST、PUT、DELETE 等)。
request.path
: 返回请求的路径部分(不包括域名和查询参数)。
request.GET
: 包含所有 GET 请求参数的字典。
request.GET.get('param_name')
: 用于从 GET 请求中获取指定参数的值。
request.POST
: 包含所有 POST 请求参数的字典。
request.POST.get('param_name')
: 用于从 POST 请求中获取指定参数的值。
request.FILES
: 包含所有上传文件的字典。
request.COOKIES
: 包含所有请求的 Cookie 的字典。
request.session
: 一个表示当前会话的对象,可以用于访问和存储会话数据。
request.user
: 表示当前登录用户的对象。
request.body
: 访问请求的主体内容(即请求的正文部分)。主体内容通常用于传输 POST 或 PUT 请求中的数据,如表单数据、JSON 数据等。
request.META
: 包含有关请求的所有元数据的字典,如请求的 IP 地址、浏览器信息等。
request.is_secure()
: 返回一个布尔值,表示请求是否通过 HTTPS。
request.is_ajax()
: 返回一个布尔值,表示请求是否为 AJAX 请求。
request.get_full_path()
: 返回包含完整路径和查询参数的字符串。
request.build_absolute_uri()
: 根据当前请求构建完整的绝对 URL。
request.get_host()
: 返回请求的主机部分。
request.get_port()
: 返回请求的端口号。
request.get_raw_uri()
: 返回原始的请求 URI。
request.get_signed_cookie()
: 用于获取已签名的 Cookie 值。
request.get_host()
: 返回请求的主机部分。
编辑 docker daemon 配置文件 /etc/docker/daemon.json
(若不存在则新建),添加以下内容,用来配置 docker containers 的日志轮转
{ |
重启 docker 服务生效
systemctl restart docker |
根据以上配置,当容器日志大小达到 100m
,即对其进行 rotate,并保留最多 3 个日志文件。
Linux 系统中有专门用来做日志 rotate 的 服务 logrotate
,可直接使用此服务做 log rotate
配置针对 docker 的 logrotate
配置
/var/lib/docker/containers/*/*.log { |
使用 copytruncate
的方式做日志 totate 时,会先拷贝日志文件为 totate 日志文件,然后 truncate
日志,确保 totate 过程中,日志文件不变并一直保持打开状态。
在 Django 4.1 中,使用静态文件的方法与之前的版本相同。以下是使用静态文件的步骤:
在 settings.py
中设置静态文件目录:
STATIC_URL = '/static/' |
STATIC_URL
是静态文件 URL 的前缀。STATICFILES_DIRS
是一个列表,其中包含要在其中查找静态文件的目录。在 HTML 文件中使用静态文件
{% load static %} |
在上面的示例中,我们使用了 Django 模板语言的 {% static %}
标记来引用静态文件。{% load static %}
指令必须在使用 {% static %}
标记之前加载,以确保 Django 能够正确解析它们。
运行 collectstatic
命令:
当您准备部署您的 Django 应用程序时,您需要将静态文件收集到一个单独的目录中,以便可以轻松地在生产服务器上提供它们。您可以使用 Django 的 collectstatic
命令来完成此操作。在命令行中运行以下命令:
python manage.py collectstatic |
Django 将在 STATIC_ROOT
目录中创建一个新的静态文件目录,并将您的静态文件从 STATICFILES_DIRS
中指定的目录复制到该目录中。您可以在 settings.py
文件中设置 STATIC_ROOT
目录的路径
用来从父 block 中继承选项
{% load static %} |
假设有两个 HTML 文件:header.html
和 content.html
。header.html
包含页面的头部内容。
<!-- header.html --> |
content.html
包含页面的主要内容。
<!-- content.html --> |
现在,可以在另一个 HTML 文件中使用 {% include %}
标签来包含这些内容。
<!-- main_template.html --> |
在这个示例中,{% include 'header.html' %}
和 {% include 'content.html' %}
标签会将相应的模板文件的内容包含在 main_template.html
中。这样,就可以在一个模板中包含另一个模板的内容了。
在模板中不推荐使用 url 硬编码,建议使用 url 反向解析功能,在 urls.py
中定义 url 时,给 url 命名,在模板中 可以使用反向解析使用 url,避免使用 url 硬编码。需要在 urls.py
中配置 app_name = 'polls'
,否则会因为 namespace 不清楚而报错:'polls' is not a registered namespace
from django.urls import path |
以上事例中,name='index'
为 url 命名,在模板中通过以下方式使用 url 名称 [1]
<a href="{% url 'polls:index' %}">首页</a> |
使用 Django 模板语法加载 index.html
中的静态文件后,有个 app.css
文件请求 404,Console 中报错: because its MIME type ('text/html') is not a supported stylesheet MIME type
问题原因 在 Modular Admin 代码中搜索 app.css
,除了 index.html
引用了此文件,js/app.js
也引用了此文件。在 Django 中使用次模板,需要修改此处的路径正确。
要在页面中让菜单处于展开状态,需要给菜单应用 active open
的 class
<li> |
在 Kibana 中,一个 space 相当于一个新的的 Kibana 实例,它分割了 Kibana 中的资源,使它和其他 space 隔离。 [3]
Kibana 默认的 Space 为 Default
Roles
是一个权限集,可以将 Roles 分配给 users、*system accounts
*。可以自定义 roles,或者使用系统内置的 roles。以下是一些常用的 built-in roles
kibana_admin
- 超级管理员组,绑定到这个组的用户对 Kibana 拥有完全权限,包括管理 Spacesuser 可以绑定到一个或者多个 roles,
space 不能隔离 role
和 user
,这属于 Elasticsearch 的安全功能,role
和 user
对整个 Kibana 实例都可见,不与特定的 space 关联。也不能隔离 index,因为这是 Elasticsearch 中的资源
space 隔离以下资源:
data view
- 不同 space 中的 data view
互不可见。内置 role:
view
- 此角色拥有对所有 Kibana space 的 只读权限。如果想要创建对 Kibana 所有 space 拥有只读权限的用户,只需要将用户绑定到此角色即可。Kibana 内置的 view
角色拥有对所有 Kibana space 的 只读权限。如果想要创建 对 Kibana 所有 space 拥有只读权限 的用户,只需要将用户绑定到此角色即可。
如果需要创建对特定 space 拥有只读权限的用户,可以参考以下步骤:
ops
space 拥有只读权限的 roleDiscover 中默认最多显示 500 条文档,如果 Elasticsearch 中索引的文档数量超过500,默认不显示,也无法通过 Kibana 搜索到。要修改此值,参考以下步骤
Options
按钮,点击弹出的 View Discover settings
Space Settings
中,找到选项 Maximum rows per table
,起默认值为 500
,修改此值KQL(Kibana Query Language)是 Kibana 中用于进行查询的查询语言。KQL 可以帮助用户在 Kibana 的 “Discover”(发现)页面、”Visualize”(可视化)页面以及 “Dashboard”(仪表盘)页面等地方快速构建查询,并过滤和分析数据。
Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是 集群健康 , 它在 status
字段中展示为 green
、 yellow
或者 red
。
green
- 所有的主分片和副分片都正常运行yellow
- 所有主分片都正常运行,但不是所有的副本分片都正常运行red
- 有主分片没能正常运行$ curl 'http://localhost:9200/_cluster/health' |
使用 _cat/nodes
API 可以获取集群中所有节点的信息,包括它们的 IP 地址、堆内存使用情况、CPU 使用情况等。
# curl -u elastic:XhScf5Jqw -XGET 'http://172.31.25.229:9200/_cat/nodes?pretty' |
输出信息说明
heap.percent
- JVM 堆内存使用的百分比。这是节点分配给 Java 虚拟机堆的内存使用量的百分比。ram.percent
- 节点的物理内存(RAM)使用率的百分比cpu
- 节点的CPU使用率百分比node.role
- 节点的角色。各个字母含义如下d
- 代表数据节点 Data Node。负责存储数据,执行与数据相关的操作,如 CRUD(创建、读取、更新、删除)、搜索和聚合。i
- 代表摄取节点 Ingest Node。用于预处理文档,然后再将其索引到 Elasticsearch 中,它们可以运行摄取管道,这些管道可以执行各种转换,如提取数据、转换数据格式、添加信息等。l
- 代表机器学习节点 Machine Learning Node。机器学习节点专门用于运行Elasticsearch的机器学习功能,它们可以分析数据,识别模式,执行异常检测等。m
- 代表主节点 Master Node。主节点负责管理集群的全局状态,例如哪些索引存在,哪个节点是哪个索引的一部分等,它们还负责集群重新分片、索引创建、删除等操作。r
- 代表远程集群客户端节点 Remote Cluster Client Node。这些节点用于连接到远程集群,它们使得可以从一个集群中执行跨集群搜索和其他操作t
- 代表转换节点 Transform Node。转换节点用于运行 Elasticsearch 中的转换任务,这些任务可以将现有的 Elasticsearch 索引数据重新整理和汇总成新的索引。*
- 表示这个节点是当前的主节点。使用 _nodes/stats
查看集群中所有节点的详细状态和统计信息
# curl -u elastic:XhScf5JqwVsSQwHe -XGET 'http://172.31.25.229:9200/_nodes/stats?pretty' |
参考以下命令查看指定节点的详细状态和统计信息,Endpoint 格式参考 _nodes/{nodeId}/stats?pretty
# curl -u elastic:XhScf5JqwVsSQwHe -XGET 'http://172.31.25.229:9200/_nodes/TrQqg_8HTDiKBt6t8Z1JVw/stats?pretty' |
/?pretty
参数的主要作用为通过添加缩进和换行增强输出的可读性
$ curl 'http://localhost:9200/?pretty' |
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.8.2-linux-x86_64.tar.gz |
启动
./bin/elasticsearch |
首次启动 Elasitcsearch 时,安全特性默认被启用,以下的安全选项会自动配置: [2]
elastic
产生一个密码enrollment key
,有效期 30 分钟要以 daemon
的形式运行 Elasticsearch,使用 -d
选项,使用 -p
选项将 PID 记录到一个文件里面
./bin/elasticsearch -d -p pid |
RPM 安装 Elasticsearch 官方参考文档。不同版本具有不同的配置,根据版本选择对应配置
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch |
配置文件示例
cluster.name: es-cluster1 |
默认情况下,只有同一个主机上的节点才能在 没有其他配置的情况下 加入到集群。如果要让另一个主机上的节点加入到新启动的节点的集群中,需要更改配置,首先要修改 Elasticsearch 的监听地址,确保另一台主机能连接它(不是默认监听的 localhost
) [2]
要将新节点加入到开启了安全功能的集群,首先要创建一个 enrollment token
。在集群中的任一节点上执行以下命令,创建 enrollment token
bin/elasticsearch-create-enrollment-token -s node |
在要加入集群的节点上,使用以下命令启动 Elasticsearch,使用 --enrollment-token
传递 enrollment token
bin/elasticsearch --enrollment-token <enrollment-token> |
新节点上的 Elasticsearch 会自动在 config/certs
下面生成证书和 Key
在启用安全配置(xpack.security.enabled: true
)的情况下,Elasticsearch 集群节点间通信(transport
默认端口 9300)必须使用 TLS (xpack.security.transport.ssl.enabled: true
)。默认使用的证书文件位于 /etc/elasticsearch/certs/
。若需要更新或者重新生成此证书,可以参考以下步骤
/usr/share/elasticsearch/elastic-stack-ca.p12
。根据提示使用 证书密码,如果不配置密码,使直接Enter
键 elasticsearch-certutil ca |
Enter
键。默认生成文件 /usr/share/elasticsearch/elastic-certificates.p12
elasticsearch-certutil cert --ca elastic-stack-ca.p12 |
/etc/elasticsearch/elasticsearch.keystore
# elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password |
/etc/elasticsearch/certs/
下,并修改权限 chmod 660 /etc/elasticsearch/certs/* |
systemctl restart elasticsearch |
# curl --user newadmin:password localhost:9200/_cluster/health?pretty |
可以使用以下命令,创建新的超级管理员账号。首先要 确保集群状态正常
elasticsearch-users useradd newadmin -p password -r superuser |
接下来使用刚刚创建的账号密码对原有的账号(如 elastic
) 进行密码重置
# curl -s --user newadmin:password -XPUT "http://localhost:9200/_security/user/elastic/_password?pretty" -H 'Content-Type: application/json' -d '{ |
密码重置成功后,尝试使用新账号密码访问集群
# curl --user elastic:password1 localhost:9200/_cluster/health?pretty |
报错信息: 登录时报错 530 Login incorrect
错误原因:
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed |
默认情况下,/etc/vsftpd/ftpusers里面的用户是被拒绝登录的,确保要登录的用户不在此文件中
auth required pam_shells.so |
此配置指定,只允许登录shell为/etc/shells
中的shell的用户登录
如果用户shell为/sbin/nologin
,则不允许登录,可改为pam_nologin.so
环境信息
安装
下载地址, clone或下载最新的版本或指定版本下载后解压
yum install libstdc++-static -y |
需要依赖
libstdc++-static
, 否则make会报错:
/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make[1]: *** [predixy] Error 1
make[1]: Leaving directory `/root/predixy-1.0.5/src’
make: *** [default] Error 2
配置文件说明
predixy.conf,整体配置文件,会引用下面的配置文件
cluster.conf,用于Redis Cluster时,配置后端redis信息
sentinel.conf,用于Redis Sentinel时,配置后端redis信息
auth.conf,访问权限控制配置,可以定义多个验证密码,可每个密码指定读、写、管理权限,以及定义可访问的健空间
dc.conf,多数据中心支持,可以定义读写分离规则,读流量权重分配
latency.conf, 延迟监控规则定义,可以指定需要监控的命令以及延时时间间隔
启动
predixy /predixy/conf/predixy.conf |
使用默认的配置文件predixy.conf, predixy将监听地址0.0.0.0:7617,后端的redis是Redis Cluster 127.0.0.1:6379