临夏州建设网站/网站推广优化公司
创建ConfigMap
redis-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:name: redis-cluster
data:update-node.sh: |#!/bin/shREDIS_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}exec "$@"redis.conf: |+cluster-enabled yescluster-require-full-coverage nocluster-node-timeout 15000cluster-config-file /data/nodes.confcluster-migration-barrier 1dir /dataappendonly yesprotected-mode no
kubectl apply -f redis-cm.yaml
[root@master redis]# kubectl get cm
NAME DATA AGE
kube-root-ca.crt 1 39d
redis-cluster 2 34m
创建pv(nfs方式)
redis-pv.yml
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv1
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: "redis-cluster"nfs:path: /nfs/redis/pv1server: 192.168.0.254
---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv2
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: "redis-cluster"nfs:path: /nfs/redis/pv2server: 192.168.0.254
---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv3
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: "redis-cluster"nfs:path: /nfs/redis/pv3server: 192.168.0.254
---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv4
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: "redis-cluster"nfs:path: /nfs/redis/pv4server: 192.168.0.254
---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv5
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: "redis-cluster"nfs:path: /nfs/redis/pv5server: 192.168.0.254
---
apiVersion: v1
kind: PersistentVolume
metadata:name: redis-pv6
spec:capacity:storage: 5GiaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RecyclestorageClassName: "redis-cluster"nfs:path: /nfs/redis/pv6server: 192.168.0.254
创建 StatefulSet
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cluster
spec:serviceName: redis-clusterreplicas: 6selector:matchLabels:app: redis-clustertemplate:metadata:labels:app: redis-clusterspec:containers:- name: redisimage: redis:6.2-alpineports:- containerPort: 6379name: client- containerPort: 16379name: gossipcommand: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"]env:- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIPvolumeMounts:- name: confmountPath: /confreadOnly: false- name: datamountPath: /datareadOnly: falsevolumes:- name: confconfigMap:name: redis-clusterdefaultMode: 0755volumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 5GistorageClassName: redis-cluster
StorageClass方式 StatefulSet
redis-sts.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cluster
spec:serviceName: redis-clusterreplicas: 6selector:matchLabels:app: redis-clustertemplate:metadata:labels:app: redis-clusterspec:containers:- name: redisimage: redis:6.2-alpineports:- containerPort: 6379name: client- containerPort: 16379name: gossipcommand: ["/conf/update-node.sh", "redis-server", "/conf/redis.conf"]env:- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIPvolumeMounts:- name: confmountPath: /confreadOnly: false- name: datamountPath: /datareadOnly: falsevolumes:- name: confconfigMap:name: redis-clusterdefaultMode: 0755volumeClaimTemplates:- metadata:name: dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 5GistorageClassName: nfs-client # StorageClass名称
创建 svc
redis-svc.yaml
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster
spec:type: ClusterIPports:- port: 6379targetPort: 6379name: client- port: 16379targetPort: 16379name: gossipselector:app: redis-cluster
初始化 Redis Cluster
····
Can I set the above configuration? (type 'yes' to accept): yes
····[root@master redis]# kubectl exec -it redis-cluster-0 -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 {end}')
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 10.244.104.18:6379 to 10.244.104.16:6379
Adding replica 10.244.166.138:6379 to 10.244.166.136:6379
Adding replica 10.244.166.137:6379 to 10.244.104.17:6379
M: c42ad3819e4b54943335a85183f8cf39fe926fe8 10.244.104.16:6379slots:[0-5460] (5461 slots) master
M: e41521cdbb8c0981effd98833e3c4ffd5e58c6e8 10.244.166.136:6379slots:[5461-10922] (5462 slots) master
M: 6c5831329428a0255b63b5cff730f017dd8e5b7d 10.244.104.17:6379slots:[10923-16383] (5461 slots) master
S: 3d0b5f4e5312ac30c42f2b22078cbb27f81cb4e2 10.244.166.137:6379replicates 6c5831329428a0255b63b5cff730f017dd8e5b7d
S: 0bb7baa37517453e1e1a6e8b916892e3e721baae 10.244.104.18:6379replicates c42ad3819e4b54943335a85183f8cf39fe926fe8
S: b3761a41697003251263f81919d03d62f0ca7109 10.244.166.138:6379replicates e41521cdbb8c0981effd98833e3c4ffd5e58c6e8
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
.
>>> Performing Cluster Check (using node 10.244.104.16:6379)
M: c42ad3819e4b54943335a85183f8cf39fe926fe8 10.244.104.16:6379slots:[0-5460] (5461 slots) master1 additional replica(s)
S: b3761a41697003251263f81919d03d62f0ca7109 10.244.166.138:6379slots: (0 slots) slavereplicates e41521cdbb8c0981effd98833e3c4ffd5e58c6e8
S: 3d0b5f4e5312ac30c42f2b22078cbb27f81cb4e2 10.244.166.137:6379slots: (0 slots) slavereplicates 6c5831329428a0255b63b5cff730f017dd8e5b7d
S: 0bb7baa37517453e1e1a6e8b916892e3e721baae 10.244.104.18:6379slots: (0 slots) slavereplicates c42ad3819e4b54943335a85183f8cf39fe926fe8
M: 6c5831329428a0255b63b5cff730f017dd8e5b7d 10.244.104.17:6379slots:[10923-16383] (5461 slots) master1 additional replica(s)
M: e41521cdbb8c0981effd98833e3c4ffd5e58c6e8 10.244.166.136:6379slots:[5461-10922] (5462 slots) master1 additional replica(s)
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
验证集群部署
[root@master redis]# kubectl exec -it redis-cluster-0 -- redis-cli cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:6
cluster_size:3
cluster_current_epoch:6
cluster_my_epoch:1
cluster_stats_messages_ping_sent:16
cluster_stats_messages_pong_sent:21
cluster_stats_messages_sent:37
cluster_stats_messages_ping_received:16
cluster_stats_messages_pong_received:16
cluster_stats_messages_meet_received:5
cluster_stats_messages_received:37
查看各个redis的主从状态
[root@master redis]# for x in $(seq 0 5); do echo "redis-cluster-$x"; kubectl exec redis-cluster-$x -- redis-cli role; echo; done
redis-cluster-0
master
28
10.244.104.18
6379
28redis-cluster-1
master
14
10.244.166.138
6379
14redis-cluster-2
master
28
10.244.166.137
6379
28redis-cluster-3
slave
10.244.104.17
6379
connected
28redis-cluster-4
slave
10.244.104.16
6379
connected
28redis-cluster-5
slave
10.244.166.136
6379
connected
14
StatefulSet方式部署Redis集群(暴露1个端口)
apiVersion: v1
kind: ConfigMap
metadata:name: redis-cluster-config
data:redis-cluster.conf: |daemonize nosupervised noprotected-mode nobind 0.0.0.0port 6379cluster-announce-bus-port 16379cluster-enabled yesappendonly yescluster-node-timeout 5000dir /datacluster-config-file /data/nodes.confrequirepass redis#cluster#testmasterauth redis#cluster#test
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-service
spec:selector:app: redis-clusterclusterIP: Noneports:- name: redis-6379port: 6379- name: redis-16379port: 16379
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-service-access
spec:selector:app: redis-clustertype: NodePortsessionAffinity: Noneports:- name: redis-6379port: 6379targetPort: 6379nodePort: 30201
---
apiVersion: apps/v1
kind: StatefulSet
metadata:labels:app: redis-clustername: redis-cluster
spec:serviceName: redis-cluster-servicereplicas: 6selector:matchLabels:app: redis-clustertemplate:metadata:labels:app: redis-clusterspec:terminationGracePeriodSeconds: 30containers:- name: redisimage: redis:6.0.8imagePullPolicy: IfNotPresentterminationMessagePath: /dev/termination-logterminationMessagePolicy: Filecommand: [ "redis-server", "/etc/redis/redis-cluster.conf" ]args:- "--cluster-announce-ip"- "$(POD_IP)"env:- name: HOST_IPvalueFrom:fieldRef:fieldPath: status.hostIP- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: TZvalue: "Asia/Shanghai"ports:- name: rediscontainerPort: 6379protocol: TCP- name: clustercontainerPort: 16379protocol: TCPvolumeMounts:- name: redis-confmountPath: /etc/redis- name: pvc-datamountPath: /datavolumes:- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/Shanghai- name: redis-confconfigMap:name: redis-cluster-configitems:- key: redis-cluster.confpath: redis-cluster.confvolumeClaimTemplates:- metadata:name: pvc-dataspec:accessModes: [ "ReadWriteOnce" ]resources:requests:storage: 1GistorageClassName: nfs-client # StorageClass名称
StatefulSet方式部署Redis集群(暴露6个端口)
apiVersion: v1
kind: ConfigMap
metadata:name: redis-cluster-config
data:redis-cluster-0.conf: |protected-mode noport 7111cluster-announce-bus-port 17111tcp-backlog 511timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /data/redis-7111.pidloglevel noticelogfile /data/redis-7111.logdatabases 1always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump-7111.rdbdir /datamasterauth qxb#redis#cluster#testslave-serve-stale-data yesslave-read-only yesreplica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass qxb#redis#cluster#testlazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly yesappendfilename "appendonly-7111.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yescluster-config-file nodes-7111.confcluster-node-timeout 15000cluster-migration-barrier 1cluster-require-full-coverage yesslowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesredis-cluster-1.conf: |protected-mode noport 7112cluster-announce-bus-port 17112tcp-backlog 511timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /data/redis-7112.pidloglevel noticelogfile /data/redis-7112.logdatabases 1always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump-7112.rdbdir /datamasterauth qxb#redis#cluster#testslave-serve-stale-data yesslave-read-only yesreplica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass qxb#redis#cluster#testlazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly yesappendfilename "appendonly-7112.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yescluster-config-file nodes-7112.confcluster-node-timeout 15000cluster-migration-barrier 1cluster-require-full-coverage yesslowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesredis-cluster-2.conf: |protected-mode noport 7113cluster-announce-bus-port 17113tcp-backlog 511timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /data/redis-7113.pidloglevel noticelogfile /data/redis-7113.logdatabases 1always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump-7113.rdbdir /datamasterauth qxb#redis#cluster#testslave-serve-stale-data yesslave-read-only yesreplica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass qxb#redis#cluster#testlazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly yesappendfilename "appendonly-7113.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yescluster-config-file nodes-7113.confcluster-node-timeout 15000cluster-migration-barrier 1cluster-require-full-coverage yesslowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesredis-cluster-3.conf: |protected-mode noport 7114cluster-announce-bus-port 17114tcp-backlog 511timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /data/redis-7114.pidloglevel noticelogfile /data/redis-7114.logdatabases 1always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump-7114.rdbdir /datamasterauth qxb#redis#cluster#testslave-serve-stale-data yesslave-read-only yesreplica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass qxb#redis#cluster#testlazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly yesappendfilename "appendonly-7114.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yescluster-config-file nodes-7114.confcluster-node-timeout 15000cluster-migration-barrier 1cluster-require-full-coverage yesslowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesredis-cluster-4.conf: |protected-mode noport 7115cluster-announce-bus-port 17115tcp-backlog 511timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /data/redis-7115.pidloglevel noticelogfile /data/redis-7115.logdatabases 1always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump-7115.rdbdir /datamasterauth qxb#redis#cluster#testslave-serve-stale-data yesslave-read-only yesreplica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass qxb#redis#cluster#testlazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly yesappendfilename "appendonly-7115.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yescluster-config-file nodes-7115.confcluster-node-timeout 15000cluster-migration-barrier 1cluster-require-full-coverage yesslowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesredis-cluster-5.conf: |protected-mode noport 7116cluster-announce-bus-port 17116tcp-backlog 511timeout 0tcp-keepalive 300daemonize nosupervised nopidfile /data/redis-7116.pidloglevel noticelogfile /data/redis-7116.logdatabases 1always-show-logo yessave 900 1save 300 10save 60 10000stop-writes-on-bgsave-error yesrdbcompression yesrdbchecksum yesdbfilename dump-7116.rdbdir /datamasterauth qxb#redis#cluster#testslave-serve-stale-data yesslave-read-only yesreplica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-disable-tcp-nodelay noreplica-priority 100requirepass qxb#redis#cluster#testlazyfree-lazy-eviction nolazyfree-lazy-expire nolazyfree-lazy-server-del noreplica-lazy-flush noappendonly yesappendfilename "appendonly-7116.aof"appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000cluster-enabled yescluster-config-file nodes-7116.confcluster-node-timeout 15000cluster-migration-barrier 1cluster-require-full-coverage yesslowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096stream-node-max-entries 100activerehashing yesclient-output-buffer-limit normal 0 0 0client-output-buffer-limit replica 256mb 64mb 60client-output-buffer-limit pubsub 32mb 8mb 60hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yes
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-0
spec:selector:statefulset.kubernetes.io/pod-name: redis-cluster-0type: NodePortsessionAffinity: Noneports:- name: redis-30201port: 7111targetPort: 7111nodePort: 30201- name: redis-30211port: 17111targetPort: 17111nodePort: 30211
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-1
spec:selector:statefulset.kubernetes.io/pod-name: redis-cluster-1type: NodePortsessionAffinity: Noneports:- name: redis-30202port: 7112targetPort: 7112nodePort: 30202- name: redis-30212port: 17112targetPort: 17112nodePort: 30212
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-2
spec:selector:statefulset.kubernetes.io/pod-name: redis-cluster-2type: NodePortsessionAffinity: Noneports:- name: redis-30203port: 7113targetPort: 7113nodePort: 30203- name: redis-30213port: 17113targetPort: 17113nodePort: 30213
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-3
spec:selector:statefulset.kubernetes.io/pod-name: redis-cluster-3type: NodePortsessionAffinity: Noneports:- name: redis-30204port: 7114targetPort: 7114nodePort: 30204- name: redis-30214port: 17114targetPort: 17114nodePort: 30214
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-4
spec:selector:statefulset.kubernetes.io/pod-name: redis-cluster-4type: NodePortsessionAffinity: Noneports:- name: redis-30205port: 7115targetPort: 7115nodePort: 30205- name: redis-30215port: 17115targetPort: 17115nodePort: 30215
---
apiVersion: v1
kind: Service
metadata:name: redis-cluster-5
spec:selector:statefulset.kubernetes.io/pod-name: redis-cluster-5type: NodePortsessionAffinity: Noneports:- name: redis-30206port: 7116targetPort: 7116nodePort: 30206- name: redis-30216port: 17116targetPort: 17116nodePort: 30216
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: redis-cluster
spec:serviceName: redis-clusterreplicas: 6selector:matchLabels:app: redis-clustertemplate:metadata:annotations:statefulset.kubernetes.io/pod-name: $(POD_NAME)labels:app: redis-clusterspec:volumes:- name: redis-datahostPath:path: /var/lib/docker/redis/clustertype: DirectoryOrCreate- name: redis-configconfigMap:name: redis-cluster-config- name: timezonehostPath:path: /usr/share/zoneinfo/Asia/ShanghaiinitContainers:- name: init-0image: busyboximagePullPolicy: IfNotPresentterminationMessagePath: /dev/termination-logterminationMessagePolicy: Filecommand: [ "sysctl", "-w", "net.core.somaxconn=511" ]securityContext:privileged: true- name: init-1image: busyboximagePullPolicy: IfNotPresentterminationMessagePath: /dev/termination-logterminationMessagePolicy: Filecommand: [ "sh", "-c", "echo never > /sys/kernel/mm/transparent_hugepage/enabled" ]securityContext:privileged: truecontainers:- name: redisimage: redis:6.0.8imagePullPolicy: IfNotPresentterminationMessagePath: /dev/termination-logterminationMessagePolicy: FilevolumeMounts:- name: redis-datamountPath: /data- name: redis-configmountPath: /usr/local/etc/redis/env:- name: HOST_IPvalueFrom:fieldRef:fieldPath: status.hostIP- name: POD_IPvalueFrom:fieldRef:fieldPath: status.podIP- name: POD_NAMEvalueFrom:fieldRef:fieldPath: metadata.name- name: TZvalue: "Asia/Shanghai"command: [ "redis-server" ,"/usr/local/etc/redis/$(POD_NAME).conf" ]args:- --cluster-announce-ip- $(POD_IP)
相关文章:

redis集群部署
创建ConfigMap redis-cm.yaml apiVersion: v1 kind: ConfigMap metadata:name: redis-cluster data:update-node.sh: |#!/bin/shREDIS_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}/&quo…...

VUE条件树查询
看如下图所示的功能,是不是可高级了?什么,你没看懂?拜托双击放大看! 是的,我最近消失了一段时间就是在研究这个玩意的实现,通过不懈努力与钻研并参考其他人员实现并加以改造,很好&am…...

vue框架学习 -- 日历控件 FullCalendar 使用总结
最近在项目中要实现日期排班的功能,正好要用到日历视图的控件,经过对比发现,vue 中 使用 FullCalendar 可以实现相关需求,下面对使用过程做一个总结。 一. 引入 FullCalendar 控件 package.json 中添加相关依赖 "dependen…...

[数据集][目标检测]猪数据集VOC-2856张
数据集格式:Pascal VOC格式(不包含分割的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):2856 标注数量(xml文件个数):2856 标注类别数:1 标注类别名称:["pig"] 每个类别标注的框数:…...

工业制造场景中的设备管理深度解析
在工业制造的广阔领域中,设备管理涵盖多个关键方面,对企业的高效生产和稳定运营起着举足轻重的作用。 一、设备运行管理 1.设备状态监测 实时监控设备的运行状态是确保生产顺利进行的重要环节。通过传感器和数据采集系统等先进技术,获取设备…...

OpenCV图像文件读写(3)统计多页图像文件中的页面数量函数imcount()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 返回给定文件中的图像数量。 imcount 函数将返回多页图像中的页面数量,对于单页图像则返回 1。 函数原型 size_t cv::imcount (cons…...

【数据治理-构建数据标准体系】
构建数据标准体系分为六大主要步骤,分别是: 1、规划数据标准 2、开发数据标准 3、发布数据标准 4、执行数据标准 5、数据标准遵从检查 6、维护数据标准 1、规划数据标准 (1)数据标准的规划首先是在公司业务架构和数据架构的范围…...

AI新方向:OpenAI o1是一个更擅长思考的模型系列:高级推理+逻辑严密+更广泛的知识,用于解决复杂的逻辑问题,慢思考
之前推出AI store感觉偏应用,也千篇一律,是AI的一个方向:广度。 现在推出o1 更严密的逻辑,也是AI的一个方向:深度。花更多时间,推理复杂的任务并解决比以前的科学、编码和数学模型更难的问题。确保AI的使用…...

Laravel部署后,CPU 使用率过高
我在部署 Laravel 应用程序时遇到严重问题。当访问量稍微大一点的时候,cpu马上就到100%了, 找了一大堆文档和说明,都是说明laravel处理并发的能力太弱,还不如原生的php。最后找到swoole解决问题。 1、php下载swoole插件࿰…...

Rust调用tree-sitter支持自定义语言解析
要使用 Rust 调用 tree-sitter 解析自定义语言,你需要遵循一系列步骤来定义语言的语法,生成解析器,并在 Rust 中使用这个解析器。下面是详细步骤: 1. 定义自定义语言的语法 首先,你需要创建一个 tree-sitter 语言定义…...

如何解决跨域请求中的 CORS 错误
聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介如何解决跨域请求中的 CORS 错误1. 引言2. 什么是 CORS?2.1 同源策略示例: 2.2 CORS 请求的类型 3. CORS 错误的原因3.1 常见 CORS 错误示例 4. 解决 CORS 错误的常见方法4.1 在服务器端启用 CORS4.1.1 Node…...

计算机知识科普问答--20(96-100)
文章目录 96、为什么要进行内存管理?1. **多进程环境中的内存共享与隔离**举例:2. **提高内存利用率**举例:3. **虚拟内存支持**举例:4. **内存分配的灵活性与效率**举例:5. **内存保护**举例:6. **内存分段和分页的管理**7. **内存交换(Swapping)**举例:8. **提升系统…...

济南站活动回顾|IvorySQL中的Oracle XML函数使用示例及技术实现原理
近日,由中国开源软件推进联盟PG分会 & 齐鲁软件园联合发起的“PostgreSQL技术峰会济南站”在齐鲁开源社举办。瀚高股份IvorySQL作为合作伙伴受邀参加此次活动。 瀚高股份IvorySQL技术工程师 向逍 带来「IvorySQL中的Oracle XML函数兼容」的议题分享。在演讲中&a…...

【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术QueSearch
【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术Que2Search 目录 文章目录 【电商搜索】现代工业级电商搜索技术-Facebook语义搜索技术Que2Search目录0. 论文信息1. 研究背景:2. 技术背景和发展历史:3. 算法建模3.1 模型架构3.1.1 双塔与分类 …...

海滨体育馆管理系统:SpringBoot实现技巧与案例
2系统关键技术 2.1JAVA技术 Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力。Java的跨平台能力十分强大,只需一次编译,任…...

个人计算机与网络的安全
关于 wifi 大家都知道 wifi 已经使用了 wpa3 非常安全 但很多人不知道 pin 和 wps 这两项有漏洞 我发现很多用户都简单设置了这两项 他们的设置 使他们的网络出现了漏洞 关于 国产的 linux 老实说全是漏洞 默认开启 很多服务 但初始化的设置都有漏洞 关于 系统安全 老…...

AIGC教程:如何用Stable Diffusion+ControlNet做角色设计?
前言 对于生成型AI的画图能力,尤其是AI画美女的能力,相信同行们已经有了充分的了解。然而,对于游戏开发者而言,仅仅是漂亮的二维图片实际上很难直接用于角色设计,因为,除了设计风格之外,角色设…...

5V继电器模块详解(STM32)
目录 一、介绍 二、模块原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 relay.h文件 relay.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 继电器(Relay),也称电驿,是一种电子控制器件,它具有控制系统…...

探究Spring的单例设计模式--单例Bean
Spring的单例设计模式 在Spring框架中,单例设计模式是一种常见且重要的设计模式,主要用于确保在应用程序的生命周期中仅创建一个特定的Bean实例 一、什么是单例设计模式? 单例设计模式是一种创建型设计模式,确保一个类只有一个…...

js基础速成-Set、Map
集合(Set) 集合是元素的集合,只能包含唯一元素 创建一个空集合 const companies new Set() console.log(companies)Set(0) {}从数组创建集合 const languages [英语,芬兰语,英语,法语,西班牙语,英语,法语, ]const setOfLanguages new …...

手机软件何时统一——桥接模式
文章目录 手机软件何时统一——桥接模式凭什么你的游戏我不能玩紧耦合的程序演化合成/聚合复用原则松耦合的程序桥接模式桥接模式基本代码 手机软件何时统一——桥接模式 凭什么你的游戏我不能玩 时间:5月31日20点 地点:大鸟房间 人物…...

【Nacos 架构 原理】服务发现模块之Nacos注册中心服务数据模型
文章目录 服务(Service)和服务实例(Instance)定义服务服务元数据定义实例实例元数据持久化属性 集群定义集群 生命周期服务的生命周期实例的生命周期集群的生命周期元数据的生命周期 服务(Service)和服务实…...

基于微信小程序爱心领养小程序设计与实现(源码+参考文档+定制开发)
博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…...

【数据库】 MongoDB 用户分配新的角色和权限
在 MongoDB 中,可以通过简单的命令为用户分配新的角色和权限。这对于调整用户的访问能力和管理数据库安全至关重要。以下是如何为用户分配新的角色和权限的详细步骤。 1. 使用 MongoDB Shell 分配角色 1.1 修改用户角色 要为现有用户分配新的角色,可以…...

加速 Python for 循环
在 Python 编程中,for 循环是开发者常用的工具之一,但它的执行速度经常让人感到不满。幸运的是,有许多方法可以显著提高 for 循环的效率。 本文将介绍几种简单而高效的优化技巧,帮助你加速Python for 循环,速度提升从…...

计算机毕业设计 基于Python国潮男装微博评论数据分析系统的设计与实现 Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

React 表单与事件
React 表单与事件 React 是一个用于构建用户界面的 JavaScript 库,它通过组件化的方式来提高开发效率和代码的可维护性。在 React 应用中,表单和事件处理是核心功能之一,它们允许用户与应用程序进行交互。本文将深入探讨 React 中的表单处理…...

Appium独立测试自动化初始化脚本
1、查看环境初始化参数 确保appium已经开起来了,设置ip ,并点击启动 打开夜神模拟器,点击工具--设置 最下面的版本说明,双击进去 版本号这里再去单击。 直到进入到开发者模式。 可能我们不是开发者模式打开的状态,所以软件访问模…...

Nginx反向代理配置支持websocket
一、官方文档 WebSocket proxying 为了将客户端和服务器之间的连接从HTTP/1.1转换为WebSocket,使用了HTTP/1.1中可用的协议切换机制(RFC 2616: Hypertext Transfer Protocol – HTTP/1.1)。 然而,这里有一个微妙之处:由于“升级”…...

C# 游戏引擎中的协程
前言 书接上回,我谈到了Unity中的协程的重要性,虽然协程不是游戏开发“必要的”,但是它可以在很多地方发挥优势。 为了在Godot找回熟悉的Unity协程开发手感,不得不自己做一个协程系统,幸运的是,有了Unity的…...