Consul集群模式部署

在这里插入图片描述

1.规划

1.1 准备

节点iphostnameagent类型操作系统
10.0.0.5node-1serverCentOS 7.9
10.0.0.6node-2serverCentOS 7.9
10.0.0.7node-3serverCentOS 7.9

1.2 拓扑

在这里插入图片描述

2.搭建Consul集群

2.1 安装consul

2.1.1 下载二进制包

下载地址: consul

wget https://releases.hashicorp.com/consul/1.17.1/consul_1.17.1_linux_amd64.zip -O  /usr/local/bin/consul_1.17.1_linux_amd64.zip
cd /usr/local/bin
unzip  consul_1.17.1_linux_amd64.zip && rm -f consul_1.17.1_linux_amd64.zip
#查看版本
consul version

2.1.2 创建Consul用户

groupadd --system consul
useradd -s /sbin/nologin  --system  -g consul  consul

2.1.3 创建Consul数据存储和配置文件目录

mkdir -p  /consul/{config,data}

2.2 配置文件

2.2.1 生成Consul secret

#consul在通讯时进行加密, key可以通过consul keygen生成, 同一个集群中的节点必须使用相同的key 
consul keygen

2.2.2 server1配置

cat >> /consul/config/consul.json  << EOF
{
    "advertise_addr": "10.0.0.5",
    "bind_addr": "10.0.0.5",
    "bootstrap_expect": 3,
    "client_addr": "0.0.0.0",
    "datacenter": "DC1",
    "node_name": "node-1", 
    "data_dir": "/consul/data",
    "domain": "consul",
    "enable_script_checks": true,
    "dns_config": {
        "enable_truncate": true,
        "only_passing": true
    },
    "enable_syslog": true,
    "encrypt": "S6PprGqqzGUtSLLU5lVuhSxzTG6lW7wxmzdoxkr+v00=",
    "leave_on_terminate": true,
    "log_level": "INFO",
    "rejoin_after_leave": true,
    "retry_join": [
     "node-1",
     "node-2",
     "node-3"
    ],
    "server": true,
    "start_join": [
        "node-1",
        "node-2",
        "node-3"
    ],
    "ui": true
}
EOF

2.2.3 server2配置

cat >> /consul/config/consul.json <<EOF
{
    "advertise_addr": "10.0.0.6",
    "bind_addr": "10.0.0.6",
    "bootstrap_expect": 3,
    "client_addr": "0.0.0.0",
    "datacenter": "DC1",
    "node_name": "node-2", 
    "data_dir": "/consul/data",
    "domain": "consul",
    "enable_script_checks": true,
    "dns_config": {
        "enable_truncate": true,
        "only_passing": true
    },
    "enable_syslog": true,
    "encrypt": "S6PprGqqzGUtSLLU5lVuhSxzTG6lW7wxmzdoxkr+v00=",
    "leave_on_terminate": true,
    "log_level": "INFO",
    "rejoin_after_leave": true,
    "retry_join": [
     "node-1",
     "node-2",
     "node-3"
    ],
    "server": true,
    "start_join": [
        "node-1",
        "node-2",
        "node-3"
    ],
    "ui": true
}
EOF

2.2.4 server3配置

cat >> /consul/config/consul.json <<EOF
{
    "advertise_addr": "10.0.0.7",
    "bind_addr": "10.0.0.7",
    "bootstrap_expect": 3,
    "client_addr": "0.0.0.0",
    "datacenter": "DC1",
    "node_name": "node-3", 
    "data_dir": "/consul/data",
    "domain": "consul",
    "enable_script_checks": true,
    "dns_config": {
        "enable_truncate": true,
        "only_passing": true
    },
    "enable_syslog": true,
    "encrypt": "S6PprGqqzGUtSLLU5lVuhSxzTG6lW7wxmzdoxkr+v00=",
    "leave_on_terminate": true,
    "log_level": "INFO",
    "rejoin_after_leave": true,
    "retry_join": [
     "node-1",
     "node-2",
     "node-3"
    ],
    "server": true,
    "start_join": [
        "node-1",
        "node-2",
        "node-3"
    ],
    "ui": true
}
EOF

2.2.5 配置详解

acl_datacenter:只用于server,指定的datacenter的权威ACL信息,所有的servers和datacenter必须同意ACL datacenter
acl_default_policy:默认是allow
acl_down_policy:
acl_master_token:
acl_token:agent会使用这个token和consul server进行请求
acl_ttl:控制TTL的cache,默认是30s
addresses:一个嵌套对象,可以设置以下key:dns、http、rpc
advertise_addr:等同于-advertise
bootstrap:等同于-bootstrap
bootstrap_expect:等同于-bootstrap-expect
bind_addr:等同于-bind
ca_file:提供CA文件路径,用来检查客户端或者服务端的链接
cert_file:必须和key_file一起
check_update_interval:
client_addr:等同于-client
datacenter:等同于-dc
data_dir:等同于-data-dir
disable_anonymous_signature:在进行更新检查时禁止匿名签名
disable_remote_exec:禁止支持远程执行,设置为true,agent会忽视所有进入的远程执行请求
disable_update_check:禁止自动检查安全公告和新版本信息
dns_config:是一个嵌套对象,可以设置以下参数:allow_stale、max_stale、node_ttl 、service_ttl、enable_truncate
domain:默认情况下consul在进行DNS查询时,查询的是consul域,可以通过该参数进行修改
enable_debug:开启debug模式
enable_syslog:等同于-syslog
encrypt:等同于-encrypt
key_file:提供私钥的路径
leave_on_terminate:默认是false,如果为true,当agent收到一个TERM信号的时候,它会发送leave信息到集群中的其他节点上。
log_level:等同于-log-level
node_name:等同于-node
ports:这是一个嵌套对象,可以设置以下key:dns(dns地址:8600)、http(http api地址:8500)、rpc(rpc:8400)、serf_lan(lan port:8301)、serf_wan(wan port:8302)、server(server rpc:8300)
protocol:等同于-protocol
recursor:
rejoin_after_leave:等同于-rejoin
retry_join:等同于-retry-join
retry_interval:等同于-retry-interval
server:等同于-server
server_name:会覆盖TLS CA的node_name,可以用来确认CA name和hostname相匹配
skip_leave_on_interrupt:和leave_on_terminate比较类似,不过只影响当前句柄
start_join:一个字符数组提供的节点地址会在启动时被加入
statsd_addr:
statsite_addr:
syslog_facility:当enable_syslog被提供后,该参数控制哪个级别的信息被发送,默认Local0
ui_dir:等同于-ui-dir
verify_incoming:默认false,如果为true,则所有进入链接都需要使用TLS,需要客户端使用ca_file提供ca文件,只用于consul server端,因为client从来没有进入的链接
verify_outgoing:默认false,如果为true,则所有出去链接都需要使用TLS,需要服务端使用ca_file提供ca文件,consul server和client都需要使用,因为两者都有出去的链接
watches:watch一个详细名单

Port:
8300: 只存在于Server模式,选取Leader节点(Raft协议)。为Leader节点和Client节点的提供RPC调用
8301: LAN网中集群数据同步的通信端口(Gossip协议),也是加入集群的通信端口。
8302: 只存在于Server模式,WAN网中集群数据同步的通信端口(Gossip协议),也是加入集群的通信端口。主要支持数据中心与数据中心之间交互通过WLAN(8302端口)
8500: 提供Http服务(或web界面)
8600: 提供DNS服务端口

2.3 设置开机自启

cat >> /etc/systemd/system/consul.service  <<EOF
[Unit]
Description=Consul Service
Documentation=https://www.consul.io/
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=consul
Group=consul
ExecStart=/usr/local/bin/consul agent -config-dir=/consul/config

ExecReload=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
TimeoutStopSec=5
Restart=on-failure
SyslogIdentifier=consul

[Install]
WantedBy=multi-user.target
EOF
#授权下数据和存储目录
chown -R consul.consul   /consul
#启动
systemctl enable consul.service
systemctl start  consul.service
systemctl status consul.service

2.4 验证查看

在这里插入图片描述

#查看成员信息
[root@node-1 ~]# consul members
Node    Address        Status  Type    Build   Protocol  DC   Partition  Segment
node-1  10.0.0.5:8301  alive   server  1.17.1  2         dc1  default    <all>
node-2  10.0.0.6:8301  alive   server  1.17.1  2         dc1  default    <all>
node-3  10.0.0.7:8301  alive   server  1.17.1  2         dc1  default    <all>

#查看Consul集群详细情况
consul operator raft list-peers
Node    ID                                    Address        State     Voter  RaftProtocol  Commit Index  Trails Leader By
node-2  e194d848-5f71-205c-114e-9b501266cf58  10.0.0.6:8300  leader    true   3             433           -
node-1  3c9707ba-37c1-5d16-b23d-8b6af772f129  10.0.0.5:8300  follower  true   3             433           0 commits
node-3  3d610b77-94c5-0764-6005-339af5b8364f  10.0.0.7:8300  follower  true   3             433           0 commits

2.5 设置ACL权限配置

2.5.1 添加acl权限配置

#在所有server节点添加
[root@node-1 ~]# cat >> /consul/config/acl.json  <<EOF
{
  "acl":{
    "enabled": true,
    "default_policy":"deny",
    "enable_token_persistence": true
  }
}
EOF

chown consul.consul  /consul/config/acl.json

2.5.2 重载consul

#所有server节点
consul reload


#验证一下
[root@node-1 ~]# consul operator   raft list-peers
Error getting peers: Failed to retrieve raft configuration: Unexpected response code: 403 (rpc error making call: Permission denied: anonymous token lacks permission 'operator:read'. The anonymous token is used implicitly when a request does not specify a token.)

2.5.3 创建初始Token

#在任意一台server执行即可,此SecretID==Token,为最大权限
[root@node-1 ~]# consul acl bootstrap
AccessorID:       1f0bf675-c565-c44a-518c-1dfe60501bd4
SecretID:         914bbaae-63b6-5e0a-298f-9b35b24f13aa
Description:      Bootstrap Token (Global Management)
Local:            false
Create Time:      2023-12-20 14:40:52.625050397 +0800 CST
Policies:
   00000000-0000-0000-0000-000000000001 - global-management

2.5.4 修改acl配置

#所有节点都执行
[root@node-1 ~]# cat >>  /consul/config/acl.json  << EOF
{
  "acl":{
    "enabled": true,
    "default_policy":"deny",
    "enable_token_persistence": true,
    "tokens": {
	"master": "914bbaae-63b6-5e0a-298f-9b35b24f13aa"
              }
  }
}
EOF

chown consul.consul  /consul/config/acl.json

2.5.5 重载配置

#重载配置
consul  reload

2.5.6 验证

[root@node-1 ~]# consul members --token=914bbaae-63b6-5e0a-298f-9b35b24f13aa
Node    Address        Status  Type    Build   Protocol  DC   Partition  Segment
node-1  10.0.0.5:8301  alive   server  1.17.1  2         dc1  default    <all>
node-2  10.0.0.6:8301  alive   server  1.17.1  2         dc1  default    <all>
node-3  10.0.0.7:8301  alive   server  1.17.1  2         dc1  default    <all>

[root@node-1 ~]# consul operator   raft list-peers  --token=914bbaae-63b6-5e0a-298f-9b35b24f13aa
Node    ID                                    Address        State     Voter  RaftProtocol  Commit Index  Trails Leader By
node-1  5ce60fe9-49b5-be1c-764c-3da262296de8  10.0.0.5:8300  follower  true   3             286           0 commits
node-2  404632f2-3cdd-2f95-ec6b-93b1dd70d50a  10.0.0.6:8300  leader    true   3             286           -
node-3  7fa7060c-eed4-e1c5-679b-c966afa27f11  10.0.0.7:8300  follower  true   3             286           0 commits

在这里插入图片描述

2.5.7 拓展

我们需要了解 polices(策略)、tokens(令牌)、roles(规则)

polices

policy通常有3种:read(只读)、write(读写)、deny(无权)

方式配置解释
节点前缀node_prefix节点前缀为空则代表所有节点,否则以设定前缀开头的所有节点
服务前缀service_prefix服务前缀为空则代表所有服务,否则以设定前缀开头的所有服务
指定服务service指定的服务
kv前缀key_prefix以设定前缀开头的所有kv
指定kvkey指定的kv

例如:

#用于服务注册
service_prefix ""{
	policy = "write"
}

#用于key/value获取
key_prefix "" {
	policy = "read"
}
tokens
consul的token就是我们用来进行权限校验的,最高权限的token(bootstrap token)
创建token的时候只需要选择好规则与角色(可选)即可.
roles
角色可以看作是策略的集合,一个角色可以有多个策略,在设置角色的时候我们可以给角色添加多个策略,管理员
可以直接把成员设定为某个角色。
  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 答: 部署K8S集群中的Seata需要按照以下步骤进行:1)准备好所需的资源,包括存储空间、网络资源等;2)利用Kubernetes的配置管理工具Helm将Seata部署到Kubernetes集群中;3)根据需要进行Seata的配置;4)启动Seata集群;5)部署测试程序,验证Seata集群是否正常工作。 ### 回答2: Kubernetes(简称K8s)是一个开源的容器编排平台,它能够自动化地部署、扩展和管理应用程序容器。Seata是一种用于解决分布式事务问题的开源框架,可以保证分布式事务的一致性和隔离性。 在Kubernetes中部署Seata集群需要以下步骤: 1. 准备Kubernetes集群:首先需要搭建一个稳定运行的Kubernetes集群。可以选择自建集群或使用云服务提供商的托管服务(如GKE、EKS等)。 2. 创建Seata集群所需的命名空间(Namespace):在Kubernetes中,命名空间用于隔离不同的应用。可以使用kubectl命令或者在yaml文件中定义命名空间。 3. 创建Seata集群所需的持久化存储:Seata集群需要使用持久化存储来保存事务数据和日志。可以选择使用Kubernetes提供的存储卷(Persistent Volume)或者外部存储(如云存储)。 4. 创建Seata集群所需的配置文件:Seata集群需要配置文件来指定各个组件的参数。可以在Kubernetes中使用ConfigMap或Secret来存储和管理配置文件。 5. 配置Seata Server:在Kubernetes中,可以使用Deployment来创建和管理Seata Server的实例。在Deployment中可以指定应用容器的镜像、资源限制以及其他参数。 6. 配置Seata Registry:Seata集群需要使用Registry来进行服务发现和注册。可以选择使用Kubernetes的Service或者其他服务注册中心(如Etcd、Consul等)作为Registry。 7. 配置Seata Client:在应用程序中使用Seata时,需要配置Seata Client来连接Seata集群。可以使用ConfigMap或者环境变量来指定Seata集群的地址和其他参数。 8. 部署应用程序:最后,在Kubernetes中部署应用程序,并将应用程序与Seata集群连接起来。可以使用Deployment或者其他资源对象(如Pod、ReplicaSet)来管理应用程序。 通过以上步骤,就可以在Kubernetes上成功部署Seata集群。这样就可以使用Seata来保证分布式事务的一致性和隔离性,并且通过Kubernetes的自动化和扩展能力,可以实现高可用和高性能的分布式事务处理。 ### 回答3: k8s(Kubernetes)是一个开源的容器编排平台,可用于部署和管理容器化的应用程序。seata是一种分布式事务解决方案,可以帮助开发者实现基于微服务架构的分布式事务管理。在k8s上部署seata集群需要以下步骤: 1. 准备seata配置文件:在部署seata之前,需要准备seata的配置文件。这些配置文件通常包括seata的事务协调器(TC)配置、存储模式、数据库连接配置等。 2. 创建k8s部署文件:根据seata的配置文件,创建k8s的部署文件。这些部署文件通常包括seata事务协调器的Deployment、Service配置,以及其他相关的资源配置。 3. 部署seata集群:使用kubectl命令将seata集群的部署文件应用到k8s集群中。kubectl命令可以创建、更新、删除k8s资源。 4. 验证seata集群部署:使用kubectl命令查看seata集群的运行状态,确保seata事务协调器部署成功。 5. 测试分布式事务功能:通过在微服务中添加seata的相关代码,实现分布式事务功能,并进行测试。可以模拟跨多个微服务的事务操作,验证seata的分布式事务管理能力。 总结:在k8s上部署seata集群需要准备seata配置文件,创建k8s的部署文件,部署seata集群,并测试分布式事务功能。通过k8s的弹性扩展和自动化管理能力,可以更方便地部署和管理seata集群,提高系统的可靠性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

登高·

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值