发布:2023/12/7 15:33:11作者:大数据 来源:大数据 浏览次数:459
https://www.cnblogs.com/edisonchou/p/9124985.html
https://www.cnblogs.com/edisonchou/p/9148034.html
https://www.cnblogs.com/axzxs2001/p/8487521.html
https://blog.csdn.net/hailang2ll/article/details/82020027
https://blog.csdn.net/hailang2ll/article/details/82079192
consul访问键值,key/value,ip地址根据情况可能不同
访问所有键值
http://192.168.80.100:8500/v1/kv/?recurse
|
[{"LockIndex":0,"Key":"foo","Flags":0,"Value":"MTMyMzIx","CreateIndex":3951,"ModifyIndex":4026},{"LockIndex":0,"Key":"girl","Flags":0,"Value":"Im5ldyI=","CreateIndex":4088,"ModifyIndex":4088}] |
访问单个key=foo:
http://192.168.80.100:8500/v1/kv/foo
|
[{"LockIndex":0,"Key":"girl","Flags":0,"Value":"Im5ldyI=","CreateIndex":4088,"ModifyIndex":4088}] |
另外value值进行了base64加密,由于Consul的Value是经过Base64编码的(主要是为了允许非UTF-8的字符),所以这里看到的是编码后的结果。我们可以通过解码得到最终的Value值。
Docker安装consul集群
假设三台主机的ip分别为:
主机一:10.21.14.164
主机二:10.21.14.165
主机三:10.21.14.166
三台主机的安装步骤相似,以主机一为例:
1. 安装docker服务:
2. 启动docker服务:
3. 查找consul镜像:
docker search consul
4. 下载官方consul镜像:
docker pull consul
5. 下载完后可检查镜像:
docker images
6. 三台主机上建立数据目录和配置目录,目录为空即可:
mkdir -p /app/consul/data
mkdir -p /app/consul/conf
7. 三台主机依次启动容器:
主机一的命令为:
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d docker.io/consul consul agent -server -bind=10.21.14.164 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config
主机二的命令为:
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d docker.io/consul consul agent -server -bind=10.21.14.165 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -join 10.21.14.164
主机三的命令为:
docker run --net=host --name consul -v /app/consul/data:/consul/data -v /app/consul/conf:/consul/config -d docker.io/consul consul agent -server -bind=10.21.14.166 -client 0.0.0.0 -ui -bootstrap-expect=3 -data-dir /consul/data -config-dir /consul/config -join 10.21.14.164
命令说明:
--net=host:采用主机网络配置,若采用默认的bridge模式,则会存在容器跨主机间通信失败的问题
-v /data/consul_data/data:/consul/data:主机的数据目录挂载到容器的/consul/data下,因为该容器默认的数据写入位置即是/consul/data
-v /data/consul_data/conf:/consul/config:主机的配置目录挂载到容器的/consul/conf下,因为该容器默认的数据写入位置即是/consul/conf
consul agent -server:consul的server启动模式
consul agent -bind=192.168.0.3:consul绑定到主机的ip上
consul agent -bootstrap-expect=3:server要想启动,需要至少3个server
consul agent -data-dir /consul/data:consul的数据目录
consul agent -config-dir /consul/config:consul的配置目录
consul agent -join 192.168.0.1:对于主机二、三来说,需要加入到这个集群里
-client 0.0.0.0 -ui : 启动ui界面
都启动完成后,可以通过如下命令观察consul日志,了解启动情况:
docker logs 容器id/容器名称
8. 检查集群状态:
docker exec -it 容器id /bin/sh
通过该命令进入容器,查看集群信息:
[release@sh-lbs02 data]$ docker exec -it consul /bin/sh/
# consul members
至此,集群已启动完成,consul的端口打开较多,可以在主机上观察其端口情况:
[release@sh-web02 ~]$netstat -tlnp|grep consul
[sudo] passwordfor release:
tcp 00192.168.0.1:83000.0.0.0:* LISTEN330/consul
tcp 00192.168.0.1:83010.0.0.0:* LISTEN330/consul
tcp 00192.168.0.1:83020.0.0.0:* LISTEN330/consul
tcp 00127.0.0.1:85000.0.0.0:* LISTEN330/consul
tcp 00127.0.0.1:86000.0.0.0:* LISTEN330/consul
9. 如何启动consul客户端?假设consul客户端与服务端在同一个主机上:
首先,建立客户端的配置目录和数据目录:
mkdir-p /app/consul_cli/data
mkdir-p /app/consul_cli/conf
其次,在配置目录下分配客户端使用的端口,避免与服务端的端口冲突:
cd /app/consul_cli/conf
touch basic.json
vi basic.json
#内容如下:
{
"ports": {
"http":18501,
"dns":18601,
"rpc":18401,
"serf_lan":18301,
"serf_wan":18302,
"server":18300 }
}
最后,启动客户端:
docker run --net=host --name consul-cli -v /app/consul_cli/data:/consul/data -v /app/consul_cli/conf:/consul/config -d docker.io/consul consul agent -bind=10.21.14.166 -data-dir/consul/data -config-dir/consul/config -join10.21.14.164
作者:soane1983
链接:https://www.jianshu.com/p/565a1f24d730
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
docker从容器里面拷文件到宿主机或从宿主机拷文件到docker容器里面
1、从容器里面拷文件到宿主机?
答:在宿主机里面执行以下命令
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
示例: 假设容器名为testtomcat,要从容器里面拷贝的文件路为:/usr/local/tomcat/webapps/test/js/test.js, 现在要将test.js从容器里面拷到宿主机的/opt路径下面,那么命令应该怎么写呢?
答案:在宿主机上面执行命令
|
docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt |
2、从宿主机拷文件到容器里面
答:在宿主机里面执行如下命令
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
示例:假设容器名为testtomcat,现在要将宿主机/opt/test.js文件拷贝到容器里面的/usr/local/tomcat/webapps/test/js路径下面,那么命令该怎么写呢?
答案:在宿主机上面执行如下命令
|
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js |
3、在这里在记录一个问题,怎么看容器名称?
执行命令:docker ps,出现如图所示,其中NAMES就是容器名了。
4.需要注意的是,不管容器有没有启动,拷贝命令都会生效。
宿主机,virturalbox虚拟机,docker,consul集群
宿主机和虚拟机区别:
宿主机是虚拟机的物理基础,虚拟机存在于宿主机中,与宿主机共享使用硬件。宿主机的运行是虚拟机运行的前提与基础。
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
宿主机就是主机,这个概念是相对于子机而言的,比如安装有虚拟机的话,那么相对于虚拟机而言,正在使用的计算机就是宿主机,虚拟机是安装在主机上的,必须在主机上才能运行,主机就是一个“宿主”。
docker可以运行在宿主机上,也可以运行于虚拟机上。
宿主机进入虚拟机virtualbox命令:
$docker-machine ssh server1
docker run -d --name=node1 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 8300:8300 \
-p 8301:8301 \
-p 8301:8301/udp \
-p 8302:8302/udp \
-p 8302:8302 \
-p 8400:8400 \
-p 8500:8500 \
-p 8600:8600 \
-h node1 \
consul agent -server -bind=172.17.0.2 -bootstrap-expect=3 -node=node1 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
docker run -d --name=node2 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 9300:8300 \
-p 9301:8301 \
-p 9301:8301/udp \
-p 9302:8302/udp \
-p 9302:8302 \
-p 9400:8400 \
-p 9500:8500 \
-p 9600:8600 \
-h node2 \
consul agent -server -bind=172.17.0.3 \
-join=192.168.99.103 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node2 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
docker run -d --name=node3 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
-p 10300:8300 \
-p 10301:8301 \
-p 10301:8301/udp \
-p 10302:8302/udp \
-p 10302:8302 \
-p 10400:8400 \
-p 10500:8500 \
-p 10600:8600 \
-h node3 \
consul agent -server -bind=172.17.0.4 \
-join=192.168.99.103 -node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node3 \
-data-dir=/tmp/data-dir -client 0.0.0.0 -ui
docker run -d --name=node4 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \
-p 11300:8300 \
-p 11301:8301 \
-p 11301:8301/udp \
-p 11302:8302/udp \
-p 11302:8302 \
-p 11400:8400 \
-p 11500:8500 \
-p 11600:8600 \
-h node4 \
consul agent -bind=172.17.0.5 -retry-join=192.168.99.103 \
-node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node4 -client 0.0.0.0 -ui
docker run -d --name=node5 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \
-p 12300:8300 \
-p 12301:8301 \
-p 12301:8301/udp \
-p 12302:8302/udp \
-p 12302:8302 \
-p 12400:8400 \
-p 12500:8500 \
-p 12600:8600 \
-h node5 \
consul agent -bind=172.17.0.6 -retry-join=192.168.99.103 \
-node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node5 -client 0.0.0.0 -ui
docker run -d --name=node6 --restart=always \
-e 'CONSUL_LOCAL_CONFIG={"leave_on_terminate": true}' \
-p 13300:8300 \
-p 13301:8301 \
-p 13301:8301/udp \
-p 13302:8302/udp \
-p 13302:8302 \
-p 13400:8400 \
-p 13500:8500 \
-p 13600:8600 \
-h node6 \
consul agent -bind=172.17.0.7 -retry-join=192.168.99.103 \
-node-id=$(uuidgen | awk '{print tolower($0)}') \
-node=node6 -client 0.0.0.0 -ui
docker run --name server1 -d --net=host -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
consul agent -server -ui -bootstrap-expect=3 \
-data-dir=/tmp/consul -node=server1 \
-client=0.0.0.0 -bind=192.168.99.103
docker run --name server2 -d --net=host -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
consul agent -server -ui -bootstrap-expect=3 \
-data-dir=/tmp/consul -node=server2 \
-client=0.0.0.0 -bind=192.168.99.104 -join 192.168.99.103
docker run --name server3 -d --net=host -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
consul agent -server -ui -bootstrap-expect=3 \
-data-dir=/tmp/consul -node=server3 \
-client=0.0.0.0 -bind=192.168.99.105 -join 192.168.99.103
docker run --name client1 -d --net=host -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
consul agent -node=client1 \
-client=0.0.0.0 -bind=192.168.99.106 -retry-join=192.168.99.103
docker run --name client2 -d --net=host -e 'CONSUL_LOCAL_CONFIG={"skip_leave_on_interrupt": true}' \
consul agent -node=client2 \
-bind=192.168.99.107 -retry-join=192.168.99.103
--name
docker参数,设置容器名称
-node
consul agent的参数,设置集群结点名称
-bind
绑定集群内部ip,此ip可以被集群中其它结点访问到
consul agent参数参考:https://www.consul.io/docs/agent/options.html
server类型结点可以访问集群ui界面,client模式则不可以。
http://192.168.99.103:8500
http://192.168.99.104:8500
http://192.168.99.105:8500
查看集群结点各个server信息:进入node1虚拟机执行命令:
docker exec -t node1 consul members
结果显示:
Node Address Status Type Build Protocol DC Segment
server1 192.168.99.103:8301 alive server 1.6.2 2 dc1 <all>
server2 192.168.99.104:8301 alive server 1.6.2 2 dc1 <all>
server3 192.168.99.105:8301 alive server 1.6.2 2 dc1 <all>
client1 192.168.99.106:8301 alive client 1.6.2 2 dc1 <default>
client2 192.168.99.107:8301 alive client 1.6.2 2 dc1 <default>
查看目前全部的consul的角色状态:
docker exec -t node1 consul operator raft list-peers
结果:
docker@node1:~$ docker exec -t beautiful_hugle consul operator raft list-peers
Node ID Address State Voter RaftProtocol
server1 0111e3b9-6ef6-3b96-3c8a-f35adc10b997 192.168.99.103:8300 leader true 3
server2 442b7edf-a273-6ea4-7555-28ade8e1405f 192.168.99.104:8300 follower true 3
server3 ccf7e7cd-afba-ebf1-4b4c-5b42a2036ad2 192.168.99.105:8300 follower true 3
虚拟机中查看docker启动日志:
docker logs 容器id/容器名称
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"/bin/bash\": stat /bin/bash: no such file or directory": unknown
进入docker容器内部命令:
docker exec -it 容器id /bin/sh
或者
docker exec -it 容器id /bin/bash
宿主机进入node1虚拟机,新建如下文件夹和文件,将.netcore服务注册到Consul(通过配置文件来注册服务,其中,192.168.1.106为本物理机地址,物理机上运行宿主机):执行如下命令,进行配置文件注册服务
vi /shared/app/consul/conf/services_config.json
代码如下:
{
"services":[
{
"id": "CLIENT_SERVICE_01",
"name" : "MVCClientService",
"tags": [
"MVCClientService01"
],
"address": "192.168.1.106",
"port": 8820,
"checks": [
{
"name": "clientservice_check",
"http": "http://192.168.1.106:8820",
"interval": "10s",
"timeout": "5s"
}
]
},
{
"id": "CLIENT_SERVICE_02",
"name" : "APIClientService",
"tags": [
"APIClientService02"
],
"address": "192.168.1.106",
"port": 8810,
"checks": [
{
"name": "clientservice_check",
"http": "http://192.168.1.106:8810/api/values",
"interval": "10s",
"timeout": "5s"
}
]
}
]
}
文件保存不了,用sudo提升权限
linux vi常用命令:
退出:q!
保存退出:wq
将宿主机Client1的配置文件实现服务注册
docker run --name client1 -d --net=host \
-v /shared/app/consul/data:/consul/data \
-v /shared/app/consul/conf:/consul/config \
consul agent -client=0.0.0.0 -data-dir=/consul/data -config-dir=/consul/config \
-bind=192.168.99.106 -join=192.168.99.103
说明:shared目录为宿主机在virtualbox中的共享目录,这样就可以在启动Docker的同时,启动consul加载配置文件,实现服务注册
通过url提供的api实现服务注册
curl -X PUT -d '{"id": "jetty","name": "jetty","address": "192.168.1.106","port": 8820,"tags": ["dev"],"checks": [{"http": "http://192.168.1.106:8820","interval": "5s"}]}' \
http://192.168.99.106:8500/v1/agent/service/register
删除服务,删除后不会恢复
curl -v -X PUT http://192.168.99.106:8500/v1/agent/service/deregister/jetty
说明:jetty为ServiceID
以下两个操作,删除服务后,隔一会还恢复加入
curl -X PUT -d '{"Datacenter":"dc1","Node":"client1","ServiceID":"jetty"}' http://192.168.99.106:8500/v1/catalog/deregister
或者
curl --request PUT --data '{"Datacenter":"dc1","Node":"client1","ServiceID":"jetty"}' http://192.168.99.106:8500/v1/catalog/deregister
声明:本站内容来源于原创和互联网,尊重作者版权,转载请注明来源网址,欢迎收藏,谢谢!