celery的超时和kill引起的异常

1)终止进程引起的错误:
WorkerLostError:

.

2 超时引起的错误
SoftTimeLimitExceeded

celery的异常文件中 celery.exceptions有以上个异常的定义

celery的options中expires

CELERYBEAT_SCHEDULE: In each task, you can add an ‘options’ dictionary and set ‘expires’ to a number of seconds. If the task doesn’t run within that time, it’ll be discarded rather than run when it finally gets to a worker. This can help a lot with periodic tasks when workers or the queue gets hung up for a while and then unjammed – without this, the workers will have to work through a huge backlog of the same periodic tasks over and over, for no reason.

Example:

ceph支持zfs

ceph 支持zfs的操作
查看集群的状态:

查看osd tree

查看配置文件

查看zfs pool

ceph性能优化的操作笔记(2)

2、软件优化
1 调度:IO调度器主要用于具有有限队列的较慢存储设备(例如,单机械硬盘驱动器)I/O调度器的主要作用是重新排序I/O的请求,以获得更早服务,更重要的请求。对于具有非常大的内部队列和非常快的服务(如pcie ssd)设备,I/O调度器不会有什么好处。最好是立即提交所有的请求。

因为pcie的磁盘访问不同逻辑的扇区时间几乎一样,所以改为none。
none又称为noop。
几种调度算法的比较:
deadline (适合小文件读写,跳跃式读写,零散读写(数据库))
iosched 中若干参数说明: read_expire 默认500 此时间一到就写
write_expire 默认5000 此时间一到就读
在此时间内一定可以得到服务
front_merges 0
1(默认)
当新请求与当前请求读写位置相近则可合并优先处理

anticipatory (适合大文件读写,整块式,重复读写(web server))
iosched 中若干参数说明: antic_expire 当一个请求结束后等待此时间长度 看是否有新请求与此请求读写位置近
read_expire 124(默认)
write_expire 248(默认)

cfg (完全公平算法)
iosched 中若干参数说明:queued 请求个数长度
quantum 满多少个请求数写入一次磁盘

优先级 class1 (real-time)实时 值0~7
class2 (best-effort)轮询 值0~7
class3 (idle) 只有空闲时才处理
调整方法 ionice -p 1(进程号)-n7(优先级值)-c2(class级)
优先级值越低,优先级越高
noop(没有算法,适用于SAN架构,不在本地优化)

2 预读
read_ahead_kb, I/O 预先读请求的量(内核系统默认先响应读请求,所先响应的量可调):

3 内存
numa,swap 内存管理。普通模式下(非全闪存)性能足够了。
4 网络层面:
net.ipv4.tcp_low_latency: 0 建议改为1.
tcp_low_latency设为0时,以整个操作系统的效率优先,此时TCP会通过使用prequeue队列,使网络软中断的执行时间缩短,回ACK的时机延后,进程读取TCP套接字时略延后。
设为1时,以TCP读取消息时,使应用进程减少延迟为优先。二者相反,默认是不打开这个开关的。
TCP 协议处理网络流量时,需要占用大量的CPU和内存资源。为了节省服务器的资源消耗,众多厂商开始在网卡中内置协处理器,将任务移交给协处理器完成。即TCP卸载引擎TCP offload engine TOE.普通网卡每个数据包都要触发一次中断,TOE网卡则让每个应用程序完成一次完整的数据处理进程后才发出一次中断。即显著减轻服务对中断的影响负担。

net.ipv4.tcp_reordering: 3
根据交换机的报文乱序情况,如果报文出现乱序,需要调整

net.ipv4.tcp_mem:
net.ipv4.tcp_rmem:
net.ipv4.tcp_wmem:

该文件包含3个整数值,分别是:low,pressure,high
Low:当TCP使用了低于该值的内存页面数时,TCP不会考虑释放内存。
Pressure:当TCP使用了超过该值的内存页面数量时,TCP试图稳定其内存使用,进入pressure模式,当内存消耗低于low值时则退出pressure状态。
High:允许所有tcp sockets用于排队缓冲数据报的页面量。
一般情况下这些值是在系统启动时根据系统内存数量计算得到的。
针对osd的存储节点。在内存重组的情况下,分配内存的额定大小给tcp协议栈。建议为%10的内存总数

该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于接收缓冲的内存数量,即使在内存出现紧张情况下TCP socket都至少会有这么多数量的内存用于接收缓冲。
Default:为TCP socket预留用于接收缓冲的内存数量,默认情况下该值影响其它协议使用的net.core.wmem中default的 值。该值决定了在tcp_adv_win_scale、tcp_app_win和tcp_app_win的默认值情况下,TCP 窗口大小为65535。
Max:为TCP socket预留用于接收缓冲的内存最大值。该值不会影响 net.core.wmem中max的值,今天选择参数 SO_SNDBUF则不受该值影响。

针对ceph-osd的存储节点来说。osd的数目决定了buffer的大小。如果osd数目在1-3个左右,可以设置为8M。如果在10个左右建议改为1-2M。

该文件包含3个整数值,分别是:min,default,max
Min:为TCP socket预留用于发送缓冲的内存最小值。每个TCP socket都可以使用它。
Default:为TCP socket预留用于发送缓冲的内存数量,默认情况下该值会影响其它协议使用的net.core.wmem中default的 值,一般要低于net.core.wmem中default的值。
Max:为TCP socket预留用于发送缓冲的内存最大值。该值不会影响net.core.wmem_max,今天选择参数SO_SNDBUF则不受该值影响。默认值为128K。
针对ceph-osd的存储节点来说。osd的数目决定了buffer的大小。如果osd数目在1-3个左右,可以设置为8M。如果在10个左右建议改为1-2M。

Low Latency Performance

Tuned包是Red Hat Enterprise中提供的调整配置文件传递机制。可以使用yum 来安装。Red Hat Enterprise Linux 7中默认启用tuned,使用一个名为的配置文件吞吐量性能。

查看latency-performance的配置参数

上述的操作主要在减少电源的影响,增加cpu消耗时间的数量。减少数据迁移(切换),减少未完成的数量。脏页保存在内存里。swap设置为0.

ceph性能优化的操作笔记(1)

性能优化从硬件、软件层面进行分析。
硬件层面:
1、硬件规划
1)cpu:ceph-osd运行消耗cpu资源,将ceph-osd进程和cpu核进行绑定,可以提升一部分性能。Ecode模式下,需要更多的计算资源
ceph-msd也是消耗cpu资源的。
2)内存:ceph-mon/ceph-mds需要2G内存。每个osd仅此需要1G内测
3)网络规划:万兆网络,public和cluster的网络分离
2、SSD选择
STAT SSD和PCIe的SSD 可以作为ceph-osd的journal,存储日志。由于journal 在向数据盘写入数据时block后续请求,可以对layecny 有很大的改善。
3 BISO设置。关闭节能等