介绍
我这里是k8s的1.22版本,使用helm部署的redis的哨兵模式+haproxy实现高可用。
部署
搜索repo
helm search repo redis-ha
下载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
查看pod,svc,ep
k get po,svc,ep -n redis
验证
查看master的配置信息。(默认配置)
cat /data/conf/redis.conf
查看sentinel的配置信息。
cat /data/conf/sentinel.conf
# 指定哨兵监听的集群名,master地址和端口,哨兵数量。
sentinel monitor redis-master 10.96.83.150 6379 2
登录到master中,查看集群信息,设置key name。
kubectl exec -it redis-ha-server-0 sh -n redis
redis-cli -a xxx
info replication
登录到slave,查看name。
k exec -it redis-ha-server-1 -n redis -- sh
redis-cli -a xxx
get name
监控
peometheus中查看target
redis-ha
redis-ha-proxy
grafana中查看
导入模版11835。
应用-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
查看插件设置,连接成功。
登录redis数据库,查看keys。
进阶
使用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