Skip to main content

moregeek program

redis 部署文档_赵承胜博客的博客-多极客编程

redis 部署文档

集群规划

主节点

从节点

端口

192.168.40.181/24

192.168.40.180/24

7000

添加用户

groupadd -g 11111 redis;useradd -d /home/redis -g 11111 -u 11111 -m redis;echo 'redis:Zj!@#1022' | chpasswd;chage -M 99999 redis;usermod -G wheel redis 

mkdir /app/redis -p && chown redis.redis /app/redis/

基础环境准备

yum install lrzsz.x86_64 gcc gcc-c++ -y

systemctl stop firewalld && setenforce 0 && systemctl disable firewalld

echo never > /sys/kernel/mm/transparent_hugepage/enabled

安装

切换至redis 用户

上传程序包redis-5.0.9.tar.gz至其中一个节点的/app/redis/目录并解压

tar zxvf redis-5.0.9.tar.gz 
mv redis-5.0.9 redis
/app/redis/redis
make -j 4
make PREFIX=/app/redis/ install

如下所示,编译安装后,你可以看到下面目录和文件

创建下面目录,用来存放日志文件、配置文件(redis.conf)、pidfile文件,数据库dump.rdb文件

mkdir -p /app/redis/data
mkdir -p /app/redis/log
mkdir -p /app/redis/run
mkdir -p /app/redis/conf
cp /app/redis/redis/redis.conf /app/redis/conf

修改部分参数,根据实际情况修改。大部分参数选择默认参数即可。

grep '^[a-Z]' redis.conf | grep -E  "bind|daemonize|prot|logfile|dir|pidfile|protected-mode|requirepass" 
bind 192.168.40.181 127.0.0.1
protected-mode no
daemonize yes
pidfile /app/redis.777.pid
logfile "/app/redis/log/redis.log"
dir /app/redis/data
requirepass 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28

查看redis.conf的配置参数

[redis@localhost conf]$ grep '^[a-Z]' redis.conf 
protected-mode no
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
loglevel notice
databases 16
always-show-logo yes
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
replica-serve-stale-data yes
replica-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
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 no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
aof-load-truncated yes
aof-use-rdb-preamble yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
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
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
dynamic-hz yes
aof-rewrite-incremental-fsync yes
rdb-save-incremental-fsync yes
# 开启AOF
appendonly yes

# AOF文件名
appendfilename "appendonly.aof"

# 文件刷盘方式
appendfsync everysec
# AOF文件距离上次文件增长超过多少百分比则触发重写
auto-aof-rewrite-percentage 100
# AOF文件体积最小多大以上才触发重写
auto-aof-rewrite-min-size 64mb
maxmemory 2gb
maxmemory-policy allkeys-lru
bind 192.168.40.181 127.0.0.1
port 7000
requirepass 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28
masterauth 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28
pidfile /app/redis.7000.pid
logfile "/app/redis/log/redis.log"
dir /app/redis/data
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec

定时生成RDB

Redis也提供了定时触发生成RDB文件的配置项

# 最近15分钟内 至少产生1次写入
save 900 1
# 最近5分钟内 至少产生10次写入
save 300 10
# 最近1分钟内 至少产生10000次写入
save 60 10000

刷盘方式

开启AOF后,Redis会把每个写操作的命令记录到文件并持久化到磁盘中,为了保证数据文件的安全性,Redis还提供了文件刷盘的时机:

  • appendfsync always:每次写入都刷盘,对性能影响最大,占用磁盘IO比较高,数据安全性最高
  • appendfsync everysec:1秒刷一次盘,对性能影响相对较小,节点宕机时最多丢失1秒的数据
  • appendfsync no:按照操作系统的机制刷盘,对性能影响最小,数据安全性低,节点宕机丢失数据取决于操作系统刷盘机制

以上可以看出AOF相对于RDB的优点是,AOF数据文件更新比较及时,比RDB保存更完整的数据,这样在数据恢复时能够恢复尽量完整的数据,降低丢失数据的风险。

如果同时存在RDB文件和AOF文件,Redis会优先使用AOF文件进行数据恢复。

但它的缺点也很易见:

  • 随着时间增长,AOF文件会越来越大
  • AOF文件刷盘会增加磁盘IO的负担,影响Redis的性能(开启每秒刷盘时)

AOF重写

针对第一种情况,Redis提供了AOF瘦身的功能,可以设置在AOF文件很大时,自动触发AOF重写,Redis会扫描整个实例的数据,重新生成一个AOF文件达成瘦身的效果。但这个重写过程也需要消耗大量的CPU资源

# AOF文件距离上次文件增长超过多少百分比则触发重写

auto-aof-rewrite-percentage 100

# AOF文件体积最小多大以上才触发重写

auto-aof-rewrite-min-size 64mb

由于AOF可以最大可能降低丢失数据的风险,所以它一般适用于对丢失数据很敏感的业务场景,例如涉及金钱交易的业务。

性能影响

如果AOF的刷盘时机设置为每次写入都刷盘,那么会大大降低Redis的写入性能,因为每次写命令都需要写入文件并刷到磁盘中才会返回,当写入量很大时,会增加磁盘IO的负担。

性能与数据安全不能兼得,虽然Redis提供了实时刷盘的机制,但是在真正场景中使用的不多。

通常我们会选择每秒刷盘这种方式,既能保证良好的写入性能,在实例宕机时最多丢失1秒的数据,做到性能和安全的平衡。

总结

我们对RDB和AOF的总结如下表。

redis 部署文档_Redis

启动
/app/redis/bin/redis-server /app/redis/conf/redis.conf

Redis**主从的配置**

关于Redis的主服务器的配置如上所示,而Redis的从服务器配置也差不多,可以将/app/redis/目录拷贝到从服务器去,也可以直接在从服务器按照上面步骤安装即可,当然也要创建redis用户、修改目录的owner、限制redis文件夹权限等等。

Redis从服务器的redis.conf还需要额外增加两个参数,如下所示,如果Redis主服务器没有配置requirepass,那么从服务器无需配置masterauth参数

[redis@localhost app]$ scp -r redis/ redis@192.168.40.180:/app/

修改 绑定地址 添加以下参数


slaveof 192.168.40.181 7000
masterauth 75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28
replicaof 192.168.40.181 7000

Redis的主从同步很简单,只需要启动Slave实例,会自动将主节点已有的数据同步到从节点。另外,在主节点写入数据也会自动同步到从节点,因此从节点不需要做数据还原的步骤。另外,slave是不允许写入的,在加入了slaveof 之后,实例就成为了只读的。

启动Redis的主节点

sudo -u redis /app/redis/bin/redis-server /app/redis/conf/redis.conf

启动Redis的从节点

sudo -u redis /app/redis/bin/redis-server /app/redis/conf/redis.conf

Redis主从测试同步

主节点验证

[redis@localhost root]$ /app/redis/bin/redis-cli -h 127.0.0.1 -p 7000 -a "75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28" info  | grep slave
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
mem_clients_slaves:16922
slave_expires_tracked_keys:0
connected_slaves:1
slave0:ip=192.168.40.180,port=7000,state=online,offset=112,lag=1
[redis@localhost root]$

从节点验证

[root@localhost log]# /app/redis/bin/redis-cli -h 127.0.0.1 -p 7000 -a "75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28" info  | grep master
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
master_host:192.168.40.181
master_port:7000
master_link_status:up
master_last_io_seconds_ago:8
master_sync_in_progress:0
master_replid:7defe97445e30b433b13466bcbe11ea36b705960
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:224

配置哨兵

cp /app/redis/redis/sentinel.conf  /app/redis/

###普通配置

port 26379
# 保护模式关闭,这样其他服务起就可以访问此台redis
protected-mode no
# 哨兵模式是否后台启动,默认no,改为yes
daemonize yes
pidfile /var/run/redis-sentinel.pid
# log日志保存位置
logfile /usr/local/redis/sentinel/redis-sentinel.log
# 工作目录
dir /usr/local/redis/sentinel

###核心配置
# 核心配置。
# 第三个参数:哨兵名字,可自行修改。(若修改了,那后面涉及到的都得同步)
# 第四个参数:master主机ip地址
# 第五个参数:redis端口号
# 第六个参数:哨兵的数量。比如2表示,当至少有2个哨兵发现master的redis挂了,
# 那么就将此master标记为宕机节点。
# 这个时候就会进行故障的转移,将其中的一个从节点变为master
sentinel monitor mymaster 192.168.40.180 7000 2
# master中redis的密码
sentinel auth-pass mymaster 123456
# 哨兵从master节点宕机后,等待多少时间(毫秒),认定master不可用。
# 默认30s,这里为了测试,改成10s
sentinel down-after-milliseconds mymaster 10000
# 当替换主节点后,剩余从节点重新和新master做同步的并行数量,默认为 1
sentinel parallel-syncs mymaster 1
# 主备切换的时间,若在3分钟内没有切换成功,换另一个从节点切换
sentinel failover-timeout mymaster 180000

将上述修改好的配置文件,

从机中。我这里直接使用scp命名复制

主从启动服务

redis-sentinel sentinel.conf

观察日志

=====================

模式数据写入

cat redis.txzcst  | /app/redis/bin/redis-cli -h 192.168.40.181 -p 7000 -a "75612a867ceeb452924c98778caa959c37120bfff6582aaad48298acbf320b28" -n 1


©著作权归作者所有:来自51CTO博客作者赵承胜博客的原创作品,请联系作者获取转载授权,否则将追究法律责任

k8s 调度不合理解决方案如下-临时方案_赵承胜博客的博客-多极客编程

K8s问题一 ​服务获取pod ip (个人认为) 不合理,集群内部推荐使用cluster ip ​集群外部使用​问题二​K8s 调度不合理问题排查​方案一​修改matser ,node节点 最大pod 数量 (需要评估总共pod 数量,以及各节点需要分配的pod 数量)以达到 均衡的目的​以下为本地实验案例没问题可以先上测试​修改master 节点数 数(多master 都需要修改)​1、sys

kubernetes通过hostaliases自定义hosts_对你无可奈何的博客-多极客编程

背景: 今天突然就有了那么一个需求,记录一下:腾讯云的redis内网地址都是IP的方式。我们的服务注册在了nacos中。小伙伴本地测试链接上nacos(nacos开通了外网访问),获取redis中redis配置都是内网的redis IP故无法加入注册到集群。同事问我能不能将Redis ip设置成域名的方式,那样他本地好歹能做个假的解析做一个欺骗把服务启动起来?(懒得改代码毕竟) 正好就搜到了这两篇

容器指南之第一个容器_虚拟的现实的博客-多极客编程

1.安装1.1.Linux 上安装操作系统的配置安装可以参考 Linux 系统生产环境配置指南 ​​https://blog.51cto.com/waringid/5782872​​内核要求3.10或以上版本系统架构要求64位(x86_64)a、安装curl https://get.docker.com > /tmp/install_docker.shcat /tmp/install_doc

容器指南之容器架构及常用指令_虚拟的现实的博客-多极客编程

1.Docker 系统架构Docker daemon:守护进程。通过 docker daemon 命令启动,它负责容器的创建、运行和监控,还负责镜像的构建和储存。Clinet:客户端。通过 HTTP 和 Docker 守护进程通信。Registry:寄存服务。负责存储和发布镜像。 1.1.底层技术cgroups,负责管理容器使用的资源(例如 CPU 和内存的使用)。namespace,负责容器之间

hummerrisk 入门3:开发手册_mb62f1cd5a97d30的博客-多极客编程

本文是 HummerRisk 的开发手册,介绍项目的结构及如何配置 HummerRisk 的开发环境和开发中的注意事项,快速参与到 HummerRisk 项目的开发中来。一、项目结构二、配置开发环境1、环境准备后端HummerRisk 后端使用了 Java 语言的 Spring Boot 框架,并使用 Maven 作为项目管理工具。开发者需要先在开发环境中安装 JDK 11 及 Maven。前端H

容器指南之日常运维_虚拟的现实的博客-多极客编程

1.故障定位1.1.查看容器内部 https 请求响应时间docker exec -t $(docker ps -f name=blog_web -q) curl -H 'X-Forwarded-Proto:https' \-w %{time_total} -o /dev/null -s localhost1.2.查看容器日志docker logs --tail 50 --follow --tim

自建云服务计费系统_赵大奇的博客-多极客编程

自从Laxcus分布式操作系统正式开源两个月以来,可能是它一站式云计算平台属性和超大规模计算能力,给用户带来极大的便利,下载量一直持续增加,最近网站后台总是有用户在问,在Laxcus分布式操作系统的社区版本基础上,编写一个计费系统,应该如何实现,分哪些步骤之类的问题。下面简单说一下这个问题,先说下计费编程的大概情况,下一篇咱们再详细说如何编写Laxcus云计费系统。​标准的云服务计费系统,目前是属

分布式存储之 etcd 的集群管理_mb60939e30d6d2e的博客-多极客编程

在分布式文件存储中,我们通常会面临集群选主,配置共享和节点状态监控的问题。通过 etcd(基于 Raft 协议))可以实现超大规模集群的管理,以及多节点的服务可靠性。今天,我们就聊聊 etcd 在分布式存储中的具体应用。什么是 etcd ?etcd 是由 CoreOS 公司开发的一个开源的分布式 KV 存储,主要用于服务发现、共享配置以及一致性保障。etcd 的灵感来自于 ZooKeeper 和

uos本地源配置_影玺阁的博客-多极客编程

创建iso挂载点:root@Ispsrv:~# mkdir /mnt/uos配置永久挂载:root@Ispsrv:~# vi /etc/fstab #添加内容/dev/cdrom /mnt/uos iso9660 defaults 0 0挂载全部:root@Ispsrv:~# mount -amount: /mnt/uos: WARNING: device write-protected, mou

aws 强制 开启 mfa_秋枫鹤泣的博客-多极客编程

创建一个策略{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowViewAccountInfo", "Effect": "Allow", "Action": [ "iam:GetAccountPasswordPoli

kafka 分区迁移统计时间脚本-多极客编程

#!/bin/bsahstarttime=`date +'%Y-%m-%d %H:%M:%S'`;echo "Start: $starttime";/app/ctgkafka/ctg_kafka_instance/13/icc-5gcmp-kafka-yl5/1/bin/kafka-reassign-partitions.sh --zookeeper 172.25.1.136:2181,172.2

ansible自动化部署k8s集群-多极客编程

一、Ansible自动化部署K8S集群1.1 Ansible介绍Ansible 是一种IT自动化工具。它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新。Ansible 适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境。Ansible 也是一种简单的自动化语言,可以完美地描述IT应用程序基础结构。具备以下三个特点:简单:减少学习成本 强大:协调应用