Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将redis哨兵连接到Kubernetes上的redis主机_Kubernetes_Redis_Master Slave_Sentinel - Fatal编程技术网

将redis哨兵连接到Kubernetes上的redis主机

将redis哨兵连接到Kubernetes上的redis主机,kubernetes,redis,master-slave,sentinel,Kubernetes,Redis,Master Slave,Sentinel,我已经使用部署为Kubernetes上的POD的.yaml清单文件成功地将redis从设备与Kubernetes上的redis主设备连接起来 但当我试图将redis sentinel连接到master时,它会拒绝连接 “无法连接到127.0.0.1:26379的Redis:连接被拒绝未连接>” 以下是redis主、从和sentinel清单文件: Redis-Master.yaml kind: Deployment metadata: labels: name: redis r

我已经使用部署为Kubernetes上的POD的.yaml清单文件成功地将redis从设备与Kubernetes上的redis主设备连接起来

但当我试图将redis sentinel连接到master时,它会拒绝连接 “无法连接到127.0.0.1:26379的Redis:连接被拒绝未连接>”

以下是redis主、从和sentinel清单文件:

Redis-Master.yaml

kind: Deployment
metadata:
  labels:
    name: redis
    redis-sentinel: "true"
    role: master
  name: redis-master
spec:
  selector:
    matchLabels:
      app: redis
      role: master
      tier: backend
  replicas: 1
  template:
    metadata:
      labels:
        app: redis
        role: master
        tier: backend
    spec:
      containers:
      - name: master
        image: k8s.gcr.io/redis:e2e  # or just image: redis
        env:
          - name: MASTER
            value: "true"
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379
Redis-Slave.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-slave
  labels:
    app: redis
    role: slave
    tier: backend
spec:
  strategy:
    type: RollingUpdate
  replicas: 3
  selector:
    matchLabels:
      app: redis
      role: slave
      tier: backend
  template:
    metadata:
      labels:
        app: redis
        role: slave
        tier: backend
    spec:
      containers:
        - name: slave
          image: gcr.io/google_samples/gb-redisslave:v3
          ports:
            - name: redis-server
              containerPort: 6379
          env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            - name: REDIS_REPLICATION_MODE
              value: slave
            - name: REDIS_MASTER_HOST
              value: redis-master
            - name: REDIS_MASTER_PORT_NUMBER
              value: "6379"
Redis哨兵

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-sentinel
  labels:
    app: redis
    role: sentinel  
    tier: backend
spec:
  strategy:
    type: RollingUpdate
  replicas: 3
  selector:
    matchLabels:
      app: redis
      role: sentinel
      tier: backend
  template:
    metadata:
      labels:
        name: redis-sentinel
        redis-sentinel: "true"
        app: redis
        role: sentinel
        tier: backend
    spec:
      containers:
        - name: sentinel
          image: gcr.io/google_samples/gb-redisslave:v3
          ports:
            - name: redis-sentinel
              containerPort: 26379
          env:
            - name: ALLOW_EMPTY_PASSWORD
              value: "yes"
            - name: REDIS_REPLICATION_MODE
              value: sentinel
            - name: REDIS_MASTER_HOST
              value: redis-master
            - name: REDIS_MASTER_PORT_NUMBER
              value: "6379"   

你能告诉我RADIS哨兵清单文件在哪里出错吗?< /P> < P>在部署ReISS哨兵时,你需要考虑的事情很少,在你的特定用例中可能出错:

  • 检查防火墙规则。确保服务器的端口26379已打开。默认情况下,Sentinel运行侦听到TCP端口26379的连接。否则哨兵们就不能说话,也不能就做什么达成一致

  • 检查Sentinel配置文件-
    Sentinel.conf
    和Redis配置文件-
    Redis.conf
    。在运行Sentinel时必须使用配置文件,因为系统将使用该文件来保存当前状态,在重新启动时将重新加载该状态。如果没有提供配置文件或配置文件路径不可写,Sentinel将拒绝启动

  • 您需要至少三个Sentinel实例才能实现强健的部署

  • 您可以找到有关上述信息的更多信息


    如果有帮助,请告诉我

    我只是假设您正在尝试从外部连接到pod。您正在连接到Kubernetes环境中不存在的127.0.0.1。您需要连接到Pod的IP,只需运行即可获得该IP

    kubectl描述pod
    


    或者,您可以创建一个服务,并在Sentinel中将该服务的名称用作env变量。

    您不能这样连接它。您必须检查Kubernetes上的服务。您可以看到Redis服务IP地址。您必须使用IP地址连接

    请检查服务器的端口26379是否打开?我遇到了相同的问题。我正在获取主吊舱的ip。但我不知道如何连接到这个吊舱。在我们的评论中,您说:或者您可以创建一个服务,并在启动Sentinel时将该服务的名称用作env变量。您能描述一下我是如何做到这一点的吗?每当我们创建服务时,Kubernetes都会自动填充某些环境变量,例如服务名称和端口。如果创建名为redis master的服务,Kubernetes将填充redis_master_service_HOST和redis_master_service_PORT。使用这些env变量获取主服务的IP和端口。