
文章目录一、准备redis镜像Dockerfileredis配置文件redis.confredis哨兵配置文件sentinel.conf启动脚本run.sh构建镜像二、准备k8s yml—redis-sentinel.yml三、查看redis哨兵信息四、连接redis哨兵k8s其它命名空间的java进程连接redis哨兵客户端连接redis一、准备redis镜像DockerfileFROM redis:6.0 MAINTAINER 运维小兵 COPY *.conf /opt/conf/ COPY run.sh /opt/run.sh RUNaptupdate -y;apt-getinstallvimnet-tools -y;apt-getclean\chmodx /opt/run.sh CMD /opt/run.shredis配置文件redis.conf#绑定到哪台机器0.0.0.0表示允许所有主机访问bind0.0.0.0#redis3.2版本之后加入的特性yes开启后如果没有配置bind则默认只允许127.0.0.1访问protected-modeyes#对外暴露的访问端口port6379#登录密码requirepass devops#主从同步认证密码masterauth devops#三次握手的时候server端接收到客户端 ack确认号之后的队列值tcp-backlog511#服务端与客户端连接超时时间0表示永不超时timeout0#连接redis的时候的密码 hello#requirepass hello#tcp 保持会话时间是300stcp-keepalive300#redis是否以守护进程运行如果是会生成piddaemonizeyessupervised no#pid文件路径pidfile /var/run/redis_6379.pid#日志级别loglevel notice logfile /var/log/redis.log#默认redis有几个db库databases32#每间隔900秒如果一个键值发生变化就触发快照机制save9001save30010save6010000#快照出错时是否禁止redis写入stop-writes-on-bgsave-error no#持久化到rdb文件时是否压缩文件rdbcompression no#持久化到rdb文件是是否RC64开启验证rdbchecksum no#持久化输出的时候rdb文件命名dbfilename dump.rdb#持久化文件路径slave-serve-stale-datayesslave-read-onlyyesrepl-diskless-sync no repl-diskless-sync-delay5repl-disable-tcp-nodelay no slave-priority100#是否开启aof备份appendonlyyes#aof备份文件名称appendfilenameappendonly.aofappendfsync everysec no-appendfsync-on-rewrite no auto-aof-rewrite-percentage100auto-aof-rewrite-min-size 64mb aof-load-truncatedyeslua-time-limit5000slowlog-log-slower-than10000slowlog-max-len128latency-monitor-threshold0notify-keyspace-eventshash-max-ziplist-entries512hash-max-ziplist-value64list-max-ziplist-size-2list-compress-depth0set-max-intset-entries512zset-max-ziplist-entries128zset-max-ziplist-value64hll-sparse-max-bytes3000activerehashingyesclient-output-buffer-limit normal000client-output-buffer-limit slave 256mb 64mb60client-output-buffer-limit pubsub 32mb 8mb60hz10aof-rewrite-incremental-fsyncyes#客户端最大连接数maxclients20000lazyfree-lazy-evictionyeslazyfree-lazy-expireyeslazyfree-lazy-server-delyesslave-lazy-flushyesredis哨兵配置文件sentinel.conf# 哨兵sentinel实例运行的端口 默认26379port26379# 哨兵sentinel的工作目录dir/tmpsentinel deny-scripts-reconfigyessentinel monitor mymaster redis-0.redis63792sentinel auth-pass mymaster devops sentinel down-after-milliseconds mymaster5000sentinel failover-timeout mymaster15000# 设定5秒内没有响应说明服务器挂了,需要将配置放在sentinel monitor master 127.0.0.1 6379 下面sentinel parallel-syncs mymaster2# 设定15秒内master没有活起来就重新选举主sentinel config-epoch mymaster3#表示如果master重新选出来后其它slave节点能同时并行从新master同步缓存的台数有多少个显然该值越大所有slave节点完成同步切换的整体速度越快但如果此时正好有人在访问这些slave可能造成读取失败影响面会更广。最保定的设置为1只同一时间只能有一台干这件事这样其它slave还能继续服务但是所有slave全部完成缓存更新同步的进程将变慢。sentinel leader-epoch mymaster3启动脚本run.sh#!/bin/bashpod_seq$(echo$POD_NAME|awk-F-{print $2})if[[${pod_seq}-ne0]];then#为从机sed-i/^slaveof /d/opt/conf/redis.confechoslaveof redis-0.redis 6379/opt/conf/redis.conf#redis-0.redis代表第一个redis的访问地址fi/usr/local/bin/redis-server /opt/conf/redis.confsleep15#如果redis-0没起来,它里面的哨兵也起不来等待一段时间再启动哨兵/usr/local/bin/redis-sentinel /opt/conf/sentinel.conftail-f/var/log/redis.log构建镜像dockerbuild--pull-t192.168.1.2/common/redis_sentinel:6.0.dockerpush192.168.1.2/common/redis_sentinel:6.0二、准备k8s yml—redis-sentinel.ymlStatefulSet相关信息可以参考K8S之StatefulSet有状态服务apiVersion:apps/v1kind:StatefulSetmetadata:name:redisnamespace:redis-nsspec:serviceName:redisselector:matchLabels:app:redisreplicas:3template:metadata:labels:app:redisspec:nodeSelector:productLine:redis-nsarea:wuhanrestartPolicy:Alwayscontainers:-name:redisimage:192.168.1.2/common/redis_sentinel:6.0imagePullPolicy:Alwaysenv:-name:POD_NAMEvalueFrom:fieldRef:fieldPath:metadata.namelivenessProbe:tcpSocket:port:6379initialDelaySeconds:3periodSeconds:5readinessProbe:tcpSocket:port:6379initialDelaySeconds:3periodSeconds:5ports:-containerPort:6379resources:requests:memory:256Micpu:50mlimits:memory:256Micpu:200m---apiVersion:v1kind:Servicemetadata:name:redisnamespace:redis-nsspec:type:NodePortports:-name:redisport:6379targetPort:6379nodePort:26380selector:app:rediskubectl apply -f redis-sentinel.yml会创建三个redis podkubectl get pod-nredis-ns三、查看redis哨兵信息kubectlexec-itredis-0-nredis-ns --bashrootredis-0:/data# redis-cli127.0.0.1:6379AUTH devops127.0.0.1:6379info Replication#查看主从信息127.0.0.1:6379exitrootredis-0:/data# redis-cli -p 26379127.0.0.1:26379info sentinel#查看哨兵信息四、连接redis哨兵k8s其它命名空间的java进程连接redis哨兵spring: redis: database:4# redis哨兵地址sentinel: master: mymaster nodes: redis-0.redis.redis-demo.svc.cluster.local:26379,redis-1.redis.redis-demo.svc.cluster.local:26379,redis-2.redis.redis-demo.svc.cluster.local:26379# redis访问密码默认为空password: devops客户端连接redisnode节点IP:26380 密码:devops