首先需要下载下载go平台安装包
创新互联专业为企业提供佛山网站建设、佛山做网站、佛山网站设计、佛山网站制作等企业网站建设、网页设计与制作、佛山企业网站模板建站服务,十载佛山做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
安装程序 下载地址址h如果是您的系统是windows32 位系统请选择go1.3.3.windows-386.msi即可,其他的,请按照自己所需版本来进行下载,如下图所示:
安装以及配置环境变量
由于Windows下的的安装包有两种:msi和zip的;zip的是免安装的,解压在配置一些环境变量之后就可以使用,msi的则是安装包版本的,安装的时候会设置好对应的环境变量。我的电脑是Win7 64位,因为方便,就下载了下面的版本。下好安装包后,安装过程就很简单了,一路“Next”就好了。 虽然msi会自动配置一些环境变量,但是本人在安装完之后还是自己配置了环境变量,所以在安装完Go之后,我们最好还是检查一些所有的环境变量是否正常。主要的环境变量有以下几个:
GOROOT:Go的安装目录
GOPATH:用于存放Go语言Package的目录,这个目录不能在Go的安装目录中
GOBIN:Go二进制文件存放目录,写成%GOROOT%\bin就好
GOOS:操作系统
GOARCH:指定系统环境,i386表示x86,amd64表示x64
PATH:需要将%GOBIN%加在PATH变量的最后,方便在命令行下运行Go
如下图所示:
像我自己安装的,下载完成之后解压到任意目录(所有目录均不能使用中文):D:\Go;
然后是go环境变量的配置:
GOARCH:386(go安装版本)
GOBIN:D:\Go\bin(exe执行文件路径)
GOOS:windows(go运行的系统)
GOROOT:D:\Go(go的解压路径)
GOPATH:E:\go\data(go的工具包路径,随意指定,后面会用到)
然后在path环境变量中追加:;%GOBIN%
完成之后在cmd窗口输入:go version,如下图所示:
1.1 Go 安装
Go的三种安装方式
Go有多种安装方式,你可以选择自己喜欢的。这里我们介绍三种最常见的安装方式:
Go源码安装:这是一种标准的软件安装方式。对于经常使用Unix类系统的用户,尤其对于开发者来说,从源码安装可以自己定制。
Go标准包安装:Go提供了方便的安装包,支持Windows、Linux、Mac等系统。这种方式适合快速安装,可根据自己的系统位数下载好相应的安装包,一路next就可以轻松安装了。**推荐这种方式**
第三方工具安装:目前有很多方便的第三方软件包工具,例如Ubuntu的apt-get、Mac的homebrew等。这种安装方式适合那些熟悉相应系统的用户。
最后,如果你想在同一个系统中安装多个版本的Go,你可以参考第三方工具GVM,这是目前在这方面做得最好的工具,除非你知道怎么处理。
Go源码安装
在Go的源代码中,有些部分是用Plan 9 C和ATT汇编写的,因此假如你要想从源码安装,就必须安装C的编译工具。
在Mac系统中,只要你安装了Xcode,就已经包含了相应的编译工具。
在类Unix系统中,需要安装gcc等工具。例如Ubuntu系统可通过在终端中执行sudo apt-get install gcc
libc6-dev来安装编译工具。
在Windows系统中,你需要安装MinGW,然后通过MinGW安装gcc,并设置相应的环境变量。
你可以直接去官网下载源码,找相应的goVERSION.src.tar.gz的文件下载,下载之后解压缩到$HOME目录,执行如下代码:
cd go/src
./all.bash
运行all.bash后出现"ALL TESTS PASSED"字样时才算安装成功。
上面是Unix风格的命令,Windows下的安装方式类似,只不过是运行all.bat,调用的编译器是MinGW的gcc。
如果是Mac或者Unix用户需要设置几个环境变量,如果想重启之后也能生效的话把下面的命令写到.bashrc或者.zshrc里面,
export GOPATH=$HOME/gopath
export PATH=$PATH:$HOME/go/bin:$GOPATH/bin
如果你是写入文件的,记得执行bash .bashrc或者bash
.zshrc使得设置立马生效。
如果是window系统,就需要设置环境变量,在path里面增加相应的go所在的目录,设置gopath变量。
当你设置完毕之后在命令行里面输入go,看到如下图片即说明你已经安装成功
图1.1 源码安装之后执行Go命令的图
如果出现Go的Usage信息,那么说明Go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了Go的安装目录。
关于上面的GOPATH将在下面小节详细讲解
Go标准包安装
Go提供了每个平台打好包的一键安装,这些包默认会安装到如下目录:/usr/local/go
(Windows系统:c:\Go),当然你可以改变他们的安装位置,但是改变之后你必须在你的环境变量中设置如下信息:
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
上面这些命令对于Mac和Unix用户来说最好是写入.bashrc或者.zshrc文件,对于windows用户来说当然是写入环境变量。
如何判断自己的操作系统是32位还是64位?
我们接下来的Go安装需要判断操作系统的位数,所以这小节我们先确定自己的系统类型。
Windows系统用户请按Win+R运行cmd,输入systeminfo后回车,稍等片刻,会出现一些系统信息。在“系统类型”一行中,若显示“x64-based
PC”,即为64位系统;若显示“X86-based PC”,则为32位系统。
Mac系统用户建议直接使用64位的,因为Go所支持的Mac OS X版本已经不支持纯32位处理器了。
Linux系统用户可通过在Terminal中执行命令arch(即uname
-m)来查看系统信息:
64位系统显示
x86_64
32位系统显示
i386
Mac 安装
访问下载地址,32位系统下载go1.4.2.darwin-386-osx10.8.pkg,64位系统下载go1.4.2.darwin-amd64-osx10.8.pkg,双击下载文件,一路默认安装点击下一步,这个时候go已经安装到你的系统中,默认已经在PATH中增加了相应的~/go/bin,这个时候打开终端,输入go
看到类似上面源码安装成功的图片说明已经安装成功
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。
Linux 安装
访问下载地址,32位系统下载go1.4.2.linux-386.tar.gz,64位系统下载go1.4.2.linux-amd64.tar.gz,
假定你想要安装Go的目录为 $GO_INSTALL_DIR,后面替换为相应的目录路径。
解压缩tar.gz包到安装目录下:tar zxvf go1.4.2.linux-amd64.tar.gz -C
$GO_INSTALL_DIR。
设置PATH,export PATH=$PATH:$GO_INSTALL_DIR/go/bin
然后执行go
图1.2 Linux系统下安装成功之后执行go显示的信息
如果出现go的Usage信息,那么说明go已经安装成功了;如果出现该命令不存在,那么可以检查一下自己的PATH环境变中是否包含了go的安装目录。
Windows 安装
访问Google Code 下载页,32
位请选择名称中包含 windows-386 的 msi 安装包,64 位请选择名称中包含 windows-amd64 的。下载好后运行,不要修改默认安装目录
C:\Go\,若安装到其他位置会导致不能执行自己所编写的 Go 代码。安装完成后默认会在环境变量 Path 后添加 Go 安装目录下的 bin 目录
C:\Go\bin\,并添加环境变量 GOROOT,值为 Go 安装根目录 C:\Go\ 。
验证是否安装成功
在运行中输入 cmd 打开命令行工具,在提示符下输入 go,检查是否能看到 Usage 信息。输入
cd %GOROOT%,看是否能进入 Go 安装目录。若都成功,说明安装成功。
不能的话请检查上述环境变量 Path 和 GOROOT 的值。若不存在请卸载后重新安装,存在请重启计算机后重试以上步骤。
第三方工具安装
GVM
gvm是第三方开发的Go多版本管理工具,类似ruby里面的rvm工具。使用起来相当的方便,安装gvm使用如下命令:
bash (curl -s -S -L )
安装完成后我们就可以安装go了:
gvm install go1.4.2
gvm use go1.4.2
也可以使用下面的命令,省去每次调用gvm use的麻烦: gvm use go1.4.2 --default
执行完上面的命令之后GOPATH、GOROOT等环境变量会自动设置好,这样就可以直接使用了。
apt-get
Ubuntu是目前使用最多的Linux桌面系统,使用apt-get命令来管理软件包,我们可以通过下面的命令来安装Go,为了以后方便,应该把
git mercurial 也安装上:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang-stable git-core mercurial
homebrew
homebrew是Mac系统下面目前使用最多的管理软件的工具,目前已支持Go,可以通过命令直接安装Go,为了以后方便,应该把
git mercurial 也安装上:
brew update brew upgrade
brew install go
brew install git
brew install mercurial
为了配置Go语言开发环境,折腾了半天,下IDE(Sublime Text,IntelliJ Idea),然后装Go插件。装Go插件还要下载插件项目源码,编译等等,Sublime还要输入python脚本,粘进去通不过,头疼。
突然悟出一个道理,如果你觉得当前手上的事情变得非常痛苦的时候,不是事情本身的问题,是你没找到好的解决方法的问题,或者说,“不是事情太痛苦,是你太笨了”。
在不停的装插件,尝试过程中,突然发现,PyCharm跟Idea一样,也是支持Go插件的,立马悟到,PyCharm可以开发GO,要Idea干毛。再一想,PyCharm和Idea都是IntelliJ的产品,支持应该不会差,于是果断放弃Idea。PyCharm搭建GO开发环境其实并不是太难,咳咳,主要自己没弄清楚GOROOT和GOPATH的配置和使用走了弯路,特意记录这次过程。细致介绍,造福大众!(笔者是windows环境,linux、MAC OS大同小异)GOPATH是go的项目目录,就是接下来写程序的目录,我放在E:\GoProjects,在系统变量方框中,新建GORATH变量:cmd 命令窗口输入go version查看安转go的版本,在输入go env可以查看所有环境配置信息,重点关注我们手动配置的信息:进入到插件搜索界面,在输入框中输入go,选择第二项安转,安转有点久,可能会失败,多试几次就OK。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。你可以这样做,打开你的Pycharm编译器,然后点击左上角的 File - Close Project
Consul是由HashiCorp基于Go语言开发的支持多数据中心的分布式高可用服务发布和注册软件, 采用Raft算法保持服务的一致性, 且支持健康检查.
和Eureka的侵入式服务中心不同的是, Consul是以独立的软件形式运行, 对项目侵入性小, 更方便部署.
上图为多机房数据中心部署, 每个数据中心至少三台Consul, 一台LEADER, 另外的两台是FOLLOWER.
代理是Consul集群上每个成员的守护进程, 它是由consul agent命令开始运行. 代理能够以客户端或服务器模式运行. 由于所有节点都必须运行代理, 所以将节点引用为客户端或服务器更为简单, 但还有其他实例的代理. 所有代理可以运行DNS或HTTP接口, 并负责运行检查和保持服务同步.
客户端可以将所有RPC请求转发到服务器的代理. 客户端是相对无状态的. 客户端执行的唯一后台活动是LANgossip池. 它消耗最小的资源开销和少量的网络带宽.
服务器端是具有扩展的功能的代理, 它主要参与维护集群状态, 响应RPC查询, 与其他数据中心交换WAN gossip, 以及向leader节点或远程数据中心转发查询.
虽然数据中心的定义似乎很明显, 但仍有一些细微的细节必须考虑. 比如说, 在EC2中, 多个可用中心 (EC2和AZ是AWS里的概念, 不了解的话可以去看看AWS文档) 是否应该被认为是一个单个的数据中心呢? 我们将一个数据中心定义为一个私有, 低延迟和高带宽的网络环境, 这不包括通过公共互联网的通信. 但是为了我们的目的, 单个EC2区域内的多个可用区域将被视为单个数据中心的一部分.
在我们的文档中, "一致性"的意思是对于被选举出的leader以及事物的顺序的认同. 因为这些事件被应用到有限状态机上, 我们对一致性的定义又暗含了复制备份的状态机的一致性.
consul是建立在Serf之上的, 它提供了一个完整的gossip协议, 用在很多地方. Serf提供了成员管理, 故障检测和事件广播的功能. Gossip的节点到节点之间的通信使用了UDP协议.
指在同一局域网或数据中心的节点上的LAN Gossip池. Client到Server会通过Lan Gossip, 所有的节点都在Gossip pool中
指包含服务器的WAN Gossip池, 这些服务器在不同的数据中心, 通过网络进行通信.
以开发模式启动: consul agent -dev, 如果需要Web界面的话加-ui即可, 集群的LAN服务默认启动在8301端口上, WAN服务默认启动在8302端口上, Web服务默认端口是8500, DNS服务默认端口是8600, gRPC服务默认端口是8502
默认是以server角色启动的, 启动后用consul members可以查看服务下的节点信息, 或者通过HTTP接口请求 也可以看到节点信息数据以json形式返回.
使用dig命令可以查看consul中DNS服务的一些信息, 命令如: dig @127.0.0.1 -p 8600 nodeName
一般情况下consul会在启动时通过参数的形式进行配置, 但这样子比较麻烦, 我们通过在/etc/consul.d目录下来新建配置文件的形式, 在每次启动时加载配置文件来进行启动.
consul的配置信息可以在 查看, 其中部分选项如下:
按照惯例, 我们将配置文件放在/etc/consul.d/目录下, 分别在几个机器上创建该目录. 在以bootstrap模式启动的server1上, 我们创建/etc/consul.d/bootstrap和/etc/consul.d/server目录, 在server2和server3上我们创建/etc/consul.d/server目录, 在agent上, 我们创建/etc/consul.d/agent目录.
server1的bootstrap目录下的配置文件config.json如下:
其他两台服务器中server目录下的配置文件config.json如下:
代理服务器中agent目录下的config.json如下:
这样, 首先启动server1上的consul: consul agent -config-dir /etc/consul.d/bootstrap, 然后依次启动server2, server3上的consul:consul agent -config-dir /etc/consul.d/server. 这样, 三个consul server就组成了一个cluster. 此时server1上的consul运行在bootstrap状态下. 可以在不与server2以及server3商议的情况下直接执行决议, 此时我们终结server1上运行的consul, 并执行consul agent -config-dir /etc/consul.d/server, 让server1以普通server的身份重新加入cluster. 最后启动agent模式 consul agent -config-dir /etc/consul.d/agent.
** 注意: encrypt可以使用consul keygen命令来生成, 所有服务器上需要配置一样, 如果因为哪里配置错误导致启动失败, 修改后还报失败的话, 可以尝试删除$data_dir/serf/local.keyring后重新启动 **
在需要部署服务的机器上同样创建/etc/consul.d/, 然后把不同的服务分开不同的目录, 或者就直接在此目录下创建json配置文件, 如: web1.json, web2.json等.
然后再通过consul agent指定配置文件的方式启动服务, 可以直接在配置文件中指定要注册的服务, 也可以在启动后使用consul join命令来主动注册服务, 这样再次登录到web管理界面就可以发现我们新建的服务了.
Q: 什么是bootstrap模式?
A: 使用该模式启动的server端会自动把自己选择为leader, 在搭建集群时为了方便会预先设置一台服务器为bootstrap启动