第三周作业

1、redis服务配置文件详解

bind 0.0.0.0 #监听地址,可以用空格隔开后多个监听IP

protected-mode yes #redis3.2之后加入的新特性,在没有设置bind IP和密码的时候,redis只允许访问127.0.0.1:6379,可以远程连接,但当访问将提示警告信息并拒绝远程访问

port 6379 #监听端口,默认6379/tcp

tcp-backlog 511 #三次握手的时候server端收到client ack确认号之后的队列值,即全连接队列长度

timeout 0 #客户端和Redis服务端的连接超时时间,默认是0,表示永不超时

tcp-keepalive 300 #tcp 会话保持时间300s

daemonize no #默认no,即直接运行redis-server程序时,不作为守护进程运行,而是以前台方式运行, 如果想在后台运行需改成yes,当redis作为守护进程运行的时候,它会写一个 pid 到

/var/run/redis.pid 文件

supervised no #和OS相关参数,可设置通过upstart和systemd管理Redis守护进程,centos7后都使用systemd

pidfile /var/run/redis_6379.pid #pid文件路径,可以修改为/apps/redis/run/redis_6379.pid

loglevel notice #日志级别

logfile "/path/redis.log" #日志路径,示例:logfile "/apps/redis/log/redis_6379.log"

rdbcompression yes #持久化到RDB文件时,是否压缩,"yes"为压缩,"no"则反之

rdbchecksum yes #是否对备份文件开启RC64校验,默认是开启

dbfilename dump.rdb #快照文件名

dir ./ #快照文件保存路径,示例:dir "/apps/redis/data"

主从复制相关

replicaof <masterip> <masterport> #指定复制的master主机地址和端口,5.0版之前的指令为slaveof

# masterauth <master-password> #指定复制的master主机的密码

replica-serve-stale-data yes #当从库同主库失去连接或者复制正在进行,从机库有两种运行方式: 1、设置为yes(默认设置),从库会继续响应客户端的读请求,此为建议值

2、设置为no,除去特定命令外的任何请求都会返回一个错误"SYNC with master in progress"。

replica-read-only yes #是否设置从库只读,建议值为yes,否则主库同步从库时可能会覆盖数据,造成数据丢失

repl-diskless-sync no #是否使用socket方式复制数据(无盘同步),新slave第一次连接master时需要做数据的全量同步,redis server就要从内存dump出新的RDB文件,然后从master传到slave,有两种方式把RDB文件传输给客户端:

1、基于硬盘(disk-backed):为no时,master创建一个新进程dump生成RDB磁盘文件,RDB完成之后由 父进程(即主进程)将RDB文件发送给slaves,此为默认值

2、基于socket(diskless):master创建一个新进程直接dump RDB至slave的网络socket,不经过主进程和硬盘

#推荐使用基于硬盘(为no),是因为RDB文件创建后,可以同时传输给更多的slave,但是基于socket(为yes), 新slave连接到master之后得逐个同步数据。只有当磁盘I/O较慢且网络较快时,可用diskless(yes),否则一般建议使用磁盘(no)

repl-diskless-sync-delay 5 #diskless时复制的服务器等待的延迟时间,设置0为关闭,在延迟时间内到达的客户端,会一起通过diskless方式同步数据,但是一旦复制开始,master节点不会再接收新slave 的复制请求,直到下一次同步开始才再接收新请求。即无法为延迟时间后到达的新副本提供服务,新副本将排 队等待下一次RDB传输,因此服务器会等待一段时间才能让更多副本到达。推荐值:30-60

repl-ping-replica-period 10 #slave根据master指定的时间进行周期性的PING master,用于监测master状态,默认10s

repl-timeout 60 #复制连接的超时时间,需要大于repl-ping-slave-period,否则会经常报超时repl-disable-tcp-nodelay no #是否在slave套接字发送SYNC之后禁用 TCP_NODELAY,如果选

择"yes",Redis将合并多个报文为一个大的报文,从而使用更少数量的包向slaves发送数据,但是将使数 据传输到slave上有延迟,Linux内核的默认配置会达到40毫秒,如果 "no" ,数据传输到slave的延迟将会减少,但要使用更多的带宽

repl-backlog-size 512mb #复制缓冲区内存大小,当slave断开连接一段时间后,该缓冲区会累积复制副本数据,因此当slave 重新连接时,通常不需要完全重新同步,只需传递在副本中的断开连接后没有同步的部分数据即可。只有在至少有一个slave连接之后才分配此内存空间,建议建立主从时此值要调大一些或在 低峰期配置,否则会导致同步到slave失败

repl-backlog-ttl 3600 #多长时间内master没有slave连接,就清空backlog缓冲区

replica-priority 100 #当master不可用,哨兵Sentinel会根据slave的优先级选举一个master,此值最低的slave会优先当选master,而配置成0,永远不会被选举,一般多个slave都设为一样的值,让其自 动选择

min-replicas-to-write 3 #至少有3个可连接的slave,mater才接受写操作

#min-replicas-max-lag 10 #和上面至少3个slave的ping延迟不能超过10秒,否则master也将停止写操作

requirepass foobared #设置redis连接密码,之后需要AUTH pass,如果有特殊符号,用" "引起来。

2、RDB、AOF详解及优缺点总结

RDB的优缺点:

优点:

RDB快照保存了某个时间点的数据,可以通过脚本执行redis指令bgsave(非阻塞,后台执行)或者

save(会阻塞写操作,不推荐)命令自定义时间点备份,可以保留多个备份,当出现问题可以恢复到不 同时间点的版本,很适合备份,并且此文件格式也支持有不少第三方工具可以进行后续的数据分析

比如: 可以在最近的24小时内,每小时备份一次RDB文件,并且在每个月的每一天,也备份一个

ROB文件。这样的话,即使遇上问题,也可以随时将数据集还原到不同的版本。

RDB可以最大化Redis的性能,父进程在保存 RDB文件时唯一要做的就是fork出一个子进程,然后这个子进程就会处理接下来的所有保存工作,父进程无须执行任何磁盘工/0操作。

RDB在大量数据,比如几个G的数据,恢复的速度比AOF的快

缺点:

不能实时保存数据,可能会丢失自上一次执行RDB备份到当前的内存数据

如果你需要尽量避免在服务器故障时丢失数据,那么RDB不适合你。虽然Redis允许你设置不同的 保存点(save point)来控制保存RDB文件的频率,但是,因为ROB文件需要保存整个数据集的状态,所以它并不是一个轻松的操作。因此你可能会至少5分钟才保存一次RDB文件。在这种情况下,一旦发生故障停机,你就可能会丢失好几分钟的数据。

当数据量非常大的时候,从父进程fork子进程进行保存至RDB文件时需要一点时间,可能是毫秒或 者秒,取决于磁盘IO性能

在数据集比较庞大时,fork()可能会非常耗时,造成服务器在一定时间内停止处理客户端﹔如果数 据集非常巨大,并且CPU时间非常紧张的话,那么这种停止时间甚至可能会长达整整一秒或更久。 虽然 AOF重写也需要进行fork(),但无论AOF重写的执行间隔有多长,数据的持久性都不会有任何损失。

AOF的优缺点

AOF的优点:
1,数据安全性相对较高,根据所使用的fsync策略(fsync是同步内存中redis所有已经修改的文件到存 储设备),默认是appendfsync everysec,即每秒执行一次 fsync,在这种配置下,Redis 仍然可以保持良好的性能,并且就算发生故障停机,也最多只会丢失一秒钟的数据( fsync会在后台线程执行,所以主线程可以继续努力地处理命令请求)
由于该机制对日志文件的写入操作采用的是append模式,因此在写入过程中不需要seek, 即使出现宕机现象,也不会破坏日志文件中已经存在的内容。然而如果本次操作只是写入了一半数据就出 现了系统崩溃问题,不用担心,在Redis下一次启动之前,可以通过 redis-check-aof 工具来解决数据一致性的问题
2,Redis可以在 AOF文件体积变得过大时,自动地在后台对AOF进行重写,重写后的新AOF文件包含了恢复当前数据集所需的最小命令集合。整个重写操作是绝对安全的,因为Redis在创建新 AOF文件的过程中,append模式不断的将修改数据追加到现有的 AOF文件里面,即使重写过程中发生停机,现有的 AOF文件也不会丢失。而一旦新AOF文件创建完毕,Redis就会从旧AOF文件切换到新AOF文件,并开始对新AOF文件进行追加操作。
3,AOF包含一个格式清晰、易于理解的日志文件用于记录所有的修改操作。事实上,也可以通过该文 件完成数据的重建AOF文件有序地保存了对数据库执行的所有写入操作,这些写入操作以Redis协议的格式保存,因 此 AOF文件的内容非常容易被人读懂,对文件进行分析(parse)也很轻松。导出(export)AOF文件也非常简单:举个例子,如果你不小心执行了FLUSHALL.命令,但只要AOF文件未被重写,那么只 要停止服务器,移除 AOF文件末尾的FLUSHAL命令,并重启Redis ,就可以将数据集恢复到FLUSHALL执行之前的状态。
AOF的缺点:
缺点:

即使有些操作是重复的也会全部记录,AOF 的文件大小要大于 RDB 格式的文件

AOF 在恢复大数据集时的速度比 RDB 的恢复速度要慢

根据fsync策略不同,AOF速度可能会慢于RDB

bug 出现的可能性更多

3,Redis Cluster扩、缩容

动态扩容:

扩容一定要先做数据备份 做这个有很大的风险数据丢失

redis 集群运行之后,难免由于硬件故障、网络规划、业务增长等原因对已有集群进行相应的调整, 比如: 增加Redis node节点、减少节点、节点迁移、更换服务器等。增加节点和删除节点会涉及到已有的槽位重新分配及数据迁移。

注意: 生产环境一般建议master节点为奇数个,比如:3,5,7,以防止脑裂现象

增加Redis node节点,需要与之前的Redis node版本相同、配置一致,然后分别再启动两台Redis node,应为一主一从

Redis 5 添加方式

redis-cli -a 123456 --cluster add-node 10.0.0.68:6379 <当前任意集群节点>:6379

redis-cli -a 123 --cluster add-node 10.0.0.27:6379 10.0.0.22:6379

命令用法是前一个是新家的节点的ip 后面要跟上在集群中的任何一个ip都可以。

加了之后默认的是主节点 ,并且没有槽位

意思就是要从每个槽位点在取一部分分给新家的主节点

16384/4 =4096 5461-4096=1365 要从每个节点中取1365节点分给新家的主节点。

添加槽位的命令:

redis-trib.rb check 10.0.0.67:6379 #当前状态

redis-trib.rb reshard <任意节点>:6379 #重新分片 --老版本

redis-trib.rb fix 10.0.0.67:6379 #如果迁移失败使用此命令修复集群

redis-cli -a 123456 --cluster reshard <当前任意集群节点>:6379 ---redis5使用这个命令


image.png

image.png

这里要写要分配的全部槽位 ,然后可以设置 all系统自动从每个节点拿

也可以写一个节点就从一个节点拿 但是要写节点的id 就是nodes那个号

image.png

扩容一定要先做数据备份 做这个有很大的风险数据丢失

检查:

redis-cli -a 123456 --cluster check 10.0.0.8:6379

然后添加新的主节点的从节点:

为新的master添加新的slave节点

需要再向当前的Redis集群中添加一个Redis单机服务器10.0.0.78,用于解决当前10.0.0.68单机的潜在 宕机问题,即实现响应的高可用功能,有两种方式:

redis-cli -a 123456 --cluster add-node 10.0.0.78:6379 <任意集群节点>:6379 -- cluster-slave --cluster-master-id d6e2eca6b338b717923f64866bd31d42e52edc98

举例:

redis-cli -a 123456 --cluster check 10.0.0.22:6379

image.png

redis-cli -a 123 --cluster add-node 10.0.0.29:6379 10.0.0.22:6379 --cluster-slave --cluster-master-id d6e2eca6b338b717923f64866bd31d42e52edc98

就是在要加进来的id后面加上一个 任意集群内的ip和端口号 再跟上 这个从节点的主ID号

或者分两步做:先加进来在设置成从节点

redis-cli -a 123 --cluster add-node 10.0.0.29:6379 10.0.0.22:6379

然后进入新加入的redis:

redis-cli -h 10.0.0.29 -p 6379 -a 123

CLUSTER NODES #查看当前集群节点,找到目标master 的ID

CLUSTER REPLICATE 886338acd50c3015be68a760502b239f4509881c #将其

设置slave,命令格式为cluster replicate MASTERID

就成功了,在讲将数据导进去

动态缩容

电商因为临时要求增加服务器,如果大的并发一斤过去 可以缩减配置

添加节点的时候是先添加node节点到集群,然后分配槽位,删除节点的操作与添加节点的操作正好相 反,是先将被删除的Redis node上的槽位迁移到集群中的其他Redis node节点上,然后再将其删除, 如果一个Redis node节点上的槽位没有被完全迁移,删除该node的时候会提示有数据且无法删除。

先删除槽位:

查看状态:

redis-cli -a 123 --cluster check 10.0.0.22:6379 ---任意一个集群内的ip都行

redis-cli -a 123 --cluster reshard 10.0.0.22:6379 ---重新分配槽位--任意节点


image.png

要拿多少:3000


image.png

谁来接收

从哪拿


image.png

挪完可以删除了

确认10.0.0.24的所有slot都移走了,上面的slave也自动删除,成为其它master的slave

删除命令:

redis-cli -a 123 --cluster del-node 10.0.0.24:6379 869392a4ce0e4461fcd0db0f0f6a65d4264a458b

然后需要删除conf配置文件 要不启动又成了集群

删除从节点:25

redis-cli -a 123 --cluster del-node 10.0.0.25:6379 c771afac48f1c115a00adca92f294fe41e445b78

4,LVS调试算法总结

VS:
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置 复杂,对网络依赖比较大,稳定性很高。
DR 模型的缺陷是不能更改端口 全部走的是4层 然后将这两个编程安全模式的方式是 将lvs的arp设置改成 不响应arp包

将两个真实的server的arp变成不发布。
lvs tun 模式:远程调度模式 适合大公司的远程调用 也有dr模式的不经过lvs返回的功能 给报文添加了一层头部 有一个tip 这个要给lvs的服务器上单独设置。
sh:对源ip进行hash算法 生成一个hash值 128位的二进制数字 而lvs会对这个hash值进行验证 同一个cip的hash值都会发往同一个rs,实现会话绑定。
dh:对目标的地址进行hash 首先 cip会对目的网站进行hash 然后相同的网站的缓存会在proxy上有一个存储区 这里会有很多网站的缓存 这里就能非常快速的访问 一个网站了 如果想要更快速的访问 可以在proxy中间和rs中间搭建很多的缓存服务器 这样即使在proxy中没有一个网站的信息 proxy也可以去后端的缓存服务器中查找 。因为目的网站的hash的值是唯一的 所以信息也是唯一的 可以设置缓存服务器的过期时间 。
动态有6种算法 :
lc:是最小连接 算法 ,到哪个服务器的距离最短选哪个 overhead=活动链接*256+已经激活的连接 :算法

wlc:加权重的lc算法 算出哪个值小 就选哪个 根据这个算法100*256/2是最小的 就选2 wight这个 。

这个算法的bug是在第一次连接的时候 2权重的会被选 这里的权重就没有意义了

SED:初始最短权重高的被选为初始 所以这个就是wlc的优化算法。bug是会导致权重高的 全部接受请求

NQ:第一次按照 rr算法来实现 第二次 按照SED来算

LBLC:正向的DH(静态算法) 会根据后端的缓存服务器的负载情况来 调度到其他服务器上

LBLCR:根据请求的类型来调度 会话 将一些需要大缓存和带宽的服务调度到负载轻的一些服务器上去

lblcr+lblc +dh+sh=一般运营商会用。

LVS的NAT、DR模型实现

DR模式;
在Real Server1 和Real Server2上做以下配置,

echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
以上命令需填加到/etc/rc.local文件中让其开机自动生效
vim /etc/sysconfig/network-scripts/ifcfg-lo:0 内容如下
DEVICE=lo:0
IPADDR=10.0.0.1
NETMASK=255.255.255.255
BROADCAST=10.0.0.1
ONBOOT=yes
NAME=loopback

ifdown lo:0
ifup lo:0
route add -host 10.0.0.1 dev lo:0
echo "route add -host 10.0.0.1 dev lo:0" >> /etc/rc.local
2,在Director Server上做以下配置

vim /etc/sysconfig/network-scripts/ifcfg-eth0:0 内容如下
DEVICE=eth0:0
IPADDR=10.0.0.1
NETMASK=255.255.255.255
BROADCAST=10.0.0.1
ONBOOT=yes
ifdown eth0:0
ifup eth0:0
route add -host 10.0.0.1 dev eth0:0
echo "route add -host 10.0.0.1 dev eth0:0" >> /etc/rc/local
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "echo "1" > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
ipvsadm -A -t 10.0.0.1:80 -s rr
ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.2 -g
ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.3 -g
NAT模型实现:
yum install -y httpd
Director 上安装 ipvsadm
yum install -y ipvsadm
echo 1 > /proc/sys/net/ipv4/ip_forward:打开核心转发
ipvsadm -A -t 192.168.1.29:80 -s wrr
ipvsadm -a -t 192.168.1.29:80 -r 192.168.100.2:80 -m

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容