SVN集群建设与调优
单机转为集群
svn服务器单节点在业务代码更新的时候经常因为CPU跑满而导致代码更新速度较慢,随着服务器越来越多,单SVN服务器将会成为代码发布的过程的瓶颈,
因此为了提效,急需对SVN服务器进行改造,使其成为SVN集群,具备水平扩容的能力
架构图与实施步骤
实施步骤
- 购买NAS,确认磁盘IO能够满足需求。
- 购买2台4C8G 服务器,部署SVN服务。
- 在老SVN服务器上挂载NAS盘,然后停止SVN服务器,防止复制数据时有新数据写入,全量复制SVN数据到nas上。
- 在2台新机器上挂载NAS,同时修改SVN配置文件并启动SVN,读取NAS盘数据对外提供服务。
- 在SLB上把svn老节点权重调整为0,同时加入2台新的SVN节点并调整权重为100。
回滚方案
- SLB 把新SVN服务器权重调整为0
- 数据由于已写入NAS,所以需要先停SVN服务,从NAS拷贝数据到老SVN服务器的数据磁盘
- SLB 把老SVN服务器权重调整为100。
SVN配置调优背景
-
研发反馈 commit 变慢,通过排查发现 是 NAS 小文件串行写入性能较差。SVN单机改成集群模式后,我们SVN数据存储模式发生改变,原来是本地SSD磁盘保存的数据,由于要做集群共享数据,所以采用了网络文件系统进行存储数据,网络文件存储系统对于小文件串行写入很慢,恰好SVN服务是单进程写入文件(串行写入)的模式,因此在提交代码时以小文件为主的时候就会慢很多。
因此采用NAS作为存储的SVN集群,适用于水平扩容,提高NAS 小文件的并发写入量,从而提高速度。 -
涉及到svn调优、系统调优,nas挂载调优
svn配置调优
查阅SVN官网后,找到以下5个参数进行调整,ECS配置为4C8G,
启动参数添加三个:
- --memory-cache-size 70 内存缓存大小,单位MB ,指定缓存 的大小,每个客户端进来后都会分配70M内存,因此需要合理调整,否则单机承载不了几个链接就会OOM
- --cache-txdeltas yes 需要缓存文件内容的 差异文本
- --cache-fulltexts yes 需要缓存文件内容的 全文本
只有使用了 FSFS 作为后端存储的仓库才能利用本节提到的缓存功能,使用缓存功能就可以把文件内容放在内存,不用从磁盘读取文件了,加快处理速度。
配置文件添加2个:
svn配置文件可以追加这几行配置
[storage]
db-lock-cache-size = 2000 磁盘缓存的项数量
db-cache-size = 2048000000 磁盘缓存大小,单位字节
NAS挂载参数调整
nconnect提高的是单个ECS访问NAS的吞吐能力,默认是1,并不会提高NAS文件系统自身的吞吐阈值,
nconnect=2 调高连接NFS的连接数,或者根据自身情况调整
调整系统内核参数
NFS客户端对同时发起的NFS请求数量进行了控制,默认编译的内核中此参数值为2,严重影响性能。
- SVN小文件过多,需要更低延迟,所以设置为16
- 如果是大文件为主,那么可以设置为128。
- echo "options sunrpc tcp_slot_table_entries=16" >> /etc/modprobe.d/sunrpc.conf
- echo "options sunrpc tcp_max_slot_table_entries=16" >> /etc/modprobe.d/sunrpc.conf
- sysctl -w sunrpc.tcp_slot_table_entries=16
垂直+水平扩容
- 从2C4G扩展到4C8G
- 从2台扩容到6台
NAS 升级到极速版本
NAS 升级到极速版本。相对于最普通的nas来说,提升了小文件读写效率, 单次 commit 时长可以缩短60%左右