第四章 consul cluster
1、vagrant
为了模拟集群效果,使用vagrant。
1.1、首先下载vagrant
https://www.vagrantup.com/downloads.html
说明:浏览器下载可能比较慢,可以通过迅雷下载。
1.2、下载之后,安装vagrant
mac中下一步到底就可以。
说明:虽然vagrant需要依赖于virtualbox,需要事先安装。
1.3、打开终端,启动vagrant
1.3.1、初始化:

说明:以上是安装64bit的Linux系统(Ubuntu),32bit的将数字改为32即可。
参考:https://liuzhichao.com/p/1940.html
1.3.2、修改Vagrantfile文件

说明:ruby写的,内容改为如下:
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script = <<SCRIPT
echo Installing dependencies...
sudo apt-get update
sudo apt-get install -y unzip curl
echo Fetching Consul...
cd /tmp/
wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
echo Installing Consul...
unzip consul.zip
sudo chmod +x consul
sudo mv consul /usr/bin/consul
sudo mkdir /etc/consul.d
sudo chmod a+w /etc/consul.d
SCRIPT # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "debian/wheezy64" config.vm.provision "shell", inline: $script config.vm.define "n1" do |n1|
n1.vm.hostname = "n1"
n1.vm.network "private_network", ip: "172.20.20.10"
end config.vm.define "n2" do |n2|
n2.vm.hostname = "n2"
n2.vm.network "private_network", ip: "172.20.20.11"
end
end
该文件内容是consul官方推荐的demo。这一块儿内容可以根据实际情况去修改。(我将节点的IP自己指定了一下,尽量不要与自己本机的IP一样,否则可能会影响一些功能),以下是我的配置。
# -*- mode: ruby -*-
# vi: set ft=ruby :
$script = <<SCRIPT
echo Installing dependencies...
sudo apt-get update
sudo apt-get install -y unzip curl
echo Fetching Consul...
cd /tmp/
wget https://releases.hashicorp.com/consul/0.6.1/consul_0.6.1_linux_amd64.zip -O consul.zip
echo Installing Consul...
unzip consul.zip
sudo chmod +x consul
sudo mv consul /usr/bin/consul
sudo mkdir /etc/consul.d
sudo chmod a+w /etc/consul.d
SCRIPT # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "debian/wheezy64" config.vm.provision "shell", inline: $script config.vm.define "n110" do |n1|
n1.vm.hostname = "n110"
n1.vm.network "private_network", ip: "192.168.21.110"
end config.vm.define "n111" do |n2|
n2.vm.hostname = "n111"
n2.vm.network "private_network", ip: "192.168.21.111"
end
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模式启动服务

关于启动命令和启动参数查看 附1 consul常用命令+常用选项
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、创建服务并访问
这个是我后来写的,所以节点名字变了。

分别在两个节点上边创建一个服务,创建过程参照:第三章 consul服务注册与服务查询
服务访问:
采用DNS访问:
在client-111和server-110下均可以操作,命令如下:

命令:dig @127.0.0.1 -p 8600 server-110.node.zjgdc1.consul
格式:dig @127.0.0.1 -p 8600 节点名称.node.数据中心名称.consul
7、节点离开集群
"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
第四章 consul cluster的更多相关文章
- 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...
- 第二章 consul的安装和启动
安装环境: mac:64bit(查看mac位数:打开终端-->"uname -a") consul_0.6.4_darwin_amd64.zip和consul_0.6.4_w ...
- 《Linux内核设计与实现》读书笔记 第四章 进程调度
第四章进程调度 进程调度程序可看做在可运行太进程之间分配有限的处理器时间资源的内核子系统.调度程序是多任务操作系统的基础.通过调度程序的合理调度,系统资源才能最大限度地发挥作用,多进程才会有并发执行的 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (20) -----第四章 ASP.NET MVC中使用实体框架之在MVC中构建一个CRUD示例
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第四章 ASP.NET MVC中使用实体框架 ASP.NET是一个免费的Web框架 ...
- 《Entity Framework 6 Recipes》中文翻译系列 (21) -----第四章 ASP.NET MVC中使用实体框架之在页面中创建查询和使用ASP.NET URL路由过虑
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 4.2. 构建一个搜索查询 搜索数据是几乎所有应用的一个基本功能.它一般是动态的,因 ...
- 精通Web Analytics 2.0 (6) 第四章:点击流分析的奇妙世界:实际的解决方案
精通Web Analytics 2.0 : 用户中心科学与在线统计艺术 第四章:点击流分析的奇妙世界:实际的解决方案 到开始实际工作的时候了.哦耶! 在本章中,您将了解到一些最重要的网络分析报告,我将 ...
- Java语言程序设计(基础篇) 第四章 数学函数、字符和字符串
第四章 数学函数.字符和字符串 4.2 常用数学函数 方法分三类:三角函数方法(trigonometric method).指数函数方法(exponent method)和服务方法(service m ...
- 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算
http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...
- 05 技术内幕 T-SQL 查询读书笔记(第四章)
第四章 子查询:在外部查询内嵌套的内部查询(按照期望值的数量分为,标量子查询 scalar subqueries,多值子查询multivalued subqueries)(按照子查询对外部查询的依赖性 ...
随机推荐
- Android 跨进程调用忽略权限
Framework层: @Override public StackInfo getStackInfo(int stackId) { final int callingUid = ...
- python 进行抓包嗅探
一.绪论 最近一直想弄一个代理,并且对数据包进行解读,从而完成来往流量的嗅探.于是今天学习了一下如何使用Python抓包并进行解包. 首先要用到两个模块 dpkt(我这边ubuntu16.04 LTS ...
- 去面试H5游戏问的一些问题
首先肯定是自我介绍,然后问一些基础题,然后问简历上的相关问题. 1. WebSocket和Socket的区别 2.Http和Https的区别,get和post区别 3.进程和线程 4.H5的渲染流程 ...
- DetaSet更新数据
用到的控件:DataGridView(展示数据), Button控件,更名[更新] using System; using System.Collections. ...
- gcc windows版本
MingW 分 32位和64位版本:下载地址分别如下: http://sourceforge.net/projects/mingw/ http://sourceforge.net/projects/m ...
- mysql 约束条件介绍
mysql 约束条件介绍 约束条件与数据类型的宽度一样,都是可选参数 作用:用于保证数据的完整性和一致性主要分为: PRIMARY KEY (PK) 标识该字段为该表的主键,可以唯一的标识记录 FO ...
- 002-and design-基于dva的基本项目搭建
一.概述 在真实项目开发中,你可能会需要 Redux 或者 MobX 这样的数据应用框架,Ant Design React 作为一个 UI 库,可以和任何 React 生态圈内的应用框架搭配使用.我们 ...
- Atom+Nuclide(Windows)开发ReactNative
1 安装Atom,Nucilde 首先需要到官网下载Atom: 然后安装Nuclide, 重新打开Atom,会看到Nucilde的界面且菜单项会多出一个Nucilde 2 创建ReactNative ...
- 谈谈ConcurrentHashMap1.7和1.8的不同实现
知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得. ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈 ...
- ref out 区别
1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配. 3.out适 ...