k8s部署Redis部署Clister集群
(1)Redis基于内存运行并支持持久化(2)采用key-value(键值对)的存储形式(3)优点①具有极高的数据读写速度②支持丰富的数据类型③支持数据的持久化④数据的操作都是原子性⑤支持数据备份(1)Redis集群即Redis Cluster,是Redis 3.0开始引入的分布式存储方案(2)Redis集群是一个提供多个Redis节点间共享数据的程序集(3)集群中的节点分别为主节点和从节点:只有
k8s部署Redis部署Clister集群
1、Redis介绍
(1)Redis基于内存运行并支持持久化
(2)采用key-value(键值对)的存储形式
(3)优点
①具有极高的数据读写速度
②支持丰富的数据类型
③支持数据的持久化
④数据的操作都是原子性
⑤支持数据备份
2、Redis应用场景
(1)热点数据的缓存–时事热点新闻
(2)分布式架构,多个应用之间共享–做session共享
(3)计数器–利用string类型可以做常规计数,微博数,粉丝数
(4)限时业务的运用–优惠活动信息、手机验证码
(5)统计数据–在线用户统计
3、Redis集群介绍
(1)Redis集群即Redis Cluster,是Redis 3.0开始引入的分布式存储方案
(2)Redis集群是一个提供多个Redis节点间共享数据的程序集
(3)集群中的节点分别为主节点和从节点:只有主节点负责读写请求和集群信息的维护;从节点只进行主节点数据和状态信息的复制
(4)Redis集群通过数据分区来提供一定程度的高可用,在实际环境中当某个节点宕机或者不可达的情况下,其他节点可继续提供服务
4、Redis集群的作用
(1)降低单台服务器宕机带来的业务灾难
(2)数据分区(或数据分片)是集群最核心的功能
集群将数据分散到多个节点,一方面突破了Redis单机内存大小的限制,存储容量大大增加;另一方面每个主节点都可以对外提供读服务和写服务,大大提高了集群的响应能力
(3)服务高可用
集群支持主从复制和主节点的自动故障转移;当任意节点发生故障时,备用节点接替,集群仍然可以对外提供服务
5、Redis集群的实现方法
(1)客户端分片:由客户端决定key写入或者读取的节点
(2)代理分片:客户端发送请求一个代理,然后代理将请求转发到节点
(3)服务器端分片:由服务器端决定key的存储位置
6、Redis-Cluster数据分片
(1)Redis集群没有使用一致性hash算法,而是引入了哈希槽概念,一共有16384个哈希槽
(2)每个进入Redis的key通过hash运算得到结果,结果除以16384求余得到相应的哈希槽,然后存放在对应的节点中
(3)当数据库中的16384个槽都分配了节点时,集群处于上线状态(ok);如果任意节点没有分配一个槽,则集群处于下线状态(fail)
(4)集群的每个节点只负责一部分哈希槽,客户端可以请求任意一个节点,每个节点都保存了16384个slot中的一部分。
7、Redis-Cluster的主从复制模型
(1)为了保证高可用性,redis-cluster集群引入了主从模式
(2)假设集群中有A、B、C三个节点,如果节点B宕机了,整个集群就会因缺少5461-10922这个范围的槽而不可用
(3)为每个节点添加一个从节点A1、B1、C1,整个集群便有三个master节点和三个slave节点组成,在节点B失败后,集群便会选举B1为新的主节点继续服务
(4)当B和B1节点都失败后,集群将不可用
8、集群模式的优缺点
(1)优点
①采用去中心化思想,数据按照slot存储分布在多个节点,节点间数据共享,可以动态调整数据分布
②可扩展性:可线性扩展到1000多个节点,节点可以动态添加或删除
③高可用性:部分节点不可用时,集群仍可用。通过增加slave做standby数据副本,能够实现故障自动failover,节点之间通过(gossip)协议交换状态信息,用投票机制完成clave到master的角色提升
④降低运维成本,提高系统的扩展性和可用性
(2)缺点
①数据通过异步复制,Redis集群不能保证数据的强一致性
②不支持多数据空间,集群模式只能使用1个数据库空间,即数据库0
总结:Redis和Memcached的对比:
(1)相同点:
①都属于NoSQL数据库,两者都使用键值对的方式存储数据;
②都使用内存来缓存数据;
(2)不同点:
①Redis可以支持更多的数据类型,比如string(key-value)、list、zset、hash、set等。memcached只支持string数据类型;
②Redis支持数据的复制备份,memcached不支持;
③Redis支持数据持久化,可以将内存中的数据保存在磁盘上,而memcached不支持;
④Redis在服务器端实现分布式存储,而memcached通过客户端实现分布式存储;
⑤Redis是单线程工作模式,而memcached属于多线程工作模式;
install
1、准备k8s集群
2、部署rook-ceph存储
3、部署(redis三主三从6.2.6)
创建statefulsets有状态应用
##配置文件
apiVersion: v1
kind: ConfigMap
metadata:
name: redis-cluster-config
namespace: redis-cluster
data:
redis-cluster.conf: |
daemonize no
supervised no
protected-mode no
bind 0.0.0.0
port 6379
cluster-announce-bus-port 16379
cluster-enabled yes
appendonly yes
cluster-node-timeout 5000
dir /data
cluster-config-file /data/nodes.conf
pidfile /data/redis.pid
loglevel notice
logfile /data/redis_log
---
apiVersion: v1
kind: Service
metadata:
name: redis-cluster-service
namespace: redis-cluster
spec:
selector:
app: redis-cluster
clusterIP: None
ports:
- name: redis-6379
port: 6379
- name: redis-16379
port: 16379
---
apiVersion: v1
kind: Service
metadata:
name: redis-cluster-service-access
namespace: redis-cluster
spec:
selector:
app: redis-cluster
type: NodePort
sessionAffinity: None
ports:
- name: redis-6379
port: 6379
targetPort: 6379
nodePort: 30202
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: redis-cluster
name: redis-cluster
namespace: redis-cluster
spec:
serviceName: redis-cluster-service
replicas: 6
selector:
matchLabels:
app: redis-cluster
template:
metadata:
labels:
app: redis-cluster
spec:
terminationGracePeriodSeconds: 30
containers:
- name: redis
image: redis:6.2.6
imagePullPolicy: IfNotPresent
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
command: [ "redis-server", "/etc/redis/redis-cluster.conf" ]
args:
- "--cluster-announce-ip"
- "$(POD_IP)"
env:
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: TZ
value: "Asia/Shanghai"
ports:
- name: redis
containerPort: 6379
protocol: TCP
- name: cluster
containerPort: 16379
protocol: TCP
volumeMounts:
- name: redis-conf
mountPath: /etc/redis
- name: pvc-data
mountPath: /data
volumes:
- name: timezone
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
- name: redis-conf
configMap:
name: redis-cluster-config
items:
- key: redis-cluster.conf
path: redis-cluster.conf
volumeClaimTemplates:
- metadata:
name: pvc-data
namespace: redis-cluster
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5G
accessModes:
- ReadWriteOnce #访问模式为RWO
storageClassName: "rook-ceph-block" #指定使用的存储类,实现动态分配pv
查看pod
[root@k8s-master-01 rbd]# kubectl get po -n redis-cluster
NAME READY STATUS RESTARTS AGE
redis-cluster-0 1/1 Running 0 113m
redis-cluster-1 1/1 Running 0 113m
redis-cluster-2 1/1 Running 0 112m
redis-cluster-3 1/1 Running 0 112m
redis-cluster-4 1/1 Running 0 112m
redis-cluster-5 1/1 Running 0 112m
查看pod和pvc
[root@k8s-master-01 rbd]# kubectl get svc,pvc -n redis-cluster
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/redis-cluster-service ClusterIP None <none> 6379/TCP,16379/TCP 113m
service/redis-cluster-service-access NodePort 10.105.72.16 <none> 6379:30202/TCP 113m
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/pvc-data-redis-cluster-0 Bound pvc-2dafa607-4492-45be-9f8b-43344e5c6860 5Gi RWO rook-ceph-block 113m
persistentvolumeclaim/pvc-data-redis-cluster-1 Bound pvc-fb032fcb-2dc1-447a-9307-0922d14d8b41 5Gi RWO rook-ceph-block 113m
persistentvolumeclaim/pvc-data-redis-cluster-2 Bound pvc-51ca237c-ff32-43c1-9710-13b955365641 5Gi RWO rook-ceph-block 113m
persistentvolumeclaim/pvc-data-redis-cluster-3 Bound pvc-2beed7b9-c537-4a95-bf38-5c4213268779 5Gi RWO rook-ceph-block 113m
persistentvolumeclaim/pvc-data-redis-cluster-4 Bound pvc-4699194f-c231-4ebd-90e4-74a2b1dd27db 5Gi RWO rook-ceph-block 113m
persistentvolumeclaim/pvc-data-redis-cluster-5 Bound pvc-11d717d2-6339-4a48-8fe6-1d1671c812ea 5Gi RWO rook-ceph-block 113m
初始化集群
kubectl exec -it redis-cluster-0 -n redis-cluster -- redis-cli --cluster create --cluster-replicas 1 $(kubectl get pods -n redis-cluster -l app=redis-cluster -o jsonpath='{range.items[*]}{.status.podIP}:6379 {end}')
查看状态
[root@k8s-master-01 rbd]# kubectl get po -n redis-cluster
NAME READY STATUS RESTARTS AGE
redis-cluster-0 1/1 Running 0 116m
redis-cluster-1 1/1 Running 0 116m
redis-cluster-2 1/1 Running 0 116m
redis-cluster-3 1/1 Running 0 116m
redis-cluster-4 1/1 Running 0 116m
redis-cluster-5 1/1 Running 0 116m
插入数据
set name aaa #增加键值对
写入数据,在所有节点查看,删除节点在查看
删除pod验证
[root@k8s-master-01 rbd]# kubectl delete po redis-cluster-3 -n redis-cluster
pod "redis-cluster-3" deleted
[root@k8s-master-01 rbd]# kubectl get po -n redis-cluster
NAME READY STATUS RESTARTS AGE
redis-cluster-0 1/1 Running 0 122m
redis-cluster-1 1/1 Running 0 122m
redis-cluster-2 1/1 Running 0 122m
redis-cluster-3 0/1 ContainerCreating 0 1s
redis-cluster-4 1/1 Running 0 121m
redis-cluster-5 1/1 Running 0 121m
#检查redis集群信息
[root@k8s-master-01 rbd]# kubectl exec -it redis-cluster-0 -n redis-cluster /bin/bash
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
root@redis-cluster-0:/data# redis-cli
127.0.0.1:6379> 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:2146
cluster_stats_messages_pong_sent:2027
cluster_stats_messages_sent:4173
cluster_stats_messages_ping_received:2022
cluster_stats_messages_pong_received:2145
cluster_stats_messages_meet_received:5
cluster_stats_messages_fail_received:1
cluster_stats_messages_received:4173
127.0.0.1:6379> cluster nodes
afba122a5925350c3880c5548a93b01c9e339aea 10.244.151.140:6379@16379 slave 49ee575fa9904dea02e6ee060ef78343d748fde9 0 1716788126110 2 connected
4814f110f7b2cae0301cd316a0c87be29e048b96 10.244.154.232:6379@16379 myself,master - 0 1716788125000 1 connected 0-5460
76149705c9ae8d2bf8c9dfc40cc3bedb62ea4698 10.244.151.129:6379@16379 master - 0 1716788124608 3 connected 10923-16383
a58ad639640e9d7c61cdd92cfdb62292ad9b9702 10.244.44.241:6379@16379 slave 4814f110f7b2cae0301cd316a0c87be29e048b96 0 1716788126513 1 connected
49ee575fa9904dea02e6ee060ef78343d748fde9 10.244.44.240:6379@16379 master - 0 1716788125000 2 connected 5461-10922
e41aa482662fb70a5147c561fe5f9c325abd9691 10.244.154.234:6379@16379 slave 76149705c9ae8d2bf8c9dfc40cc3bedb62ea4698 0 1716788125908 3 connected
更多推荐
所有评论(0)