- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在安装了 Istio Mesh 的 Kubernetes 上配置 Redis 集群。 Redis 集群可以在没有 Istio 的情况下创建,并且每个 Pod 都会自动注入(inject) Istio 代理(Envoy)。但是,在安装了 Istio 并将 Istio 代理附加到每个 Redis Pod 后,Redis 集群无法通过 CLI 中的 CLUSTER MEET 命令正确“会面”。
例如,我有 Redis Pod A(插槽 0 - 10919)和 Redis Pod B(插槽 10920 - 16383)。这是在它们之间尝试 CLUSTER MEET 命令后的结果(集群满足 ClusterIPForRedisPodB 6379)。
对于 Redis Pod A,集群信息已更新并包含 Redis Pod B:
相反,对于Redis Pod B,集群信息没有更新,并且不包括Redis Pod A:
我能够在端口 16379 和 6379 的两个 Pod 之间发送 curl 和 netcat 响应。此外,Envoy 似乎也打开了这些端口。
最佳答案
我已经复制了您的问题并找到了解决您问题的方法。
让我首先解释一下导致您出现问题的原因。
Redis gossip 协议(protocol)的工作原理如下:当您输入cluster meet <ip> <port>
时在redis1上,redis1 打开到 redis2 的 tcp 连接。正常情况下,当redis2收到连接时,它会接受它,并查找连接者的源IP地址并且还打开到该地址的 tcp 连接,在这种情况下是到 redis1。(更多关于八卦协议(protocol)在redis中如何工作的信息可以在 redis documentation 中找到,或在 this article )
这是istio部分。Istio 默认将 envoy 配置为典型代理,正如您可以读到的 istio documentation :
Istio 默认使用 REDIRECT
代理并如文档中所述:
This mode loses source IP addresses during redirection
这是我们问题的根源。
redis2 当收到连接时,它会将其视为来自本地主机。 Envoy 丢失了 redis1 的源 IP 地址,并且 redis2 现在无法打开返回到 redis1 的连接。
现在,我们有一些选择:
TPROXY
(我试过了,但没能成功)让我们仔细看看第二个选项,因为这是对我有用的选项。在 redis.conf
文件中您可以找到此部分:
CLUSTER DOCKER/NAT support
In certain deployments, Redis Cluster nodes address discovery fails, because addresses are NAT-ted or because ports are forwarded (the typical case is Docker and other containers).
In order to make Redis Cluster working in such environments, a static configuration where each node knows its public address is needed. The following two options are used for this scope, and are:
- cluster-announce-ip
- cluster-announce-port
- cluster-announce-bus-port
Each instruct the node about its address, client port, and cluster message bus port. The information is then published in the header of the bus packets so that other nodes will be able to correctly map the address of the node publishing the information.
If the above options are not used, the normal Redis Cluster auto-detection will be used instead.
Note that when remapped, the bus port may not be at the fixed offset of clients port + 10000, so you can specify any port and bus-port depending on how they get remapped. If the bus-port is not set, a fixed offset of 10000 will be used as usually.
Example:
cluster-announce-ip 10.1.1.5
cluster-announce-port 6379
cluster-announce-bus-port 6380
我们需要设置cluster-announce-ip
变量为redis的pod自己的ip地址。
您可以这样做,例如修改 redis-cluster
配置映射是这样的(它是从 this article 修改的 redis configmap ):
---
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-cluster
data:
update-node.sh: |
#!/bin/sh
REDIS_NODES="/data/nodes.conf"
sed -i -e "/myself/ s/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/${POD_IP}/" ${REDIS_NODES}
cp /conf/redis.conf /redis.conf # <------HERE-----
sed -i "s/MY_IP/${POD_IP}/" /redis.conf # <------HERE-----
exec "$@"
redis.conf: |+
cluster-enabled yes
cluster-require-full-coverage no
cluster-node-timeout 15000
cluster-config-file /data/nodes.conf
cluster-migration-barrier 1
appendonly yes
protected-mode no
cluster-announce-ip MY_IP # <------HERE-----
还要记住更改容器的 command
像这样指向右边redis.conf
文件:
command: ["/conf/update-node.sh", "redis-server", "/redis.conf"]
每个 Redis 节点现在都会将此地址作为自己的地址进行广告,以便其他 Redis 节点现在知道如何与其连接。
请告诉我是否有帮助。
关于kubernetes - 是否可以使用 Istio 搜索网格在 Kubernetes 中创建 Redis 集群?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58528831/
由于 PostgreSQL 人员选择的术语不当,这会让一些人感到困惑,但请耐心等待... 我们需要能够支持多个 PostgreSQL (PG) 集群,并将它们集群在多个服务器上,例如使用repmgr.
Hadoop会跑很多jobs,从Hbase读取数据,写数据到数据库。假设我有 100 个节点,那么有两种方法可以构建我的 Hadoop/Hbase集群: 100节点hadoop&hbase集群(1个b
在kafka中,我们能创建多种类型的集群,一般如下: 单节点——单个broker集群 单节点——多broker集群 多结点——多broker集群 kafka集群中主要有五个组件: Topic:主题主要
我想在两台机器上运行我的 MPI 程序,一台是 ubuntu 18.04,另一台是 Windows 10。是否可以使用不同的操作系统组成一个集群? (我正在使用 MPICH) 如果可能,怎么做?我在网
简介: 更新负载平衡集群中的节点的最佳实践是什么? 我们在 ha 代理负载均衡器后面使用 RabbitMQ 集群来支持我们的客户端轻松集群,as suggested in the RabbitMQ d
我正在尝试创建一个图表,我明确指定了许多节点的等级并指定了集群。以下代码生成我想要的图形类型: digraph { rankdir=LR subgraph cluster0 {
我正在尝试在 RABBITMQ 上进行集群。我添加了 2 个节点,但无法添加第 3 个节点。我已经聚集了 rabbit@node1 和 rabbit@node2。现在我正在尝试将 rabbit@nod
我在 MS Azure 的生产环境中启用了一个双集群多区域 HA。 我被要求重用同一个集群来使用微服务管理几个新项目。 这里的最佳做法是什么?我应该为每个应用程序创建一个集群吗?将不同集群中的每个项目
我正在尝试 flex 搜索,并且很难在具有3个 flex 搜索实例的单台计算机上创建集群。我对实例进行了以下更改: 在所有实例上更改了群集名称{cluster.name:es-stack} 在所有实例
我想创建一个redis集群,仅将特定的redis主机作为主服务器和从服务器。另外,我想自己指定哪个主机应该是哪个主机的副本。 目前,cluster-create command当在任何一个 Redis
我计划在具有负载平衡的集群中设置 Magento,那么是否可以让两个 Magento 安装指向同一个数据库? 如果可能的话 - 我应该如何配置这些服务器的基本 URL?服务器应该具有相同的名称吗? 最
我目前正在计划一个 Web 应用程序,我想计划它最终在集群上运行。 集群将由一个 php web 集群和一个 mysql 集群以及一个独立的存储单元组成(也许是一个集群,我真的不知道它是如何工作的:s
我已经安装了 elasticsearch 2.2.3 并在 2 个节点的集群中配置 节点 1 (elasticsearch.yml) cluster.name: my-cluster node.nam
我正在寻找现有的中间件解决方案,以解决服务集群/分布方面的问题,以实现负载平衡和可用性。我正在考虑基于消息传递系统(更具体地说,JMS)为此构建自己的基础设施。但是,如果可能的话,我宁愿使用已经存在的
在 Hadoop 集群中,数据是自动跨数据节点复制还是必须编程? 如果必须编程,那我该怎么做呢? 最佳答案 dfs.replication 的默认值为 3。这存在于您的 hdfs.site.xml 中
我已经设置了一个具有 1 个主节点和 2 个从节点的 redis 集群,哨兵在所有 3 个节点上运行。 在此设置之前,我的应用程序指向运行 Redis 实例的单个节点。 集群搭建完成后,我的应用应该指
所以,我正在设计一个具有多个 redis 实例的分布式系统来分解大量的流式写入,但发现很难清楚地了解事情是如何工作的。 从我读到的内容来看,正确配置的集群似乎会自动对“错误实例”上的请求进行分片和重定
我有一个关于redis集群架构的问题。 我正在设置一个 Redis 集群,并遵循基本建议:3 硕士3个奴隶 有什么方法可以在 Amazon LB、HAProxy、Nginx 等负载均衡器后面配置此集群
那么集群背后的想法是什么? 您有多台机器具有相同的数据库副本,您在其中传播读/写?这是正确的吗? 这个想法如何运作?当我进行选择查询时,集群会分析哪个服务器的读/写较少并将我的查询指向该服务器? 当您
目录 一.系统环境 二.前言 三.Kubernetes 3.1 概述 3.2 Kube
我是一名优秀的程序员,十分优秀!