云豹直播系统mysql的优化处理方案参考

发布来源:云豹科技
发布人:云豹科技
2020-11-19 14:13:38

本文将针对直播环境中数据库并发处理性能受限进而触发直播系统程序运行卡顿、延迟,从而导致用户体验效果极差,因此给出关于mysql的优化处理方案参考,本文共分为以下几方面:

一、承载直播系统源码的硬件优化

  • CPU—— 64 位、高主频、高缓存,高并行处理能力

  • 内存——大内存、主频高,尽量不要用 SWAP

  • 硬盘——15000转、RAID5、raid10 。 SSD

  • 网络——标配的千兆网卡,10G网卡,bond0,msyql服务器尽可能和使用它的web服务器在同一局域网内,尽量避免诸如防火墙策略等不必要的开销。

二、数据库的设计与规划(架构上的优化)

  1. 纵向拆解: 专机专用

例:现在公司一台服务器同时负责 web、ftp、数据库等多个角色。
纵向拆解后就是:数据库服务器专机专用,避免额外的服务可能导致的性能下降和不稳定性。

  1. 横向拆解

: 主从同步、负载均衡、高可用性集群,当单个 mysql 数据库无法满足日益增加的需求时,可以考虑在数据库这个逻辑层面增加多台服务器,以达到稳定、高效的效果。

三、磁盘 io 规划,io相关的技术

raid 技术:raid0或raid10
SSD
15000转、RAID5、raid10 。 SSD
swap 分区:最好使用 raid0 或 SSD
磁盘分区:将直播系统的数据库目录放到一个分区上或一个磁盘上的物理分区. 存储数据的硬盘或分区和系统所在的硬盘分开。

设置主从时,由于binlog日志频繁记录操作,开销非常大,需要把binlog日志放到其它硬盘分区上:

#vim /etc/my.cnf
[mysqld]
datadir=/data/ 放在独立的硬盘上SSD
socket=/var/lib/mysql/mysql.sock
user=mysql
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0 #在原配置文件中,添加以下内容:
log-bin=/data/mysqllog #启用二进制日志,默认存在/var/lib/mysql 下面
server-id=1 #本机数据库ID 标示。
binlog-do-db=db #可以被从服务器复制的库。二进制需要同步的数据库名


四、直播系统服务器操作系统的优化

网卡 bonding 技术
设置tcp 连接数量限制,优化系统打开文件的最大限制。
使用64位操作系统,64位系统可以分给单个进程更多的内存。 计算更快 。
禁用不必要启动的服务
文件系统调优,给数据仓库一个单独的文件系统,推荐使用XFS,一般效率更高、更可靠。
ext3 不错。 ext4 只是一个过渡的文件系统。
可以考虑在挂载分区时启用 noatime 选项。 #不记录访问时间
最小化原则:
1) 安装系统最小化
2) 开启程序服务最小化原则
3) 操作最小化原则
4) 登录最小化原则
5) 权限最小化

五、my.cnf内核优化

优化总原则:给 mysql 的资源太少,则 mysql 施展不开:给 mysql 的资源太多,可能会拖累整个 OS。
40%资源给OS, 60%-70% 给mysql (内存和CPU)

六、mysql 服务优化

保持每个表都不要太大,可以对大表做横切和纵切:比如说我要取得某 ID 的 lastlogin, 完全可以做一张只有“ID和 “lastlog”的小表,而非几十、几百列数据的并排大表。
另外对一个有 1000 万条记录的表做更新比对 10 个 100 万记录的表做更新一般来的要慢。

七、强制限制mysql 资源设置

您可以在mysqld中强制一些限制来确保系统负载不会导致资源耗尽的情况出现。

[root@xuegod63 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
query_cache_size = 32M
max_connections=500 上限是看硬件配置
wait_timeout=10
max_connect_errors = 100


参数:
第一行:最大连接数,在承载直播系统的服务器没有崩溃之前确保只建立服务允许数目的连接。
该参数设置过小的最明显特征是出现“Too many connections”错误;
第二行:mysqld将终止等待时间(空闲时间)超过10秒的连接。在LAMP应用程序中,连接数据库的时间通常就是Web 服务器处理请求所花费的时间。有时候如果负载过重,连接会挂起,并且会占用连接表空间。如果有多个交互用户使用了到数据库的持久连接,那么应该将这个值设低一点。
第三行:如果一个主机在连接到服务器时有问题,并重试很多次后放弃,那么这个主机就会被锁定,直到执行:

mysql> FLUSH HOSTS;
Query OK, 0 rows affected (0.00 sec)


之后才能运行。默认情况下,10 次失败就足以导致锁定了。将这个值修改为100 会给服务器足够的时间来从问题中恢复。如果重试100 次都无法建立连接,那么使用再高的值也不会有太多帮助,可能它根本就无法连接。

八、不进行域名反解析

关闭mysql 的dns 反查功能。这样速度就快了!但要注意由此带来的权限/授权问题
skip-name-resolve

该选项就能禁用DNS 解析,连接速度会快很多。不过,这样的话就不能在MySQL 的授权表中使用主机名了而只能用ip 格式。

九、总结:

1、看机器配置,指三大件:cpu、内存、硬盘
2、看mysql配置参数
3、查看mysql行状态
4、查看mysql的慢查询
依次解决了以上问题之后,再来查找直播系统程序方面的问题

声明:以上内容为云豹科技原创,未经公司同意,禁止转载,否则将追究相关法律责任 www.yunbaokj.com


声明:
以上内容为云豹科技作者本人原创,未经作者本人同意,禁止转载,否则将追究相关法律责任