部署公司生产环境的 Splash 集群无奈节点太多 差点被搞死·· 还好我有运维神器 Ansible,一次编撰终生可用啊!而且这玩意儿 等幂特性 扩容回滚 So Easy!! 闲话少说开搞!
安装 Ansible:
看官方文档去:http://www.ansible.com.cn/index.html 好像这个主控端不支持 Windows? 大家虚拟机装个 Ubuntu 吧。
闲话少扯直接上干货:
整体目录如下:
1 |
study@study:~/文档/ansible-examples$ tree Splash_Load_balancing_cluster |
Group_vars: 里面定义全局使用的变量 Roles: 存放所有的规则目录 Roles/common :所有服务器初始化配置部署 Roles/common/filters :需要使用的文件或者文件夹 Roles/common/task:部署任务(main.yml 为入口必须要有) Roles/common/templates :配置模板(jinja2 模板语法 用于可变更的配置文件,可获取定义在 Group_vars 中的变量) Roles/Docker :Docker 的安装配置 Roles/HAproxy : HAproxy 的负载均衡配置 Roles/Splash : Splash 的镜像拉取配置部署以及启动 site.yml : 启动入口
使用方法:
在你的 Inventory 文件定义好主机分组:
必须包括 HaProxy、和 Docker 两个分组如下:
1 |
study@study:~/文档/ansible-examples$ cat /etc/ansible/inventory/splash |
主控端新建 SSH 秘钥并发布到你你需要配置的所有主机!!!!(一定要注意如果本机当前工作用户在远程主机不存在额时候,需要指定 remote_user 这个参数):
1 |
study@study:~/文档/ansible-examples$ cat /etc/ansible/ansible.cfg |
好了开始执行:
1 |
study@study:~/文档/ansible-examples/Splash_Load_balancing_cluster$ ansible-playbook site.yml |
效果就像这样:
1 |
PLAY [all] ********************************************************************************************************************************************************************************** |
静静等着跑完 就可以愉快的使用啦 ! 需要增加节点的话直接把 IP 加载 Docker 分组下 重新执行一遍就可以了! 需要注意如果 SSH 非默认的 22 端口还需要指定你的端口号!怎么指定 看看文档去 以上完毕!!! 完整的看这儿:https://github.com/thsheep/ansible-examples














另外我们也可以单独添加单个 Node 或 Relationship,实例如下:
另外还可以利用 data() 方法来获取查询结果:
在这里我们用 NodeSelector 来筛选 age 为 21 的 Person Node,实例如下:

























在这里推荐安装CentOS7系统。 然后找到远程管理面板找到远程连接的用户名和密码,也就是SSH远程连接服务器的信息。 比如我这边的IP端口分别是 153.36.65.214:20063,用户名是root。 命令行下输入:
都提示成功之后就可以进行拨号了。 在拨号之前如果我们测试ping任何网站都是不通的,因为当前网络还没联通,输入拨号命令:
所以断线重播的命令就是二者组合起来,先执行
所以,到这里我们就可以知道它作为代理服务器的巨大优势了,如果将这台主机作为代理服务器,如果我们一直拨号换IP,就不怕遇到IP被封的情况了,即使某个IP被封了,重新拨一次号就好了。 所以接下来我们要做的就有两件事,一是怎样将主机设置为代理服务器,二是怎样实时获取拨号主机的IP。
如果有正常的结果输出并且origin的值为代理IP的地址,就证明TinyProxy配置成功了。 好,那到现在,我们接下来要做的就是需要动态实时获取主机的IP了。
获取最新代理:
获取所有代理:
请求接口获取可用代理即可,比如获取一个随机代理:















我们可以看到这里就是他的一些基本信息,我们需要抓取的就是这些,比如名字、签名、职业、关注数、赞同数等等。 接下来我们需要探索一下关注列表接口在哪里,我们点击关注选项卡,然后下拉,点击翻页,我们会在下面的请求中发现出现了 followees开头的Ajax请求。这个就是获取关注列表的接口。
我们观察一下这个请求结构
首先它是一个Get类型的请求,请求的URL是
可以看到有data和paging两个字段,data就是数据,包含20个内容,这些就是用户的基本信息,也就是关注列表的用户信息。 paging里面又有几个字段,is_end表示当前翻页是否结束,next是下一页的链接,所以在判读分页的时候,我们可以先利用is_end判断翻页是否结束,然后再获取next链接,请求下一页。 这样我们的关注列表就可以通过接口获取到了。 接下来我们再看下用户详情接口在哪里,我们将鼠标放到关注列表任意一个头像上面,观察下网络请求,可以发现又会出现一个Ajax请求。
可以看到这次的请求链接为
所以综上所述:
可以看到返回的结果非常全,在这里我们直接声明一个Item全保存下就好了。 在items里新声明一个UserItem
看下MongoDB,里面我们爬取的用户详情结果。
到现在为止,整个爬虫就基本完结了,我们主要通过递归的方式实现了这个逻辑。存储结果也通过适当的方法实现了去重。



































































