- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图让 1 个 redis master 和 2 个 redis 副本绑定(bind)到 Kubernetes 上的 3 Quorum Sentinel。我对 Kubernetes 很陌生。
我最初的计划是让主节点在与 1 个 Kubernetes SVC 绑定(bind)的 Pod 上运行,2 个副本在它们自己的 Pod 上运行,并与另一个 Kubernetes SVC 绑定(bind)。最后,3 个 Sentinel pod 将绑定(bind)到它们自己的 SVC。副本将绑定(bind)到主 SVC(因为没有 svc,ip 会改变)。哨兵也将被配置并绑定(bind)到主 SVC 和副本 SVC。但我不确定这是否可行,因为当主 pod 崩溃时,其中一个副本 pod 将如何移动到主 SVC 并成为主?那可能吗?
我采用的第二种方法是将 redis pod 包装在复制 Controller 中,对于哨兵也是如此。但是,我不确定如何使用复制 Controller 使其中一个 pod 成为 master 和其他副本。
这两种方法中的任何一种都行得通吗?如果没有,我可以采用更好的设计吗?任何线索将不胜感激。
最佳答案
您可以使用 Helm 部署 Redis Sentinel包管理器和 Redis Helm Chart .
如果您没有 Helm3
还没安装,可以用这个documentation安装它。
我将提供一些解释来说明它是如何工作的。
首先我们需要得到 values.yaml
来自 Redis Helm Chart 的文件来自定义我们的安装:
$ wget https://raw.githubusercontent.com/bitnami/charts/master/bitnami/redis/values.yaml
我们可以在
values.yaml
中配置很多参数file ,但出于演示目的,我只启用了 Sentinel 并设置了 redis 密码:
# values.yaml
global:
redis:
password: redispassword
...
replica:
replicaCount: 3
...
sentinel:
enabled: true
...
然后我们可以使用
values.yaml
中的配置部署 Redis文件:
sentinel
在每个 Pod 内运行的容器。
$ helm install redis-sentinel bitnami/redis --values values.yaml
请务必仔细阅读
备注 图表安装输出部分。它包含许多有用的信息(例如,如何从集群外部连接到您的数据库)
StatefulSet
,
Pods
和
Services
(
headless service 可用于内部访问):
$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP
redis-sentinel-node-0 2/2 Running 0 2m13s 10.4.2.21
redis-sentinel-node-1 2/2 Running 0 86s 10.4.0.10
redis-sentinel-node-2 2/2 Running 0 47s 10.4.1.10
$ kubectl get sts
NAME READY AGE
redis-sentinel-node 3/3 2m41s
$ kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
redis-sentinel ClusterIP 10.8.15.252 <none> 6379/TCP,26379/TCP 2m
redis-sentinel-headless ClusterIP None <none> 6379/TCP,26379/TCP 2m
如您所见,每个
redis-sentinel-node
Pod 包含
redis
和
sentinel
容器:
$ kubectl get pods redis-sentinel-node-0 -o jsonpath={.spec.containers[*].name}
redis sentinel
我们可以查看
sentinel
容器日志以找出
redis-sentinel-node
是主人:
$ kubectl logs -f redis-sentinel-node-0 sentinel
...
1:X 09 Jun 2021 09:52:01.017 # Configuration loaded
1:X 09 Jun 2021 09:52:01.019 * monotonic clock: POSIX clock_gettime
1:X 09 Jun 2021 09:52:01.019 * Running mode=sentinel, port=26379.
1:X 09 Jun 2021 09:52:01.026 # Sentinel ID is 1bad9439401e44e749e2bf5868ad9ec7787e914e
1:X 09 Jun 2021 09:52:01.026 # +monitor master mymaster 10.4.2.21 6379 quorum 2
...
1:X 09 Jun 2021 09:53:21.429 * +slave slave 10.4.0.10:6379 10.4.0.10 6379 @ mymaster 10.4.2.21 6379
1:X 09 Jun 2021 09:53:21.435 * +slave slave 10.4.1.10:6379 10.4.1.10 6379 @ mymaster 10.4.2.21 6379
...
从上面的日志可以看出,
redis-sentinel-node-0
Pod 是主人,
redis-sentinel-node-1
&
redis-sentinel-node-2
pod 是奴隶。
$ kubectl delete pod redis-sentinel-node-0
pod "redis-sentinel-node-0" deleted
$ kubectl logs -f redis-sentinel-node-1 sentinel
...
1:X 09 Jun 2021 09:55:20.902 # Executing user requested FAILOVER of 'mymaster'
...
1:X 09 Jun 2021 09:55:22.666 # +switch-master mymaster 10.4.2.21 6379 10.4.1.10 6379
...
1:X 09 Jun 2021 09:55:50.626 * +slave slave 10.4.0.10:6379 10.4.0.10 6379 @ mymaster 10.4.1.10 6379
1:X 09 Jun 2021 09:55:50.632 * +slave slave 10.4.2.22:6379 10.4.2.22 6379 @ mymaster 10.4.1.10 6379
一个新的主人(
redis-sentinel-node-2
10.4.1.10
)已被选中,所以一切都按预期工作。
$ kubectl run --namespace default redis-client --restart='Never' --env REDIS_PASSWORD=redispassword --image docker.io/bitnami/redis:6.2.1-debian-10-r47 --command -- sleep infinity
pod/redis-client created
$ kubectl exec --tty -i redis-client --namespace default -- bash
I have no name!@redis-client:/$ redis-cli -h redis-sentinel-node-1.redis-sentinel-headless -p 6379 -a $REDIS_PASSWORD
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
redis-sentinel-node-1.redis-sentinel-headless:6379> info replication
# Replication
role:slave
master_host:10.4.1.10
master_port:6379
master_link_status:up
...
关于kubernetes - Kubernetes 上的 Redis 哨兵 HA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67886898/
我有一个具有 3 个节点的非 HA Hadoop 设置:一个 NameNode 和 2 个 DataNode。 NameNode是一个4GB内存和20GB硬盘的服务器,而每个DataNode有8GB内
关于 https://www.rabbitmq.com/ha.html我读到了这两个属性: ha-promote-on-shutdown ha-promote-on-failure 但是我找不到关于这
据我所知,列表的 + op 只要求第二个操作数是可迭代的,“ha”显然是。 在代码中: >>> x = [] >>> x += "ha" >>> x ['h', 'a'] >>> x = x + "h
我试图在网上找到更多关于它的信息,但似乎找不到合适的答案。 我们的新应用程序在顶部使用 HA 负载均衡器将访问者分配到集群 ampq 和集群 mysql,一切都完美无缺。 现在我们已经决定我们需要将我
我已经阅读了 clustering和 HA章节并对 RabbitMQ 集群有了一个公平的理解。我不明白的一件事是,集群上有 2 个以上的节点和一组 HA 队列,客户端如何建立连接,以便在一个节点发生故
我正在尝试使用Hadoop HA设置hbase ha。 我已经设置了Hadoop HA,并对其进行了测试。 但是在HBase安装中,启动时出现以下错误: 2020-05-02 16:11:09,336
我目前正在创建3个Neo4j高可用性服务器。我的业务逻辑将一台服务器作为专用主服务器,而将另外两台计算机作为专用从服务器。我的从服务器与主服务器存在于完全不同的数据中心中。 在两个应用程序之间建立链接
我目前在Docker上安装了GitLab omnibus。我计划通过将其添加到Kubernetes来具有相同的HA,并使用Gluster保持持久性。我玩过用Gluster配置Kubernetes的游戏
如何使用主动/主动或主动/备用 HA 系统在生产环境中运行 docker?有任何指南或最佳实践吗? 我正在考虑 3 个场景: 1) NFS - 用于两台服务器 - 准备有 docker-machine
我使用rabbitmq-server-3.6.1。 似乎有两个选项如何设置同步批量大小。第一个是策略选项“ha-sync-batch-size”。 RabbitMQ 文档 here 中对此进行了描述。
*我正在使用 hearbeat 2.1.4 2 个节点正常工作,但是当我在 node1 中手动停止 httpd 时,heartbeat 不会切换到 node02。如何解决这个问题??* 最佳答案 该版
我正在使用 HA 名称节点配置 Hadoop 2.2.0 稳定版,但我不知道如何配置对集群的远程访问。 我配置了手动故障转移的 HA 名称节点,我定义了 dfs.nameservices,我可以从集群
我一直在尝试 Docker Swarm 并研究其他解决方案,例如 Kubernetes,但我就是不知道什么最适合我的用例,我可以从专家那里获得一些帮助,所以非常欢迎您的意见. 我对要构建的云有一些要求
我有Apache Mesos 0.22.1集群(3个主节点和5个从节点),在HA配置和Spark 1.5.1框架中运行Cloudera HDFS(2.5.0-cdh5.3.1)。 当我尝试 Spark
我正在阅读《 Hadoop最终指导》中的“高可用性”,以下内容并不清楚, To recover from a failed namenode in this situation, an adminis
请注意:这是一个非常相似的问题as this one,但是我断言这不是骗子!另一个问题显然是基于(较旧的)基于Python的Docker注册表,而不是用GoLang编写的最新注册表,而且看起来有很大不
我使用 MySQL 和 Galera wsrep 来获得同步复制,该部分已启动并运行 我需要设置一种代理来处理客户端连接。由于集群中的任何节点都可能发生故障,因此客户端不会直接连接节点,而只能通过代理
我的机器上的一个地窖组中有三个 karaf 节点。第一个节点 (lb_node) 用作负载均衡器,其他两个节点(1_node 和 2_node)用作服务节点(具有已部署的功能)。两个节点都有可用的 /
我正在使用 Win-8 机器并尝试创建多语言网站。 我使用的是法语、阿拉伯语和豪萨语。 我的代码运行完美,但是当我选择豪萨语时出现错误: Culture name 'ha-latn' is not s
最近,我成功地为 HDFS 和 YARN 启用了 HA。现在我有一个事件的和备用的名称节点,自动故障转移工作正常。我正在使用 Cloudera Manager 和 CDH 5。 我有以下问题。 例如,
我是一名优秀的程序员,十分优秀!