AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
## 一、环境准备 | IP | 节点名称 | Consul角色 | | --- | --- | --- | | 192.168.161.3 | s1 | bootstrap Server | | 192.168.161.4 | s2 | Server | | 192.168.161.5 | s3 | Server | | 192.168.161.6 | c1 | Client(UI) | > bootstrap Server就是人为在consul server启动的时候指定Server Leader,不需要选举。参考下文中agent启动参数 -bootstrap参数说明。 ## 二、consul 端口说明 | 端口 | 说明 | | --- | --- | | TCP/8300 | 8300 端口用于服务器节点。客户端通过该端口 RPC 协议调用服务端节点。服务器节点之间相互调用 | | TCP/UDP/8301 | 8301 端口用于单个数据中心所有节点之间的互相通信,即对 LAN 池信息的同步。它使得整个数据中心能够自动发现服务器地址,分布式检测节点故障,事件广播(如领导选举事件)。 | | TCP/UDP/8302 | 8302 端口用于单个或多个数据中心之间的服务器节点的信息同步,即对 WAN 池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。 | | 8500 | 8500 端口基于 HTTP 协议,用于 API 接口或 WEB UI 访问。 | | 8600 | 8600 端口作为 DNS 服务器,它使得我们可以通过节点名查询节点信息。 | 所以主机节点的防火墙开放如下端口: ~~~ firewall-cmd --zone=public --add-port=8300/tcp --permanent; firewall-cmd --zone=public --add-port=8301/tcp --permanent; firewall-cmd --zone=public --add-port=8302/tcp --permanent; firewall-cmd --zone=public --add-port=8500/tcp --permanent; firewall-cmd --zone=public --add-port=8600/tcp --permanent; firewall-cmd --reload ~~~ ## 三、agent启动参数 consul agent 启动命令参数,`consul agent --help` ~~~ -advertise:通知展现地址用来改变我们给集群中的其他节点展现的地址,一般情况下-bind地址就是展现地址 -bootstrap:用来控制一个server是否在bootstrap模式,在一个datacenter中只能有一个server处于bootstrap模式,当一个server处于bootstrap模式时,可以自己选举为raft leader。 -bootstrap-expect:在一个datacenter中期望提供的server节点数目,当该值提供的时候,consul一直等到达到指定sever数目的时候才会引导整个集群,该标记不能和bootstrap公用。 -bind:该地址用来在集群内部的通讯,集群内的所有节点到地址都必须是可达的,默认是0.0.0.0。 -client:consul绑定在哪个client地址上,这个地址提供HTTP、DNS、RPC等服务,默认是127.0.0.1。 -config-file:明确的指定要加载哪个配置文件 -config-dir:配置文件目录,里面所有以.json结尾的文件都会被加载 -data-dir:提供一个目录用来存放agent的状态,所有的agent都需要该目录,该目录必须是稳定的,系统重启后都继续存在。 -dc:该标记控制agent的datacenter的名称,默认是dc1。 -encrypt:指定secret key,使consul在通讯时进行加密,key可以通过consul keygen生成,同一个集群中的节点必须使用相同的key。 -join:加入一个已经启动的agent的ip地址,可以多次指定多个agent的地址。如果consul不能加入任何指定的地址中,则agent会启动失败。默认agent启动时不会加入任何节点。 -retry-join:和join类似,但是允许你在第一次失败后进行尝试。 -retry-interval:两次join之间的时间间隔,默认是30s。 -retry-max:尝试重复join的次数,默认是0,也就是无限次尝试。 -log-level:consul agent启动后显示的日志信息级别。默认是info,可选:trace、debug、info、warn、err。 -node:节点在集群中的名称,在一个集群中必须是唯一的,默认是该节点的主机名。 -protocol:consul使用的协议版本。 -rejoin:使consul忽略先前的离开,在再次启动后仍旧尝试加入集群中。 -server:定义agent运行在server模式,每个集群至少有一个server,建议每个集群的server不要超过5个。 -syslog:开启系统日志功能,只在linux/osx上生效。 -ui-dir:提供存放web ui资源的路径,该目录必须是可读的。 -pid-file:提供一个路径来存放pid文件,可以使用该文件进行SIGINT/SIGHUP(关闭/更新)agent。 ~~~ 举例:启动Bootstrap Server,具体启动参数实例说明看下文CMD\_OPTS ~~~ consul agent -server -bootstrap 其他启动参数 ~~~ 举例:启动Server,不加-server启动的agent就是cllient运行模式 ~~~ consul agent -server 其他启动参数 ~~~ ## 四、安装过程 因为consul每次启动都需要配置很多的参数,为了将启动流程及参数固化下来,我们通常会将它写成一个linux 的systemd服务。 > 不了解systemd服务?白话说就是linux服务启动、停止、重启脚本的一个模板。详细学习的话可以参考[https://www.cnblogs.com/jhxxb/p/10654554.html](https://www.cnblogs.com/jhxxb/p/10654554.html) ### consul下载、解压和目录创建 ~~~ wget https://releases.hashicorp.com/consul/1.7.2/consul_1.7.2_linux_amd64.zip unzip consul_1.7.2_linux_amd64.zip mv consul /usr/local/bin/ mkdir -p /opt/consul/{data,config} #创建数据目录和配置目录 ~~~ ### consul配置文件 将以下的内容写入对应主机的配置文件 192.168.161.3:/etc/sysconfig/consul,-bootstrap指定了该agent为Server Leader,无需选举。 ~~~ CMD_OPTS="agent -server -data-dir=/opt/consul/data -node=s1 -config-dir=/opt/consul/config -bind=192.168.161.3 -rejoin -client=0.0.0.0 -bootstrap" ~~~ 192.168.161.4:/etc/sysconfig/consul,-join要求该agent启动之后加入192.168.161.3为leader的集群 ~~~ CMD_OPTS="agent -server -data-dir=/opt/consul/data -node=s2 -config-dir=/opt/consul/config -bind=192.168.161.4 -rejoin -client=0.0.0.0 -join 192.168.161.3" ~~~ 192.168.161.5:/etc/sysconfig/consul,-join要求该agent启动之后加入192.168.161.3为leader的集群 ~~~ CMD_OPTS="agent -server -data-dir=/opt/consul/data -node=s3 -config-dir=/opt/consul/config -bind=192.168.161.5 -rejoin -client=0.0.0.0 -join 192.168.161.3" ~~~ 192.168.161.6:/etc/sysconfig/consul,该节点没有指定-server,说明它是client运行模式。-ui说明该client提供web UI的管理界面。 ~~~ CMD_OPTS="agent -ui -data-dir=/opt/consul/data -node=c1 -config-dir=/opt/consul/config -bind=192.168.161.6 -rejoin -client=0.0.0.0 -join 192.168.161.3" ~~~ ### linux consul systemd服务配置 > 这一步可以不做,只是用来简化每次启动consul都输入一串consul命令的痛苦。如果这一小节内容无法理解,直接用consul 启动consul实例即可 创建service配置文件 ~~~ touch /usr/lib/systemd/system/consul.service ~~~ 通过cat命令将如下内容写入文件 ~~~ cat > /usr/lib/systemd/system/consul.service<<EOF [Unit] Description=consul After=network.target [Service] EnvironmentFile=-/etc/sysconfig/consul ExecStart=/usr/local/bin/consul \$CMD_OPTS ExecReload=/bin/kill -HUP \$MAINPID KillSignal=SIGTERM [Install] WantedBy=multi-user.target EOF ~~~ 服务配置完成之后需要重新加载systemd配置文件 ~~~ systemctl daemon-reload ~~~ 如果希望consul服务开机启动,执行下面命令 ~~~ systemctl enable consul #启动命令 journalctl -f #查看启动日志,都可以 journalctl -xe #查看启动日志,都可以 ~~~ 手动启动执行下面的命令 ~~~ systemctl start consul ~~~ 因为上面的CMD\_OPTS中制定了-join参数,所以我们就不用手动的把启动后的agent加入集群。如果没有加-join参数,我们可以使用如下命令手动将新启动的agent加入集群。 ~~~ consul join <Leader Server IP> # 非Leader节点执行 join ~~~ ## 五、consul集群安装结果验证 通过consul members命令查看该集群agent的组成(分不出谁是leader)。使用consul info命令可以查看更详细的集群信息,可以分出leader。 ~~~ consul members Node Address Status Type Build Protocol DC Segment s1 192.168.161.3:8301 alive server 1.7.2 2 dc1 <all> s2 192.168.161.4:8301 alive server 1.7.2 2 dc1 <all> s3 192.168.161.5:8301 alive server 1.7.2 2 dc1 <all> c1 192.168.161.6:8301 alive client 1.7.2 2 dc1 <default> ~~~ ### web UI 访问192.168.161.6:8500/ui可以查看集群的agent节点组成,也可以表示我们安装成功。 ## 六、consul命令详解(用到查一下、不用记) * agent指令是consul的核心,它运行agent来维护成员的重要信息、运行检查、服务宣布、查询处理等等。 * join指令告诉consul agent加入一个已经存在的集群中,一个新的consul agent必须加入一个已经有至少一个成员的集群中,这样它才能加入已经存在的集群中,如果你不加入一个已经存在的集群,则agent是它自身集群的一部分,其他agent则可以加入进来。agent可以加入其他agent多次。如果你想加入多个集群,则可以写多个地址,consul会加入所有的地址。 * leave指令触发一个优雅的离开动作并关闭agent,节点离开后不会尝试重新加入集群中。运行在server状态的节点,节点会被优雅的删除,这是很严重的,在某些情况下一个不优雅的离开会影响到集群的可用性。 * members指令输出consul agent目前所知道的所有的成员以及它们的状态,节点的状态只有alive、left、failed三种状态。 * info指令提供了各种操作时可以用到的debug信息,对于client和server,info有返回不同的子系统信息,目前有以下几个KV信息:agent(提供agent信息),consul(提供consul库的信息),raft(提供raft库的信息),serf\_lan(提供LAN gossip pool),serf\_wan(提供WAN gossip pool)。 * event命令提供了一种机制,用来fire自定义的用户事件,这些事件对consul来说是不透明的,但它们可以用来构建自动部署、重启服务或者其他行动的脚本。 * exec指令提供了一种远程执行机制,比如你要在所有的机器上执行uptime命令,远程执行的工作通过job来指定,存储在KV中。agent使用event系统可以快速的知道有新的job产生,消息是通过gossip协议来传递的,因此消息传递是最佳的,但是并不保证命令的执行。事件通过gossip来驱动,远程执行依赖KV存储系统(就像消息代理一样)。 * force-leave可以强制consul集群中的成员进入left状态(空闲状态),记住,即使一个成员处于活跃状态,它仍旧可以再次加入集群中,这个方法的真实目的是强制移除failed的节点。如果failed的节点还是网络的一部分,则consul会周期性的重新链接failed的节点,如果经过一段时间后(默认是72小时),consul则会宣布停止尝试链接failed的节点。force-leave指令可以快速的把failed节点转换到left状态。 * keygen指令生成加密的密钥,可以用在consul agent通讯加密。 * monitor指令用来链接运行的agent,并显示日志。monitor会显示最近的日志,并持续的显示日志流,不会自动退出,除非你手动或者远程agent自己退出。 * reload指令可以重新加载agent的配置文件。SIGHUP指令在重新加载配置文件时使用,任何重新加载的错误都会写在agent的log文件中,并不会打印到屏幕。 * version指令用作打印consul的版本 * watch指令提供了一个机制,用来监视实际数据视图的改变(节点列表、成员服务、KV),如果没有指定进程,当前值会被dump出来。