如何扩容openresty集群?

Openresty 以Nginx为基础结合Lua虚拟机、数据库驱动、库等组件,可实现应用层开发和Web服务,是一个Web开发及运行环境。Openresty有很多架构优化、可扩展性和安全性上的优势,越来越受到开发者的欢迎。

Openresty为了解决大并发量情况下服务器负载太大的情况,采用了集群框架。OpenResty集群在运行时需要将服务分布式部署在集群中,一个OpenResty集群包括一个或多个master节点(实际服务)和多个slave节点,它们可以彼此同步,负责备份、恢复、动态添加和移除服务等操作,从而达到负载均衡及容错等目的。

比如我们可以在现有的OpenResty集群中添加新的节点,以实现OpenResty集群的扩容。

首先,需要在OpenResty集群中添加新的机器,一般情况下,新机器的配置需要与主机(master节点)的配置一致,比如网络配置,.vimrc等,以保证新的服务节点与原来的服务器能够正常的对接和通信。

然后,在新服务器上部署OpenResty集群运行环境,进而构建出一个master-slave服务器体系。首先要在master节点上配置好集群环境变量,其次是安装依赖,最后就是将slave节点加入到master节点中。

比如我们可以使用Ansible自动化部署及管理OpenResty集群,在master节点上安装Ansible使得可以管理、调管slave节点,而slave节点可以被master节点中的Ansible发现和管理,自动实现集群的扩容。

最后,扩容完毕之后,我们可以重启OpenResty集群中的服务,使得扩容之后的集群环境能够正常的工作。在这个过程中,我们可以先重启master节点,然后重启slave节点, 确保重启过程中不产生网络中断等异常。

下面介绍一种实际操作步骤中使用到的Ansible示例代码:


---     
- hosts: '{{hosts}}'      
  vars:     
    - port: '{{port}}'
     
  tasks:      
    - name: check if open resty is running in "{{port}}"
      shell: nc -z -w 2 127.0.0.1 {{port}}     
      register: nc_check    
       
    - name: start open resty
      command: openresty -c /etc/openresty/openresty.conf      
  
      when: nc_check.stdout.find("openresty not running") != -1
      listen: '{{ip}}':{{port}}

以上代码中,hosts表示服务器地址列表,port表示服务端口号,ip表示IP地址,以上参数都可以自行设置,通过脚本实现了监听指定端口,如果openresty服务没有在指定端口运行,那么就会自动启动openresty服务。

在Operation过程中可能出现各种问题,即使用Ansible后也可能出现,这时,我们应做的是尽快定位到问题的来源,然后通过检查网络连接、log日志信息、checkpoint.sh或者agent.sh脚本等不同的方式进行排查,确定问题的来源。

此外,也可以借助多种工具来检查网络及服务器问题,比如使用netstat、nc、nginx、tcpdump等工具,确认当前系统是否有异常,可以使用nginx -t对配置文件进行检查,也可以使用nginx -V查看nginx服务相关的一些参数配置等,找出问题的根源。

随机文章