> 文章列表 > 杂记2023-4-10

杂记2023-4-10

杂记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" ]]; thenreturn 0elsereturn 1fi
}# 检测当前节点是否为主节点
check_master() {local state=$(cat $STATE_FILE)if [[ "$state" == "MASTER" ]]; thenreturn 0elsereturn 1fi
}# 检测当前节点是否为备份节点
check_backup() {local state=$(cat $STATE_FILE)if [[ "$state" == "BACKUP" ]]; thenreturn 0elsereturn 1fi
}# 检测主节点是否存活
check_master_alive() {ping -c 1 $MASTER_IP > /dev/null 2>&1if [[ $? -eq 0 ]]; thenreturn 0elsereturn 1fi
}# 检测备份节点是否存活
check_backup_alive() {ping -c 1 $BACKUP_IP > /dev/null 2>&1if [[ $? -eq 0 ]]; thenreturn 0elsereturn 1fi
}# 切换VIP到当前节点
switch_to_me() {ifconfig eth0:0 $VIP netmask 255.255.255.255 broadcast $VIPecho "MASTER" > $STATE_FILE
}# 切换VIP到备份节点
switch_to_backup() {ifconfig eth0:0 downecho "BACKUP" > $STATE_FILE
}# 检测并干预脑裂
while true; doif check_vip; thenif check_master; thenif ! check_master_alive; thenswitch_to_backupfielif check_backup; thenif check_master_alive; thenswitch_to_mefifielseswitch_to_mefisleep $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应用程序中常用的两种技术,它们可以用于在客户端和服务器之间传递信息。下面是它们的区别:

  1. 存储位置不同:Cookie保存在客户端,而Session保存在服务器端。

  2. 安全性不同:由于Cookie保存在客户端,所以存在安全隐患。Cookie可以被篡改、伪造、窃取等,而Session则保存在服务器端,相对更加安全。

  3. 存储容量不同:Cookie的存储容量有限制,一般为4KB左右,而Session的存储容量相对较大,可以存储更多的数据。

  4. 生命周期不同:Cookie可以设置过期时间,可以长期保存在客户端,而Session的生命周期由服务器控制,一般在用户关闭浏览器或一段时间不活动后自动销毁。

  5. 作用不同: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内核五大子系统

  1. 进程管理子系统:负责进程的创建、调度、管理和撤销等操作。
  2. 文件系统子系统:负责文件系统的管理和访问,包括文件的读、写、创建、删除等操作。
  3. 网络子系统:负责网络通信相关的操作,包括网络协议栈的实现、网络设备的管理和驱动等。
  4. 内存管理子系统:负责内存的分配、回收、管理和保护,包括虚拟内存管理和页式管理等。
  5. 设备驱动子系统:负责设备的管理和驱动,包括输入设备、输出设备、存储设备、网络设备等。

异地多活

异地多活是一种分布式系统的架构设计,指将同一个系统部署在不同的地理位置的多个数据中心中,每个数据中心都可以独立地提供服务,同时也可以相互协同,使得整个系统具有更高的可用性和容错性。这种架构设计可以避免单点故障,降低系统故障的影响范围,提高系统的可靠性和性能。常见的异地多活应用包括云计算、电子商务、金融交易等地方。