nginx负载均衡根据特殊标识分配轮询服务器脚本

用于实现nginx负载均衡分配时特殊标识的轮询脚本:

#!/bin/bash

# 定义nginx的upstream配置文件路径
UPSTREAM_CONF_PATH=/etc/nginx/conf.d/upstream.conf

# 读取特殊标识
while getopts "t:" opt; do
  case $opt in
    t)
      TAG=$OPTARG
      ;;
    \?)
      echo "Invalid option: -$OPTARG" >&2
      exit 1
      ;;
  esac
done

# 根据标识从upstream配置文件中获取对应的upstream服务器列表
SERVERS=$(grep -oP "(?<=zone $TAG )[^\{\}\s]+" $UPSTREAM_CONF_PATH)

# 将服务器列表转换为数组
IFS=' ' read -ra SERVERS_ARR <<< "$SERVERS"

# 轮询选出一个服务器
CURRENT_INDEX_FILE=/var/run/nginx-lb-${TAG}.idx
if [ ! -f $CURRENT_INDEX_FILE ]; then
    echo 0 > $CURRENT_INDEX_FILE
fi
CURRENT_INDEX=$(cat $CURRENT_INDEX_FILE)
if [ $CURRENT_INDEX -ge ${
    
    #SERVERS_ARR[@]} ]; then
    CURRENT_INDEX=0
fi
echo $((CURRENT_INDEX+1)) > $CURRENT_INDEX_FILE
echo ${SERVERS_ARR[CURRENT_INDEX]}

该脚本需要传入一个参数 -t,用于指定特殊标识。例如,如果我们用 example.com 作为特殊标识,则执行以下命令来调用该脚本:

./nginx-lb.sh -t example.com

该脚本会从nginx的upstream配置文件 /etc/nginx/conf.d/upstream.conf 中读取名为 example.com 的upstream定义,并从中获取服务器列表。然后,它会使用一个简单的轮询算法,将服务器列表中的服务器依次选出来。该脚本会在 /var/run/nginx-lb-${TAG}.idx 文件中记录当前的选中服务器下标,以实现轮询的连续性。

猜你喜欢

转载自blog.csdn.net/Climbman/article/details/131029188