redis-ha on k8s

介绍

我这里是k8s的1.22版本,使用helm部署的redis的哨兵模式+haproxy实现高可用。

部署

搜索repo

helm search repo redis-ha

file

下载chart并解压

helm pull azure/redis-ha
tar xvf redis-ha-4.4.6.tgz
cd redis-ha

修改value.yaml

vim value.yaml
# 根据自己的需求进行修改,比如调整redis的配置,是否开启metrics监控,pv存储,redis密码等。

部署

k create ns redis
helm install redis-ha . -n redis

file

查看pod,svc,ep

k get po,svc,ep -n redis

file

验证

查看master的配置信息。(默认配置)

cat /data/conf/redis.conf

file

查看sentinel的配置信息。

cat /data/conf/sentinel.conf
# 指定哨兵监听的集群名,master地址和端口,哨兵数量。
sentinel monitor redis-master 10.96.83.150 6379 2

file

登录到master中,查看集群信息,设置key name。

kubectl exec -it redis-ha-server-0 sh -n redis
redis-cli -a xxx
info replication

file

登录到slave,查看name。

k exec -it redis-ha-server-1 -n redis -- sh
redis-cli -a xxx
get name

file

监控

peometheus中查看target

redis-ha
file

redis-ha-proxy
file

grafana中查看

导入模版11835。
file

应用-Wordpress使用redis缓存

WordPress安装Redis Object Cache插件,拷贝并修改wp-config.php文件

k get po -n wordpress
k get svc -n redis
k cp wordpress-98b4769d6-9fzhc:/bitnami/wordpress/wp-config.php -n wordpress wp-config.php
vim wp-config.php
# redis配置需要在文件的上方定义,不能粘贴到文件末尾,否则会因密码问题连不上redis
define('WP_REDIS_SCHEME', 'tcp'); # 指定用于与Redis实例进行通信的协议
define('WP_REDIS_HOST', '10.96.158.210'); # Redis服务器的IP或主机名,这里使用ha-proxy的svc地址。
define('WP_REDIS_PORT', '6379'); # Redis端口
define('WP_REDIS_PASSWORD', 'xxxxx');
define('WP_REDIS_DATABASE', '0'); # 接受用于使用该SELECT命令自动选择逻辑数据库的数值
define('WP_CACHE_KEY_SALT', 'wp_'); # 设置所有缓存键的前缀(Wordpress多站点模式下使用)
define('WP_REDIS_MAXTTL', '86400');

k cp wp-config.php wordpress-98b4769d6-9fzhc:/bitnami/wordpress/wp-config.php  -n wordpress

file

查看插件设置,连接成功。

file

登录redis数据库,查看keys。

file

进阶

使用twemproxy对redis进行分片,即根据一定的算法将数据保存到不同的节点之中。
GitHub地址:https://github.com/twitter/twemproxy

特性

支持失败节点自动删除

  • 可以设置重新连接该节点的时间
  • 可以设置连接多少次之后删除该节点

支持设置HashTag

  • 通过HashTag可以自己设定将两个key哈希到同一个实例上去,减少与redis的直接连接数
  • 保持与redis的长连接
  • 减少了客户端直接与服务器连接的链接数量

自动分片到后端多个redis实例上

  • 多种hash算法:MD5、CRC16、CRC32、CRC32a、hsieh、murmur、Jenkins
  • 多种分片算法:ketama(一致性hash算法的一种实现)、modular、random
  • 可以设置后端实例的权重

避免单节点问题

可以平行部署多个代理层,通过HAProxy做负载均衡,将redis的读写分散到多个twemproxy上。

支持状态监控

  • 可设置状态监控IP和端口,访问IP和端口可以得到一个json格式的状态信息串
  • 可设置监控信息刷新间隔时间

使用pipelining处理请求和响应

  • 连接复用,内存复用
  • 将多个连接请求,组成redis pipelining统一redis请求

并不是支持所有redis命令

  • 不支持redis的事务操作
  • 使用SIDFF,SDIFFSTORE,SINTER,SINTERSTORE,SMOVE,SUNION and SUNIONSTORE 命令需要保证key都在同一个分片上。

参考地址:
https://blog.csdn.net/shmilychan/article/details/73433804

数据流向就是:
client—>haproxy—>twemproxy—>redis master—>同步到redis slave

0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x