前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在一些Ubuntu服务器上设置Serf集群

如何在一些Ubuntu服务器上设置Serf集群

原创
作者头像
温浪
发布于 2018-08-03 10:02:51
发布于 2018-08-03 10:02:51
1.1K0
举报

介绍

Serf是一种分散的服务编排和服务发现工具。它具有极高的容错能力和分散性,与其他类似工具一样没有单点故障。Serf可用于触发系统集群中的任何事件以及执行监视任务。它建立在Gossip协议的基础之上,该协议专为分散式通信而设计。为了使节点加入Serf集群,该节点只需要最初知道集群中另一个节点的地址。节点加入后,所有成员资格信息都将在整个群集中传播。Gossip协议使Serf非常容易设置和配置。

使用多个服务器

Serf旨在运行多个服务器,并与Nix,Windows和Mac OS系统兼容。本教程将向您展示如何在两个不同的Ubuntu服务器上设置Serf。没有服务器的用户可以购买和使用腾讯云服务器或者直接在腾讯云实验室Ubuntu服务器实验。

在本教程中,服务器将命名为SerfNode1SerfNode2。您需要知道每台服务器的IP地址; 在本教程中,以下IP地址用于表示每个服务器。[无论您在教程中何处看到这些IP地址,都将使用您自己的IP地址替换它们。

SerfNode1 | 1.1.1.1

SerfNode2 | 2.2.2.2

安装Serf

这需要在SerfNode1SerfNode2上完成

下载最新的Serf包:

代码语言:txt
AI代码解释
复制
wget https://dl.bintray.com/mitchellh/serf/0.3.0_linux_amd64.zip

安装解压缩工具以解压缩包:

代码语言:txt
AI代码解释
复制
apt-get install unzip

解压缩Serf包:

代码语言:txt
AI代码解释
复制
unzip 0.3.0_linux_amd64.zip

将Serf添加到二进制文件目录,以便可以从任何地方执行:

代码语言:txt
AI代码解释
复制
mv serf /usr/local/bin

创建一个Serf集群

SerfNode1上启动第一个Serf节点:

代码语言:txt
AI代码解释
复制
serf agent -node=**SerfNode1** -bind=1.1.1.1:7496 

您应该看到类似于以下输出的内容:

代码语言:txt
AI代码解释
复制
==> Starting Serf agent...
==> Starting Serf agent RPC...
==> Serf agent running!
    Node name: '**SerfNode1**'
    Bind addr: '1.1.1.1:7496'
     RPC addr: '127.0.0.1:7373'
    Encrypted: false
     Snapshot: false
      Profile: lan

==> Log data will now stream in as it occurs:

    2014/01/18 21:57:57 [INFO] Serf agent starting
    2014/01/18 21:57:57 [WARN] Binding to public address without encryption!
    2014/01/18 21:57:57 [INFO] serf: EventMemberJoin: **SerfNode1** 1.1.1.1
    2014/01/18 21:57:58 [INFO] agent: Received event: member-join

注意:node参数指定节点的名称,bind表示要绑定的IP地址和端口。

SerfNode2上,我们将在后台启动Serf代理:

代码语言:txt
AI代码解释
复制
serf agent -node=**SerfNode2** -bind=2.2.2.2:7497 -rpc-addr=127.0.0.1:7373 &

注意:'&'指明了命令在后台执行

告诉SerfNode2加入到SerfNode1中

代码语言:txt
AI代码解释
复制
serf join 1.1.1.1:7496

您应该看到类似于以下内容的输出结果:

代码语言:txt
AI代码解释
复制
...
    2014/01/18 22:03:04 [INFO] serf: EventMemberJoin: **SerfNode2** 2.2.2.2
    2014/01/18 22:03:05 [INFO] agent: Received event: member-join1922
...

你现在有一个小型的工作Serf集群。为了设置其他服务器,您只需重复我们在SerfNode2执行的过程。要加入Serf群集,您只需要指示服务器加入群集中已有的另一个Serf代理。Gossip协议自动通知新服务器集群中的所有其他Serf代理。

事件和事件处理

Serf非常棒的另一个原因是事件处理是多么容易。我们首先向集群发送一个事件。

发送简单的用户事件

SerfNode2上,执行以下命令:

代码语言:txt
AI代码解释
复制
serf event hello

SerfNode1上,您应该看到与此类似的内容:

代码语言:txt
AI代码解释
复制
2014/01/16 15:48:05 [INFO] agent: Received event: user-event: hello

我们刚刚将第一个事件发送到集群。但是这个事件并没有真正执行很多。

创建自定义事件处理程序

现在我们将配置一些自定义事件处理。Serf可以在集群中触发自定义事件,以启动诸如部署,安全更新,系统配置等事情,以及Linux计算机上任何可以编写脚本的事件。

让我们从一个简单的例子开始吧。

SerfNode1上,按Ctrl + C停止Serf代理。它的输出结果如下:

代码语言:txt
AI代码解释
复制
    2014/01/16 15:58:54 [INFO] agent: requesting serf shutdown
    2014/01/16 15:58:54 [WARN] Shutdown without a Leave
    2014/01/16 15:58:54 [INFO] agent: shutdown complete

现在我们将创建一个自定义事件脚本,将“written to file”写入/ usr /src目录中的文本文件。当用户发送'write'事件时,它将执行此脚本。

首先让我们创建我们的事件处理程序。事件处理程序可以是任何可执行文件 -

在我们的例子中,我们将使用bash文件。

切换到/ usr / src目录:

代码语言:txt
AI代码解释
复制
cd /usr/src

打开nano:

代码语言:txt
AI代码解释
复制
nano handler.sh

对事件理程序使用以下脚本:

代码语言:txt
AI代码解释
复制
 #!/bin/bash
if [ "${SERF_USER_EVENT}" = "write" ]; then
        echo "written to file" >> test.txt
fi

echo "${SERF_USER_EVENT}"

注意:\$ {SERF USEREVENT}是我们发送的evnt的名称。请注意如何使用if语句来设置不同的事件。

按Ctrl + X退出nano,按Y保存,点击Enter

输入以下命令执行脚本:

代码语言:txt
AI代码解释
复制
chmod +x handler.sh

现在我们将重新启动Serf代理,但这次我们将使用刚刚创建的事件处理程序:

代码语言:txt
AI代码解释
复制
serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode1** -bind=1.1.1.1:7496

(可选步骤)

每个Serf代理都可以拥有自己的事件处理程序。如果您想有一个自定义事件处理程序SerfNode2,你只需要为SerfNode1执行相同的事件处理程序创建过程,或者你可以将事件处理程序脚本复制到SerfNode2服务器的`/

usr / src`目录并执行以下命令:

SerfNode2上,离开Serf集群:

代码语言:txt
AI代码解释
复制
serf leave

导航到/ usr / src目录:

代码语言:txt
AI代码解释
复制
cd /usr/src

使用自定义事件处理程序在后台启动Serf代理程序:

代码语言:txt
AI代码解释
复制
serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode2** -bind=2.2.2.2:7496 &

测试事件处理程序

SerfNode2上,重新加入SerfNode1

代码语言:txt
AI代码解释
复制
serf join 1.1.1.1:7496

执行以下命令:

代码语言:txt
AI代码解释
复制
serf event write

SerfNode1上切换到/ usr / src directoy

代码语言:txt
AI代码解释
复制
cd /usr/src

现在你应该在directoy中看到test.txt文件。当我们从SerfNode2触发Serf事件时创建了该文件。

设置可用内存监控

我们将设置一个自定义事件处理程序,它将服务器集群上的可用内存记录到中央服务器。

SerfNode1上,按Ctrl + C退出Serf群集。

确保您位于/ usr / src目录中:

代码语言:txt
AI代码解释
复制
cd /usr/src

打开handler.sh脚本:

代码语言:txt
AI代码解释
复制
nano handler.sh

将脚本更改为以下内容:

代码语言:txt
AI代码解释
复制
 #!/bin/bash
if [ "${SERF_USER_EVENT}" = "mem" ]; then
   serf event memresponse "$(awk '/MemTotal/ {printf( "%.2f\n", $2 / 1024 ) }'              /proc/meminfo) MB from $(wget -qO- http://ipecho.net/plain ; echo) at $(date)"
fi

按Ctrl + X退出nano,按Y保存,点击Enter

此脚本将触发Serf事件,该事件将使用以下格式返回虚拟服务器上的可用内存:

代码语言:txt
AI代码解释
复制
490 MB from 1.1.1.1 at Sun Jan 19 00:37:22 EST 2014

现在我们需要一种在服务器上记录这个的方法

SerfNode2上,离开Serf集群:

代码语言:txt
AI代码解释
复制
serf leave

确保您位于/ usr / src目录中:

代码语言:txt
AI代码解释
复制
cd /usr/src

创建处理程序脚本:

代码语言:txt
AI代码解释
复制
nano handler.sh

对脚本建立以下内容:

代码语言:txt
AI代码解释
复制
 #!/bin/bash
if [ "${SERF_USER_EVENT}" = "memresponse" ]; then
    cat >> mem.txt
    echo "\n" >> mem.txt
fi

按Ctrl + X退出nano,按Y保存,点击Enter

使脚本可执行:

代码语言:txt
AI代码解释
复制
chmod +x handler.sh

SerfNode1上启动代理:

代码语言:txt
AI代码解释
复制
serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode1** -bind=1.1.1.1:7496

SerfNode2上启动代理:

代码语言:txt
AI代码解释
复制
serf agent -log-level=debug -event-handler=./handler.sh -node=**SerfNode2** -bind=2.2.2.2:7496 &

SerfNode2上,重新加入SerfNode1

代码语言:txt
AI代码解释
复制
serf join 1.1.1.1:7496

触发'mem'事件:

代码语言:txt
AI代码解释
复制
serf event mem

检查mem.txt文件:

代码语言:txt
AI代码解释
复制
nano mem.txt

现在,您拥有一个可以在多个虚拟服务器上分布的功能内存监控工具。

更详尽的Serf事件

下面是一些在创建自定义事件处理脚本时派上用场的变量。

  • SERF_EVENT是正在发生的事件类型。可能会是成员加入,成员离开,成员失败或用户之一。
  • SERF_SELF_NAME是执行事件处理程序的节点的名称。
  • SERF_SELF_ROLE是执行事件处理程序的节点的角色。
  • SERF_USER_EVENT是用户事件类型的名称,前提是如果SERF_EVENT是“user”。
  • SERF_USER_LTIME是用户事件的LamportTime,前提是如果SERF_EVENT是“user”。

触发事件时,以下是事件命令的布局:

代码语言:txt
AI代码解释
复制
serf event [SERF_EVENT_NAME] [PAYLOAD]
  • 有效负载是事件名称后面的任何内容。脚本将有效负载解释为stdin。
  • 使用自定义用户事件时,应使用SERF USER EVENT变量而不是SERF_EVENT变量。

结论

Serf是在一组机器上触发事件的好方法。它简单,轻便,容错。除了这些强大的功能外,它还非常分散,并且没有单点故障。一些示例用例包括:系统配置,部署,安全更新,消息广播和服务器监视。Serf也是可定制的,可以适应各种问题的解决方案。


参考文献:《How To Set Up a Serf Cluster on Several Ubuntu VPS

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
使用 Vultr 搭建个人的 Hexo 博客
可以在各大域名商上去申请域名,我是在 godaddy 上申请,这里需要注意的事,域名后期续费是越来越贵的,
Bug开发工程师
2020/02/12
2.3K0
使用 Vultr 搭建个人的 Hexo 博客
Hexo博客的部署和使用
Hexo是一款快速、简洁且高效的博客框架,其基于Node.js让页面快速完成渲染,强大的API带来无限可能,丰富的插件和主题让建站更容易,生成的静态网页托管在GitHub等平台上还可以省去大量服务器费用。
M.Talen
2024/05/22
1810
Hexo博客的部署和使用
从零搭建Hexo博客并部署腾讯云服务器
腾讯云服务器已经买了好一阵子了,拖延到现在才搭博客,参考各个社区里挺多教程,最后选择使用Hexo来作为自己的博客框架,好处是不用自己造轮子,而且有很多漂亮的主题可以拿来用。今天上午把搭博客过程做个小结,希望对有想法要做自己的博客的同学们有一些帮助。
用户7978588
2020/12/19
2.4K0
Github Actions Hexo 自动部署
最近重装了电脑,近几年内每次重装也好,装备新电脑也好,越来越觉得维护博客是令我比较头疼的事
imba久期
2022/12/16
4810
Github Actions Hexo 自动部署
个人hexo博客的服务端部署及构建
之前的Hexo博客放在Github上,速度太慢了,在腾讯云上买了台服务器,将博客放到上面,本节主要阐述Nginx服务端部署+Nginx优化+HTTPS部署。
公众号guangcity
2020/02/24
1.1K0
Hexo 部署至云服务器(宝塔面板)
hexo 博客部署方法有好多种,github pages、gitee pages(pro)、vercel,cloudflare page、阿里云oss、腾讯存储桶等等这些不需要购买服务器的部署方式。一般大部分都用以上方式部署自己的hexo博客,但也有少部分部署在自己服务器的同志。
Qwe7
2022/03/30
6.2K0
Hexo搭建 --- 1、搭建 Hexo 博客并部署到 Coding
前言 我一直想搭建一个个人博客,要求就是简洁,支持Markdown,可以显示文章的TOC目录。 寻找的过程中也遇到了很多坑,教程基本上都不完整,或者是直接copy别人的,而且很多教程中是将其部署到github pages上 ,但是介于网速问题,还是选择了国内的Coding。下面先将我的经历给大家分享下。 JPress :国产,开源,基于JFinal开发的,主题生态系统正在快速完善中,但是markdown支持不好,所以就放弃了。 Ghost : 也很简洁,基于Node.js开发,有后台管理页。与markdow
一份执着✘
2018/06/04
2.5K0
手把手教你搭建一个技术人的博客
在我们正式开始搭建一个完全属于我们自己的博客之前,我们首先要做好一些事前的准备(当然,如果你没有做好准备也没有关系,下面会一步一步的教你搞定这些)
山禾说
2020/07/24
5090
手把手教你搭建一个技术人的博客
Hexo+Github/Gitee搭建静态网站博客
Hexo是一个快速,简单,功能强大的开源博客框架。 GitHub/Gitee Pages 是一个国内外静态资源网站。 两者结合可以搭建用户自己的静态网站。
leehao
2025/02/11
1600
Hexo+Github/Gitee搭建静态网站博客
Hexo博客部署腾讯云服务器
设置的密码看不到,你直接输入就可以了。这里我设置的密码太简单了会有这样的提示。不用关心直接输入,看到成功提示即可。
程序员Leo
2023/08/07
6070
Hexo博客部署腾讯云服务器
Hexo之我的个人博客改用自己服务器搭建
最近小明介绍完自己用hexo+git搭建个人博客,大家好像更关心的是域名mynamecoder.com,不是应该关注技术嘛,让小明哭笑不得?,今天继续给大家讲一下如果觉得这两个代码托管平台打开加载太慢
程序员小明
2019/10/14
2.6K1
开发小白也毫无压力的hexo静态博客建站全攻略
本文介绍对开发小白也毫无压力的hexo静态博客建站全攻略,github.io与coding.me的静态博客类似,3年前本人基于本机Windows在github.io上创建了静态Github Pages - yanglr,本文以在Coding pages上建站为例。
Enjoy233
2019/03/04
1.7K0
博客更新-迁移博客至Hexo的艰辛
Windows下访问GitDownload下载页面(已下载可跳过) 由于下载速度可能过慢,这里给网盘下载
筱锋xiao_lfeng
2022/03/16
4810
博客更新-迁移博客至Hexo的艰辛
Hexo部署远程仓库(Conding、Gitee、Github)
Git可以有效、高速的处理各种项目版本管理。也就是用来管理你的hexo博客文章,上传到GitHub的工具。
咕咕星
2020/08/19
1.3K0
Hexo部署远程仓库(Conding、Gitee、Github)
使用 hexo+github pages 搭建个人博客
3、配置 _config.yml,将下面代码复制到项目根目录 _config.yml 文件的最后
Leophen
2020/04/22
5030
使用 hexo+github pages 搭建个人博客
关于如何利用hexo+github搭建个人静态博客
和node.js:https://nodejs.org/zh-cn/ (版本号要小一点,否则会不兼容,应在14以下,我所使用的版本是12.16.2)
f1sh
2024/07/10
1210
Mac/Linux/Windows如何从零开始搭建Hexo静态博客并部署到远程平台
本文同步博客图文( ´▽`):https://www.mintimate.cn/2020/03/19/hexo
Mintimate
2021/01/29
2.3K0
Mac/Linux/Windows如何从零开始搭建Hexo静态博客并部署到远程平台
Hexo博客搭建基础教程(一)
打开Node官网,下载和自己系统相配的Node的安装程序,否则会出现安装问题。 下载地址:https://nodejs.org/en/download/
777nx
2023/05/02
3650
Hexo博客搭建基础教程(一)
The deployment of Hexo
Hexo的标签就是高效渲染+静态+简单,安装好后的后续文章的推送和页面的一些修改采用的是git方式的推送,通过密钥方式登录避免了每次推送更新都要输入密码的麻烦。安装过程主要分为服务器端的安装后本地客户端的安装,服务器端需要安装nginx+git+node.js,客户端的话是:git+node.js+hexo。
Tommonkey
2023/02/25
3620
Hexo + Gitee 搭建个人博客
其实,如果你要求不高,我们再把它部署到码云(gitee)上,现在也可以说是完成了。
野原测试开发
2020/06/05
1.1K0
推荐阅读
相关推荐
使用 Vultr 搭建个人的 Hexo 博客
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档