Redis集群是一个提供在多个Redis间节点间共享数据的程序集,有着无中心架构、可扩展性、高可用性特点。
今天我们就使用首云容器云k8s版来搭建redis集群。本质上,在k8s上部署一个redis集群和部署一个普通应用没有太大区别,但我们需要注意一下两个问题:
REDIS是一个有状态应用这是部署redis集群时我们最需要注意的问题,当我们把redis以pod的形式部署在k8s中时,每个pod里缓存的数据都是不一样的,而且pod的IP是会随时变化,这时候如果使用普通的deployment和service来部署redis-cluster就会出现很多问题,因此需要改用StatefulSet+HeadlessService来解决数据持久化redis虽然是基于内存的缓存,但还是需要依赖于磁盘进行数据的持久化,以便服务出现问题重启时可以恢复已经缓存的数据。在集群中,我们需要使用共享文件系统+PV(持久卷)的方式来让整个集群中的所有pod都可以共享同一份持久化储存
准备:首先创建一个集群,并为我们的应用创建一个命名空间;
1,编辑配置文件
[root
master~]#viredis.conf[rootmaster~]#catredis.confappendonlyyesprotected-modeno#取消节点保护,防止集群初始化时无法访问节点cluster-enabledyescluster-config-file/var/lib/redis/nodes.confcluster-node-timeoutdir/var/lib/redisport[root
master~]#kubectlcreateconfigmapredis-conf--from-file=redis.conf-nredis-clusterconfigmap/redis-confcreated2,创建Headless类型的service
3,创建文件存储(用于应用挂载持久存储)
4,创建存储类,用于根据存储声明或存储模板来创建存储卷(pv)
5,创建6个存储声明
6,创建redis有状态应用(导入yaml文件创建)
apiVersion:apps/v1kind:StatefulSetmetadata:name:redis-appnamespace:redis-clusterspec:serviceName:redis-svcreplicas:6selector:matchLabels:app:redisappCluster:redis-clustertemplate:metadata:labels:app:redisappCluster:redis-clusterspec:terminationGracePeriodSeconds:20affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:-weight:podAffinityTerm:labelSelector:matchExpressions:-key:appoperator:Invalues:-redistopologyKey:kubernetes.io/hostnamecontainers:-name:redisimage:"redis"
最近更新
推荐文章