因为用户开发测试,手里没有那么多的机器,用virtualbox安装虚拟机来作为服务器节点。
准备工作:
需要安装第一太centos7操作系统的虚拟机,然后从这台复制生成另外两台;安装虚拟机的过程省略了,太简单了几乎每个人都会。这里有一点需要注意一下,省的虚拟机网络配置不正确带来不应该的麻烦:
连接方式:选择桥接网卡
界面名称:选择本电脑一个活动的网络连接(网卡接上了网线)
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使用心得后续会继续更新
閱讀更多 暫時取的名 的文章