第四章 consul cluster

1、vagrant

为了模拟集群效果,使用vagrant。

1.1、首先下载vagrant

https://www.vagrantup.com/downloads.html

说明:浏览器下载可能比较慢,可以通过迅雷下载。

1.2、下载之后,安装vagrant

mac中下一步到底就可以。

说明:虽然vagrant需要依赖于virtualbox,但是我们不需要事先安装,因为在安装vagrant的时候,会自动先安装virtualbox的。

1.3、打开终端,启动vagrant

1.3.1、初始化:

说明:以上是安装64bit的Linux系统(Ubuntu),32bit的将数字改为32即可。

参考:https://liuzhichao.com/p/1940.html

1.3.2、修改Vagrantfile文件

说明:ruby写的,内容改为如下:

 1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 $script = <<SCRIPT
 4 echo Installing dependencies...
 5 sudo apt-get update
 6 sudo apt-get install -y unzip curl
 7 echo Fetching Consul...
 8 cd /tmp/
 9 wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
10 echo Installing Consul...
11 unzip consul.zip
12 sudo chmod +x consul
13 sudo mv consul /usr/bin/consul
14 sudo mkdir /etc/consul.d
15 sudo chmod a+w /etc/consul.d
16 SCRIPT
17
18 # Vagrantfile API/syntax version. Don‘t touch unless you know what you‘re doing!
19 VAGRANTFILE_API_VERSION = "2"
20
21 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
22   config.vm.box = "debian/wheezy64"
23
24   config.vm.provision "shell", inline: $script
25
26   config.vm.define "n1" do |n1|
27       n1.vm.hostname = "n1"
28       n1.vm.network "private_network", ip: "172.20.20.10"
29   end
30
31   config.vm.define "n2" do |n2|
32       n2.vm.hostname = "n2"
33       n2.vm.network "private_network", ip: "172.20.20.11"
34   end
35 end

该文件内容是consul官方推荐的demo。这一块儿内容可以根据实际情况去修改。(我将节点的IP自己指定了一下,尽量不要与自己本机的IP一样,否则可能会影响一些功能),以下是我的配置。

 1 # -*- mode: ruby -*-
 2 # vi: set ft=ruby :
 3 $script = <<SCRIPT
 4 echo Installing dependencies...
 5 sudo apt-get update
 6 sudo apt-get install -y unzip curl
 7 echo Fetching Consul...
 8 cd /tmp/
 9 wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
10 echo Installing Consul...
11 unzip consul.zip
12 sudo chmod +x consul
13 sudo mv consul /usr/bin/consul
14 sudo mkdir /etc/consul.d
15 sudo chmod a+w /etc/consul.d
16 SCRIPT
17
18 # Vagrantfile API/syntax version. Don‘t touch unless you know what you‘re doing!
19 VAGRANTFILE_API_VERSION = "2"
20
21 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
22   config.vm.box = "debian/wheezy64"
23
24   config.vm.provision "shell", inline: $script
25
26   config.vm.define "n110" do |n1|
27       n1.vm.hostname = "n110"
28       n1.vm.network "private_network", ip: "192.168.21.110"
29   end
30
31   config.vm.define "n111" do |n2|
32       n2.vm.hostname = "n111"
33       n2.vm.network "private_network", ip: "192.168.21.111"
34   end
35 end

只是修改了节点位置,其实上边的script根本没让他去执行,可以去掉。

1.3.3、启动

说明:当看到日志输出到

就可以"ctrl+c"退出了(可能有时候需要"ctrl+c"两次),否则会将本机~/下的内容同步到n110这个节点,可能n110这个节点的空间会不够,导致后期工作无法进行。

这时候一个节点启动起来了,但是第二个没起来,需要再执行上边的操作一次。

最后,第三次执行启动命令。

这样就好了。

之后针对n110和n111两个节点分别安装软件。

2、安装软件

进入/tmp/,下载consul软件。

之后解压(前提是"unzip"命令已安装,如果没安装,执行

解压之后出现一个二进制文件"consul",如下:

之后将这个二进制文件移动或拷贝到/usr/bin下

说明:以上步骤分别针对针对n110和n111两个节点执行一次。

3、n110以server模式启动服务

4、n111以client模式启动服务

5、join

分别启动以上两个服务后,发现其实n110和n111两个彼此谁都不知道谁(可以通过切换屏幕后,使用来验证),此时必须其中一个节点join到另一个节点,这时候才能彼此组成集群。

说明:以上命令将n110节点加入到n111所在的集群(反过来去join也是没问题的),之后通过来看n110和n111时,彼此都是一个集群的两个member了。

注意:假设一个集群有2个节点(n1,n2),这时候有一个节点n3想加入集群,不需要join两遍,只需要join n1或n2就好。这样的话,集群之间通过gossip协议彼此沟通,n3就加入集群了。

6、节点离开集群

"ctrl+c"

补:以上的join是手工join的,还有一种节点加入集群后自动join到集群中去,查看:

https://www.consul.io/intro/getting-started/join.html

参考:

https://www.consul.io/intro/getting-started/join.html

http://www.jianshu.com/p/d483db36ec9a

https://liuzhichao.com/p/1940.html

时间: 2024-12-07 01:43:22

第四章 consul cluster的相关文章

第四章

第四章 源代码的下载和编译 1.下载.编译和测试Android源代码 配置Android源代码的下载环境 ①创建一个存放下载脚本文件(repo)的目录 # mkdir  ~/bin # PATH=~/bin:$PATH ②下载repo脚本文件 # curi http://dl-ssl.google.com/dl/googlesource/git-repo/repo > -/bin/repo # chmod a+x ~/bin/repo ③创建存放Android源代码的目录 # mkdir and

《UML精粹》 第四章 时序图

第四章 时序图 一般来说,我们会在一张时序图中画出某个情节的相关行为,图种会秀出这个使用案例(use case)里面可能出现的一些对象,以及在对象间传送的信息. 本章将通过一个简单情节,做时序图各方面的相关讨论.假设我们现在有一份订单,并且准备调用它的一个命令,算出这份订单的价格.为了达到这个目的,订单需要产看它里面所拥有的一些订单明细.决定它们的价格,价格决定方式是以订单明细中所包含产品之定价规则为基础决定的.对所有订单明细做完上述动作之后,接下来订单要算出整个折扣,这时候它是以跟客户绑在一起

Java 线程第三版 第四章 Thread Notification 读书笔记

一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(long timeout) throws InterruptedException 等待条件的发生.如果通知没有在timeout指定的时间内发生,它还是会返回. public final void wait(long timeout, int nanos) throws InterruptedException

2017.06.29数据挖掘基础概念第四章

第四章39.为什么在进行联机分析处理(OLAP)时,我们需要一个独立的数据仓库,而不是直接在日常操作的数据库上进行 1.提高两个系统的性能 2.操作数据库支持多事务的并发处理,需要并发控制和恢复机制,确保一致性和事务的鲁棒性 3.两者有着不同的数据的结构.内容和用法40.什么是数据仓库 数据仓库是一种数据库,它与单位的操作数据库分别维护,数据仓库系统允许将各种应用系统集成在一起,为统一的历史数据分析提供坚实的平台,对信息处理提供支持,是一个面向主题的.集成的.时变得.非易失的数据集合,支持管理者

构建之法学习(第四章 两人合作)

第四章 两人合作 1.代码规范  1)代码风格规范.主要是文字上的规定,看似表面文章,实际上非常重要. *原则:简明,易读,无二义性 *缩进:4个空格 *行宽:行宽必须限制,可以限定为100字符 *括号:在复杂的条件表达式中,用括号清除地表示逻辑优先级 *断行与空白的{}行:推荐格式如下 if ( condition ) {        DoSomething(); } else {       DoSomethingElse(); } *分行:不要把多条语句放在一行上.并且,不要把多个变量定

第四章—变量,作用域和内存问题(二)

第四章-变量,作用域和内存问题(二) JS没有块级作用域 js没有块级作用域,这个概念容易导致误解,这里就区分下几个情况,大家好好参考下: 我们知道,在其他类C的语言中,由花挂号封闭的代码块都有自己的作用域.但是在JS中,却没有块级作用域: 这里if(true){}代表条件永真,永远执行这条.if(false){}的话就是永远不执行这条. 这个代码执行之后,在if语句定义的变量,在if语句外可以访问的到.在if语句中的变量声明会将变量添加到当前的执行环境中(这里是全局环境). 还有如下的两个例子

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

javascript高级程序设计 第十四章--表单脚本

javascript高级程序设计 第十四章--表单脚本 在HTML中表单由<form>元素表示,在js中表单对应的是HTMLFormElement类型,这个类型也有很多属性和方法:取得表单元素的引用还是为它添加id特性,用DOM操作来获取表单元素:提交表单:把<input>或<button>元素的type特性设置为"submit",图像按钮把<input>元素的type特性设置为"image",也可以调用submit(

Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串

第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service method) 4.4 String类型 String类型不是基本类型,而是引用类型(reference type).