云服务器 集群 弹性伸缩 微信接口 ip白名单

为节约成本,我们可以使用云服务器的弹性伸缩服务,平时维持一个比较低配置的服务器,设置好弹性伸缩,当流量大起来时候,自动伸缩一些云主机加入负载均衡的集群

遇到问题

微信早期使用上述方法没有问题,但是现在的微信默对公众号默认开启了ip白名单,难以这样简单的“弹性伸缩”,因为每个主机的ip是不一样的,目前没有一种方法可以把动态产生的ip放入微信后台
针对云服务器,给出以下方法

解决方法

  1. 配置私有网络
    使用vpc私有网络,将动态生成的服务器都加入到vpc中去,走共同的出口,以保证微信的ip白名单通过

    • 新建私有网络
    • 新建网关子网
    • 新建内部子网
    • 新建网关路由表
    • 新建内部路由表

以上步骤中,网关不能和内网在同一网段,将内网路由表设置0.0.0.0/0到你的网关主机既可
弹性伸缩主机放在“内部子网”中

  1. 配置网关
    首先,安装iptables
    其次,执行

    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
    
    echo "echo 1048576 > /proc/sys/net/netfilter/nf_conntrack_max" >> /etc/rc.local
    echo "echo 262144 > /sys/module/nf_conntrack/parameters/hashsize" >> /etc/rc.local
    
    echo "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE" >> /etc/rc.local
    
    echo "iptables -t mangle -A POSTROUTING -p tcp -j TCPOPTSTRIP --strip-options timestamp" >> /etc/rc.local

    在/usr/local/sbin/目录下新建脚本set_rps.sh,将以下代码写入脚本中:

    #!/bin/bash
    mask=0
    i=0
    cpu_nums=`cat /proc/cpuinfo |grep processor |wc -l`
    if(($cpu_nums==0));then
     exit 0
    fi
    
    nic_queues=`cat /proc/interrupts |grep -i virtio0-input |wc -l`
    if(($nic_queues==0));then
     exit 0
    fi
    
    echo "cpu number" $cpu_nums "nic queues" $nic_queues
    
    mask=$(echo "obase=16;2^$cpu_nums - 1" |bc)
    flow_entries=$(echo "$nic_queues * 4096" |bc)
    
    echo "mask = "$mask
    echo "flow_entries = "$flow_entries
    
    #for i in {0..$nic_queues}
    while (($i < $nic_queues))  
    do
     echo $mask > /sys/class/net/eth0/queues/rx-$i/rps_cpus
     echo 4096 > /sys/class/net/eth0/queues/rx-$i/rps_flow_cnt
     i=$(($i+1)) 
    done
    
    echo $flow_entries > /proc/sys/net/core/rps_sock_flow_entries

    然后执行

    chmod +x /usr/local/sbin/set_rps.sh
    echo "/usr/local/sbin/set_rps.sh" >> /etc/rc.local

    参考资料
    https://cloud.tencent.com/document/product/215/2238

相关文章

此处评论已关闭