consul集群:组建由三个服务器节点组成的服务注册中心

consul集群:组建由三个服务器节点组成的服务注册中心

因为用户开发测试,手里没有那么多的机器,用virtualbox安装虚拟机来作为服务器节点。

准备工作:

需要安装第一太centos7操作系统的虚拟机,然后从这台复制生成另外两台;安装虚拟机的过程省略了,太简单了几乎每个人都会。这里有一点需要注意一下,省的虚拟机网络配置不正确带来不应该的麻烦:

consul集群:组建由三个服务器节点组成的服务注册中心

连接方式:选择桥接网卡

界面名称:选择本电脑一个活动的网络连接(网卡接上了网线)

MAC地址:记住这个网卡物理地址,配置centos虚拟机时必须用到这个物理地址标识每张网卡。

启动虚拟机登陆进去:

配置虚拟机网卡:vim /etc/sysconfig/network-scripts/ifcfg-enp0s3

修改如下:

HWADDR=08:00:27:9C:9F:48

TYPE=Ethernet

PROXY_METHOD=none

BROWSER_ONLY=no

BOOTPROTO=static

DEFROUTE=yes

IPV4_FAILURE_FATAL=no

IPV6INIT=yes

IPV6_AUTOCONF=yes

IPV6_DEFROUTE=yes

IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy

NAME=enp0s3

UUID=0329e456-3ba5-45b8-8e1b-3ae520025529

ONBOOT=yes

IPADDR=192.168.42.119

NETMASK=255.255.255.0

GATEWAY=192.168.42.129

DNS=192.168.42.129

严重说明:HWADDR=08:00:27:9C:9F:48 这个物理地址就是新建虚拟机时网卡的MAC地址,这里没两位用冒号隔开,全是大写,

UUID,必须是唯一的值,不能和其他网卡相同

NAME:是网卡配置文件的后缀名,ifcfg-enp0s3文件的enp0s3,如果乱取名系统是找不到网卡的配置参数的

ONBOOT=yes 启动时自动启用网卡

其他都是ip,网关掩码和域名服务器地址,没什么可说

修改后保存,重启网络服务: service network restart

修改一下服务器的名字:vim /etc/hostname

把默认的名字改成:node1

重启服务;systemctl restart systemd-hostnamed.service

这样我们就有了第一台centos7虚拟机,利用它可以快速复制出另外两台:hostname:node2的ip:192.168.42.119和hostname:node3的ip:192.168.42.121,复制时记得勾选重新生成mac地址选项。在重复第一台配置就可以了。

consul集群安装部署:

从hashcorp官网下载最新版的consul压缩包,解压后放到虚拟机的某个你喜欢的目录,我这里放到:/var/consul_1.5.1,consul一整个程序只有一个文件consul(**nix系统),consul.exe(windows系统)

修改:/etc/profile配置文件,最后追加一行:PATH=$PATH:/var/consul_1.5.1

重启配置:source /etc/profile

启动node1上的consul agent为server模式:

执行:consul agent -server -bootstrap-expect 3 -data-dir /tmp/consul -bind=192.168.42.119 -ui-dir ./consul_ui/ -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0

第一次启动,会有 No cluster leader的failed,不要管,第一次启动,还没有任何集群和集群的server leader当然会提示,之后cosul 会自动把这台节点选为leader节点。bind是本机ip

client默认是本地才能访问,外部访问改为0.0.0.0

启动第一个节点后:

在node1的命令行终端查看集群成员

consul members

输出:

Node Address Status Type Build Protocol DC Segment

node1 192.168.42.119:8301 alive server 1.5.1 2 dc1

node2上启动consul

consul agent -server -data-dir /tmp/consul -bind=192.168.42.120 -ui-dir ./consul_ui/ -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0

在node2上多开一个命令终端执行: consul members

Node Address Status Type Build Protocol DC Segment

node1 192.168.42.120:8301 alive server 1.5.1 2 dc1

把node2加入node1为leader的集群中取

consul join 192.168.42.119 如果没有报错

执行 consul members 输出

Node Address Status Type Build Protocol DC Segment

node1 192.168.42.119:8301 alive server 1.5.1 2 dc1

node2 192.168.42.120:8301 alive server 1.5.1 2 dc1

说明node2已经加入了node1为leader的集群

启动node3的consul agent

consul agent -server -data-dir /tmp/consul -bind=192.168.42.121 -ui-dir ./consul_ui/ -rejoin -config-dir=/etc/consul.d/ -client 0.0.0.0

再执行 consul join 192.168.42.119 加入集群

consul members 输出

Node Address Status Type Build Protocol DC Segment

node1 192.168.42.119:8301 alive server 1.5.1 2 dc1

node2 192.168.42.120:8301 alive server 1.5.1 2 dc1

node3 192.168.42.121:8301 alive server 1.5.1 2 dc1

这个时候三个server模式的节点都加入集群,如果加入client模式的节点,方法和启动server模式类型,不加-server参数,consul agent 默认是以client模式运行

打开任意一个节点的终端窗口:

curl http://192.168.42.119:8500/v1/catalog/nodes 输出集群成员列表

[{"ID":"e6cd42a7-fc35-588f-b924-7b656835d7a8","Node":"node1","Address":"192.168.42.119","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.42.119","wan":"192.168.42.119"},"Meta":{"consul-network-segment":""},"CreateIndex":3518,"ModifyIndex":3519},{"ID":"9c7fa402-cb2c-fbb3-6b8a-ed70df00831c","Node":"node2","Address":"192.168.42.120","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.42.120","wan":"192.168.42.120"},"Meta":{"consul-network-segment":""},"CreateIndex":5,"ModifyIndex":6},{"ID":"5451b32b-fe1d-a65e-0ce9-c14fbb8c71b1","Node":"node3","Address":"192.168.42.121","Datacenter":"dc1","TaggedAddresses":{"lan":"192.168.42.121","wan":"192.168.42.121"},"Meta":{"consul-network-segment":""},"CreateIndex":3385,"ModifyIndex":3389}]

也可以在任意一台可以访问这三个虚拟机的电脑上从浏览器打开 http://192.168.42.119:8500/v1/catalog/nodes

测试一下consul的key-value存储引擎的功能:

从三个节点任意一台启动终端窗口

consul kv put one 99886677

终端返回:Success! Data written to: one说明已经写入成功一个key :名字one值99886677

consul kv get one 返回

99886677

转到另外两个的任意一个节点,执行

consul kv get one

结果都一样

consul info 查询当前节点信息

sonsul leave 是当前节点从集群中移除,移除后当前不再参与数据复制,ctrl+c只是关闭consul agent进程,但是并没有从集群中真正移除

用consul提供的http API查询,ip可以是任意一台ip

http://192.168.42.119:8500/v1/kv/one

consul提供的常见的http api,http api查询的key的值经过base64编码

查询集群成员列表

http://:8500/v1/catalog/nodes

服务注册

http://ip:8500/v1/catalog/service/register

注销服务

http://ip:8500/v1/catalog/service/deregister

服务查询:按查询服务详细

http://ip:8500/v1/catalog/service/

查询key的值

http://ip:8500/v1/kv/

循环查询全部key

http://ip:8500/v1/kv/?recurse

查询某种状态的服务,状态值

http://ip:8500/v1/health/state/

consul使用心得后续会继续更新

consul集群:组建由三个服务器节点组成的服务注册中心

consul集群:组建由三个服务器节点组成的服务注册中心

consul集群:组建由三个服务器节点组成的服务注册中心

consul集群:组建由三个服务器节点组成的服务注册中心


分享到:


相關文章: