1.Docker安装Redis
参考史上最详细Docker安装Redis (含每一步的图解)实战 https://blog.csdn.net/weixin_45821811/article/details/116211724
步骤1:Docker拉取镜像
docker pull redis
步骤2:Docker挂载配置文件
接下来就是要将redis 的配置文件进行挂载,以配置文件方式启动redis 容器。(挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容器内部文件)
1)、挂载redis的配置文件
2)、挂载redis 的持久化文件(为了数据的持久化)。
- myredis.conf
# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1
protected-mode no
port 6379
tcp-backlog 511
requirepass 000415
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 30
always-show-logo yes
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-disable-tcp-nodelay no
replica-priority 100
lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no
appendonly yes
appendfilename "appendonly.aof"
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-max-len 128
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
stream-node-max-bytes 4096
stream-node-max-entries 100
activerehashing yes
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
步骤3:启动redis 容器
启动容器命令行
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v C:/Users/Season/Desktop/redis/myredis.conf:/etc/redis/redis.conf -v C:/Users/Season/Desktop/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass 000415
- 解释如下
–restart=always 总是开机启动
–log是日志方面的
-p 6379:6379 将6379端口挂载出去
–name 给这个容器取一个名字
-v 数据卷挂载
/home/redis/myredis/myredis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。
/home/redis/myredis/data:/data 这个同上
-d redis 表示后台启动redis
redis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf
–appendonly yes 开启redis 持久化
–requirepass 000415 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置)
成功界面
步骤4:进入容器
- 查看容器运行日志
docker logs --since 30m myredis
- 容器内部连接进行测试
docker exec -it myredis redis-cli
- 权限验证
auth 000415
步骤5:将django和redis连接
启用中间件
- settings\base.py
MIDDLEWARE = [
'interview.performance.performance_logger_middleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',#redis中间件
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',#redis中间件
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
建立CACHES
- settings\base.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD":"000415",
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # r/w timeout in seconds
}
}
}
2.K8S安装Redis
参考链接https://blog.csdn.net/sinat_27970175/article/details/120267970
步骤1:在K8S配置YAML档案
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: redis
name: redis
spec:
replicas: 1
selector:
matchLabels:
app: redis
serviceName: redis-svc
template:
metadata:
labels:
app: redis
spec:
containers:
- command:
- redis-server
- '--requirepass'
- 'redis@654321' # 初始密码
image: 'redis:5.0.5-alpine'
imagePullPolicy: Always
name: redis
ports:
- containerPort: 6379
protocol: TCP
resources:
requests:
cpu: 200m
memory: 1Gi
volumeMounts:
- mountPath: /data
name: volume-image-data
dnsPolicy: ClusterFirst
restartPolicy: Always
volumes:
- hostPath:
#path: C:/Users/Season/Desktop/K8S-redis/data # 宿主机挂载路径
path: /media
type: ''
name: volume-image-data
updateStrategy:
type: RollingUpdate
---
apiVersion: v1
kind: Service
metadata:
name: redis-svc
spec:
externalTrafficPolicy: Local
ports:
- name: redis-service
nodePort: 32222
port: 6379
protocol: TCP
targetPort: 6379
selector:
app: redis
sessionAffinity: None
type: NodePort
部署成功后,pod显示绿色正常。
步骤2:在pods中测试redis正常启动
输入redis-cli启动redis
步骤3:打开K8S服务器的防火墙
步骤4:将django和redis连接(TBD)
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',### 多语言中间件
'django.middleware.cache.UpdateCacheMiddleware',#redis中间件
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',#redis中间件
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# K8S redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://106.52.14.84:32222/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD":"redis@654321",
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # r/w timeout in seconds
}
}
}
3.Racher安装Redis
步骤1:填写workload信息
步骤2:在pods中测试redis正常启动 或 查看 redis启动log
查看 redis启动log
测试redis正常启动
步骤3:将django和redis连接
启用中间件
- settings\base.py
MIDDLEWARE = [
'interview.performance.performance_logger_middleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',#redis中间件
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',#redis中间件
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
建立CACHES
- settings\base.py
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://10.41.241.169:32621/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # r/w timeout in seconds
}
}
}
启动django可以看到有Expires: Thu, 18 Aug 2022 02:25:54 GMT
性能对比:
没有启动redis,要35ms。
启动redis,只要18ms。
4.Racher安装Redis和ingress,用域名访问
步骤1:填写workload信息
步骤2:在pods中测试redis正常启动 或 查看 redis启动log
设定账号和密码
步骤3: Service Discovery建立svc
步骤4: Load Balancing建立ingress
步骤5:将django和redis连接
启用中间件
- settings\base.py
"""
# 环境变量(含默认值)
REDIS_LOCATION = os.environ.get('REDIS_LOCATION',"redis://default:redis654321@redis3-ingress.k8sqas-wzs.k8s.wistron.com.cn:80")
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',### 多语言中间件
'django.middleware.cache.UpdateCacheMiddleware',#redis中间件
'django.middleware.common.CommonMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',#redis中间件
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
# K8S redis
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": REDIS_LOCATION,
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
"PASSWORD":"redis654321",
"SOCKET_CONNECT_TIMEOUT": 5, # in seconds
"SOCKET_TIMEOUT": 5, # r/w timeout in seconds
}
}
}
CELERY_BROKER_URL = REDIS_LOCATION
CELERY_RESULT_BACKEND = REDIS_LOCATION
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Shanghai'
CELERYD_MAX_TASKS_PER_CHILD = 10
CELERYD_LOG_FILE = os.path.join(BASE_DIR, "logs", "celery_work.log")
CELERYBEAT_LOG_FILE = os.path.join(BASE_DIR, "logs", "celery_beat.log")
# CELERY_BEAT忽略时区错误
DJANGO_CELERY_BEAT_TZ_AWARE = False
5.Racher环境变量来读取redis地址-20221016更新
步骤1:racher启动redis并设置密码
记得在Command里面加上redis-server --requirepass redis654321