杂记2023-4-10
Posted 日 近 长 安 远
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杂记2023-4-10相关的知识,希望对你有一定的参考价值。
检测和干预keeperalived脑裂的脚本
#!/bin/bash
# 定义变量
VIP="192.168.1.100"
MASTER_IP="192.168.1.101"
BACKUP_IP="192.168.1.102"
INTERVAL=5
STATE_FILE="/var/run/keepalived.state"
# 检测VIP是否被当前节点占用
check_vip()
local ip=$(ifconfig eth0 | grep -E "inet addr:[0-9]+\\.[0-9]+\\.[0-9]+\\.[0-9]+" | awk 'print $2' | cut -d ':' -f 2)
if [[ "$ip" == "$VIP" ]]; then
return 0
else
return 1
fi
# 检测当前节点是否为主节点
check_master()
local state=$(cat $STATE_FILE)
if [[ "$state" == "MASTER" ]]; then
return 0
else
return 1
fi
# 检测当前节点是否为备份节点
check_backup()
local state=$(cat $STATE_FILE)
if [[ "$state" == "BACKUP" ]]; then
return 0
else
return 1
fi
# 检测主节点是否存活
check_master_alive()
ping -c 1 $MASTER_IP > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
return 0
else
return 1
fi
# 检测备份节点是否存活
check_backup_alive()
ping -c 1 $BACKUP_IP > /dev/null 2>&1
if [[ $? -eq 0 ]]; then
return 0
else
return 1
fi
# 切换VIP到当前节点
switch_to_me()
ifconfig eth0:0 $VIP netmask 255.255.255.255 broadcast $VIP
echo "MASTER" > $STATE_FILE
# 切换VIP到备份节点
switch_to_backup()
ifconfig eth0:0 down
echo "BACKUP" > $STATE_FILE
# 检测并干预脑裂
while true; do
if check_vip; then
if check_master; then
if ! check_master_alive; then
switch_to_backup
fi
elif check_backup; then
if check_master_alive; then
switch_to_me
fi
fi
else
switch_to_me
fi
sleep $INTERVAL
done
此脚本首先定义了一些必要的变量,例如VIP、主节点IP、备份节点IP、检测间隔等。然后,它定义了一些函数来检测当前节点的状态和其他节点的存活状态,并根据需要切换VIP。
在主循环中,脚本首先检查当前节点是否占用VIP。如果是,则检查当前节点是否为主节点。如果是,则检查主节点是否存活。如果主节点死亡,则切换VIP到备份节点。如果当前节点为备份节点,则检查主节点是否存活。如果主节点存活,则切换VIP到当前节点。如果当前节点未占用VIP,则切换VIP到当前节点。
通过这种方式,脚本可以检测和干预keeperalived脑裂,确保VIP始终被正确地分配到活动节点.
常见的HTTP状态码
1xx(信息性状态码):服务器收到请求,需要进一步处理才能完成请求。
- 100 Continue:服务器已经收到了请求头,并且客户端应该继续发送请求的请求体。
- 101 Switching Protocols:服务器已经理解了客户端的请求,并将通过Upgrade消息头通知客户端采用不同的协议来完成请求。
2xx(成功状态码):请求已成功处理。
- 200 OK:请求成功,服务器已经返回请求的内容。
- 201 Created:请求成功,服务器已经创建了新的资源。
- 204 No Content:请求成功,但服务器没有返回任何内容。
3xx(重定向状态码):请求需要进一步操作才能完成。
- 301 Moved Permanently:请求的资源已经永久移动到新的URL。
- 302 Found:请求的资源已经暂时移动到新的URL。
- 304 Not Modified:请求的资源没有被修改,可以直接从缓存中获取。
4xx(客户端错误状态码):请求包含语法错误或无法完成。
- 400 Bad Request:请求语法错误,服务器无法理解请求。
- 401 Unauthorized:请求需要用户验证。
- 403 Forbidden:请求被服务器拒绝。
- 404 Not Found:请求的资源不存在。
5xx(服务器错误状态码):服务器无法完成请求。
- 500 Internal Server Error:服务器遇到了意料不到的情况,无法完成请求。
- 502 Bad Gateway:服务器作为网关或代理,从上游服务器接收到无效的响应。
- 503 Service Unavailable:服务器暂时无法处理请求,可能是过载或维护中。
- 504 Gateway Timeout:服务器作为网关或代理,从上游服务器接收到超时响应。
session和cookie有什么区别?
Session和Cookie是Web应用程序中常用的两种技术,它们可以用于在客户端和服务器之间传递信息。下面是它们的区别:
-
存储位置不同:Cookie保存在客户端,而Session保存在服务器端。
-
安全性不同:由于Cookie保存在客户端,所以存在安全隐患。Cookie可以被篡改、伪造、窃取等,而Session则保存在服务器端,相对更加安全。
-
存储容量不同:Cookie的存储容量有限制,一般为4KB左右,而Session的存储容量相对较大,可以存储更多的数据。
-
生命周期不同:Cookie可以设置过期时间,可以长期保存在客户端,而Session的生命周期由服务器控制,一般在用户关闭浏览器或一段时间不活动后自动销毁。
-
作用不同:Cookie主要用于客户端的状态管理,如记住用户名、密码等;而Session主要用于服务器端的状态管理,如用户登录状态、购物车信息等。
总之,Session和Cookie各有优缺点,具体应用要根据实际情况选择。
nginx的四层和七层负载均衡
nginx的四层负载均衡是基于传输层(TCP/UDP)的负载均衡,可以根据IP地址和端口号进行负载均衡,但不能对应用层协议进行深度解析。四层负载均衡主要用于分发网络流量,可以提高系统的吞吐量和可靠性。
nginx的七层负载均衡是基于应用层的负载均衡,可以对HTTP、HTTPS、SMTP等应用层协议进行深度解析,根据协议的特性进行负载均衡。七层负载均衡能够更加精细地控制请求的分发,可以根据请求的内容、用户的IP地址、请求的来源等进行负载均衡。七层负载均衡主要用于分发Web请求,可以提高Web应用的性能和可靠性。
paramiko库、pyyaml、jinja
paramiko库是一个Python实现的SSH协议客户端,可以用来连接和远程管理Linux服务器。它提供了SSH客户端和服务器的实现,支持SSH协议的各种功能,如远程执行命令、传输文件、端口转发等。通过paramiko库,我们可以在Python中编写脚本来管理远程服务器,实现自动化运维。
PyYAML是Python语言的一个YAML解析器和生成器,用于读取和写入YAML格式的数据。YAML是一种人类可读的数据序列化格式,常用于配置文件、数据交换格式和存储数据等场景。PyYAML可以将YAML格式的数据转换为Python对象,也可以将Python对象转换为YAML格式的数据。它具有简单易用、可扩展性强、支持Unicode等特点,被广泛应用于Python项目的配置文件和数据交换等方面。
Jinja是一个Python模板引擎,它可以将数据和html、XML等文本混合在一起,生成动态的文本内容。它的主要用途是生成Web应用程序的HTML页面,但也可以用于生成其他文本格式,如电子邮件、文档等。Jinja的主要功能包括变量替换、条件语句、循环语句、宏定义等,使得模板设计更加灵活。Jinja还支持模板继承、过滤器、自定义标签等高级功能,可以帮助开发者更快速、更方便地构建Web应用程序。
ssh-copy-id -i
ssh-copy-id
命令会将公钥添加到远程主机的authorized_keys
文件中,如果该文件不存在,则会创建一个新的。如果该文件已经存在,则会将公钥添加到文件的末尾,不会覆盖原有的内容。因此,使用ssh-copy-id -i
命令不会覆盖原有的内容。
exportsfs
exportsfs命令用于将文件系统导出为NFS共享,而exportsfs -av命令用于将所有已经导出的NFS共享重新导出一遍。
具体来说,exportsfs命令可以用以下方式导出一个文件系统:
exportsfs /mnt/share
而exportsfs -av命令会重新导出所有已经导出的共享:
exportsfs -av
这个命令会读取/etc/exports文件中的所有共享,并重新导出它们。这个命令通常用于在修改了/etc/exports文件后,重新导出所有共享以使更改生效。
总之,exportsfs命令用于单独导出一个共享,而exportsfs -av命令用于重新导出所有已经导出的共享。
linux内核五大子系统
- 进程管理子系统:负责进程的创建、调度、管理和撤销等操作。
- 文件系统子系统:负责文件系统的管理和访问,包括文件的读、写、创建、删除等操作。
- 网络子系统:负责网络通信相关的操作,包括网络协议栈的实现、网络设备的管理和驱动等。
- 内存管理子系统:负责内存的分配、回收、管理和保护,包括虚拟内存管理和页式管理等。
- 设备驱动子系统:负责设备的管理和驱动,包括输入设备、输出设备、存储设备、网络设备等。
异地多活
异地多活是一种分布式系统的架构设计,指将同一个系统部署在不同的地理位置的多个数据中心中,每个数据中心都可以独立地提供服务,同时也可以相互协同,使得整个系统具有更高的可用性和容错性。这种架构设计可以避免单点故障,降低系统故障的影响范围,提高系统的可靠性和性能。常见的异地多活应用包括云计算、电子商务、金融交易等领域。
python杂记
- python命名规范:
- 类名:驼峰命名
- 函数和方法名:小写_和_下划线
- 判断数据data的编码方法:
- type(data) == unicode
- json文件中可以使用字典和列表。字典转json串:dump/dumps;json串转字典:load/loads(带有s就是和字符串沾边,不带s和文件对象沾边)
- 获取环境变量:
1 >>>import os 2 >>>os.environ #获取所有环境变量 3 >>>os.environ.get(“dade”) #获取环境变量”dade”的值
- 字典的get操作:
- print info[‘id‘] # 通过key取值
- print info.get(‘id‘) # 通过key取值
用中括号取值和get方法取值的区别 ,get方法获取不到key的时候不会报错,中括号取值找不到key会报错,所以get方法更常用。get方法还可以多传一个参数,如果get不到key的话,那么返回这个参数值。如果不写的话,默认get不到返回None。
- print all.keys() #获取该字典的所有key。将返回一个字典中所有关键字组成的无序列表(如果想要排序,只需使用sorted(all.keys()))。使用 in 关键字,可以检查字典中是否存在某个关键字
- print all.values() #获取该字典所有的value
- print all.items() #获取字典的key和value,循环的时候用
-
assertEqual(self, excepted, observed, message=’’)
excepted:期望值;observed:实际值;如果excepted和observed相等,则通过;msg为失败时打印的信息
- 模块的模块名:通过全局变量 __name__ 得到
- 内置函数 dir(模块名) 用于按模块名搜索模块定义,它返回一个字符串类型的存储列表
- .format() 基本用法
1. 基本用法:
1 >>> print "wr are the {} who say {}!".format("knights","Ni") 2 wr are the knights who say Ni!
2. 大括号和其中的字符会被替换成传入 str.format() 的参数。大括号中的数值指明对象中的哪一个:
1 >>> print "{0} and {1}".format(‘span‘,‘eggs‘) 2 span and eggs 3 >>> 4 >>> print "{1} and {0}".format(‘span‘,‘eggs‘) 5 eggs and span
3. 也可以通过参数名来引用值:
1 >>> print "This {food} is {adjective}.".format(food="spam",adjective="absolutely horrible") 2 This spam is absolutely horrible.
4. 位置参数和关键字参数可以随意组合:
1 >>> print "The story of {0}, {1}, and {other}.".format("Bill","Manfred",other="Georg") 2 The story of Bill, Manfred, and Georg.
- pip
- pip show:将会显示一个指定的包的信息 (例如:pip show requests)
- pip list:将会列出所有安装在虚拟环境的包(例如:pip list)
以上是关于杂记2023-4-10的主要内容,如果未能解决你的问题,请参考以下文章