0
点赞
收藏
分享

微信扫一扫

阿里云服务器搭建Splash负载均衡

邯唐情感 2022-02-06 阅读 46


阿里云服务器搭建Splash负载均衡


1. 安装Splash

2. Nginx安装

3. 配置负载均衡


一, 安装Splash(每台远程服务器)


在远程主机中执行以下命令

安装Docker

sudo apt install docker.io

安装scarpy-splash

docker run -p 8050:8050 scrapinghub/splash

 运行镜像

docker run -d -p 8050:8050 scrapinghub/splash

    注: 可见运行和安装的命令差不多  因为docker运行会检查是否有这个镜像如果没有就会pull一个下来,然后再运行;可以理解为没有该镜像的时候docker run就是下载  可是为什么后面运行要加-d呢,-d的意思是后台运行,这样就可以进行其他操作了

此时打开localhost:8050/127.0.0.1:8050

           阿里云服务器搭建Splash负载均衡_配置文件

            阿里云服务器搭建Splash负载均衡_nginx_02

架构在远程服务器(阿里云, 腾讯云等)上的同学一定要关注一下是否开放了对应的端口, 百度云就不用了, 它开着的



二, Nginx安装(选择一台) :被选中的那台下面称为 主服务器

    Nginx是一个高效能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器

    Nginx可以作为一个Web服务器进行网站的发布,也可以作为反向代理服务器进行负载均衡的实现

    常见的Web服务器:Tomcat,Apache,Nginx,Weblogic等

    高并发处理性能强 nginx.org

    Nginx特点: 占用内存少,并发能力强

搭建Nginx环境

选择一台远程服务器(或者先用本地的电脑进行实验)安装Nginx

Nginx的两种安装方式:

  1. 源代码安装:需要编译(./configure-->make-->make install)

  2. 在线安装:参考https://nginx.org/en/linux_packages.html

    *****推荐在线安装

安装完之后进入/etc/nginx

将原配置文件备份, 养成数据备份的习惯

添加后缀名.bak就可以完成备份

备份一份nginx.conf

cp nginx.conf nginx.bak

              阿里云服务器搭建Splash负载均衡_docker_03

再到conf.d中, 备份default.conf

cp default.conf default.conf.bak

安装就告一段落了

配置nginx.conf

主配置文件nginx.conf 包含三部分内容: 全局配置, 工作模式配置, HTTP配置

主配置文件nginx.conf内容详解:

#运行nginx用户
user nginx;
#工作进程的数量,可以根据cpu的核心总数来设置
worker_processes 1;

#错误日志文件的位置及输出级别(如 warn)
error_log /var/log/nginx/error.log warn;
#PID文件的位置 (进程号) 可以通过ps aux和netstat -ntpl查询
pid /var/run/nginx.pid;

#工作模式的配置
events {
#工作连接数, 每个进程最大处理的连接数
worker_connections 1024;
}

#HTTP配置
http {
#支持的媒体类型
include /etc/nginx/mime.types;
#默认的类型
default_type application/octet-stream;
#日志的格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

#访问日志文件的位置
access_log /var/log/nginx/access.log main;

#是否调用sedfile函数来输出函数
sendfile on;
#tcp_nopush on;

#连接超时时间 单位为秒s
keepalive_timeout 65;

#开启gzip压缩
#gzip on;

#引入外部配置文件,可以包含虚拟主机的配置
include /etc/nginx/conf.d/*.conf;
}


虚拟主机配置文件 /etc/nginx/conf.d/default.conf, 可以定义多个虚拟主机配置文件

server {
#监听的端口
listen 80;
#服务器域名
server_name localhost;

#网页的默认编码
#charset koi8-r;
#访问该虚拟主机的日志位置
#access_log /var/log/nginx/host.access.log main;

#根目录的配置
location / {
#网站根目录的配置
root /usr/share/nginx/html;
#默认首页
index index.html index.htm;
}
#错误的反馈页面
error_page 500 502 503 504 /50x.html;
#错误页面的配置
location = /50x.html {
root /usr/share/nginx/html;
}

}



三, 配置负载均衡

      如果我们用 Splash 来做 JavaScript 动态渲染的页面的抓取的话,如果爬取的量非常大,任务非常多,如果我们用一个 Splash 服务来处理的话未免压力太大了,所以我们可以考虑搭建一个负载均衡器来把压力分散到各个服务器上,这样相当于多台机器多个服务共同参与任务的处理,可以减小单个 Splash 服务的压力。

1. 配置Splash服务

    要搭建 Splash 负载均衡首先我们需要有多个 Splash 服务,假如在这里我在四台远程主机的 8050 端口上都开启了 Splash 服务,它们的服务地址分别为:41.159.27.223:8050、41.159.27.221:8050、41.159.27.9:8050、41.159.117.119:8050,四个服务完全一致,都是通过 Docker 的 Splash 镜像开启的,访问任何一个服务都可以使用 Splash 服务。

2. 配置负载均衡

对主服务器进行配置, 在conf.d下新建一个配置文件(splash.conf)

cp default.conf.bak splash.conf

编辑splash.conf  /  我这是默认的轮询策略, 其他的可以看看崔叔的书

upstream splash_server{
server xx.xx.xx.xx:8050;
server xx.xx.xx.xx:8050;
server xx.xx.xx.xx:8050;
server xx.xx.xx.xx:8050;
#server 127.0.0.1:8050;
}


server {
listen 80;
#server_name www.splash.com;

location / {
proxy_pass http://splash_server;
}
}

我在阿里云上搭建Nginx的splash.conf内容为

                                          阿里云服务器搭建Splash负载均衡_docker_04

若是在本地实验的时候可以加上注释掉的那几句,就可以在本地通过​​www.splash.com​​进行访问。

记得配置域名解析:更改/etc/hosts里的内容哟 添加下面的就ok(因你而异哦)

127.0.0.1     www.splash.com

            阿里云服务器搭建Splash负载均衡_docker_05

到这里就完成了配置,现在就可以利用 ​​http://httpbin.org/get​​ 来验收一下成果了

方法1.  在Ubuntu上用curl来检验 (因为在配置文件中我监听(listen)的是80端口)

curl http://www.splash.com/execute?lua_source=%0Afunction%20main%28splash%2Cargs%29%0A%20%20%20%20local%20treat%20%3D%20require%28%22treat%22%29%0A%20%20%20%20local%20response%20%3D%20splash%3Ahttp_get%28%22http%3A//httpbin.org/get%22%29%0A%20%20%20%20return%20treat.as_string%28response.body%29%0Aend%0A

方法2. python爬虫脚本

import requests
import re
from urllib.parse import quote

lua = '''
function main(splash, args)
local treat = require("treat")
local response = splash:http_get('http://httpbin.org/get')
return treat.as_string(response.body)
end
'''

for i in range(10):
url = 'http://www.splash.com/execute?lua_source=' + quote(lua)
response = requests.get(url)
ip = re.search('(\d+\.\d+\.\d+\.\d+)',response.text).group(1)
print(ip)


'''
xx.xxx.xxx.xxx
xxx.xx.xxx.xx
xx.xx.xx.xxx
...
'''

若是搭在远程服务器上,把上述的www.splash.com替换为主服务器的ip即可

                                                             阿里云服务器搭建Splash负载均衡_docker_06

到这里Splash负载均衡配置就结束了,欢迎提出建议和问题


附上卸载Nginx的命令 / 完全卸载Nginx命令

sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。

sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。

sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。

sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

Docker官网地址  https://www.docker.com/

Nginx官网地址  https://nginx.org/


举报

相关推荐

0 条评论