MySQL 上线检查单
一、检查部署架构图
说明:检查高可用方案, 灾备方案;并询问服务器架构,如果是虚拟机,需询问虚机的备份计划
|
二、确定部署信息
说明:ip/port/... 元信息
IP地址 |
截图 |
|
|
三、检查服务器初始化环境
3.1 检查服务器操作系统
# 操作系统
shell> cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core)
# 提前修改主机名
shell> hostname test
# 配置主机名和ip的文件
shell> vi /etc/hosts 127.0.0.1
localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6localhost6.localdomain6
~
IP地址 |
截图 |
|
|
3.2 配置swap
数据库服务器必须降低 swap 的使用权重 ,Linux内核3.5-rc1及更高版本建议swappiness设置为1;Linux内核低于3.5-rc1版本建议swappiness设置为0
#检查服务器内核版本
shell> uname -r
#内核版本为3.5-rc1或更高版本
shell> vim /etc/sysctl.conf
vm.swappiness = 1
#内核版本低于3.5-rc1版本
shell> vim /etc/sysctl.conf
vm.swappiness = 0
# 保存后使其生效
shell> sysctl -p
IP地址 |
截图 |
|
|
3.3 MySQL运行用户的 ulimit 设置
数据库使用的系统资源会很多,默认 1024 的最大文件句柄数、线程数不足以支持数据库的运行,需要设置(公司DMP及BALM产品自动进行ulimit配置;非公司产品,根据实际MySQL运行用户进行调整)
shell> vim /etc/security/limits.d/mysql.conf
mysql soft nofile 65535
mysql hard nofile 65535
mysql soft nproc 65535
mysql hard nproc 65535
IP地址 |
截图 |
|
|
3.4 文件系统
① 如果客户环境可由我们自行规划文件系统,可进行以下规划
A. 检查数据盘是LVM还是数据盘
a. lsblk
b. lvdisplay
B. 数据盘使用逻辑卷(LVM)方式管理,便于扩展
C. 文件系统
- a. redhat8/centos8 推荐使用 xfs
- b. redhat7/centos7 推荐使用 xfs
- c. redhat6/centos6 推荐使用 ext4
D. redhat8/centos8 磁盘调度算法
- a. SAS设备使用 mq-deadline
- b. SSD设备使用 none
E. 磁盘调度算法
- a. SAS设备使用 deadline
- b. SSD设备使用 noop
F. 挂载参数
- a. 默认值,noatime,nodiratime,nobarrier
F.查看磁盘UUID
- a. lsblk -f
- b. blkid
# 修改磁盘调度算法
shell> echo "deadline" > /sys/block/sdb/queue/scheduler
shell> vi /etc/rc.local
echo "deadline" > /sys/block/sdb/queue/scheduler
# 修改挂载参数
shell> mount -oremount,noatime,nodiratime,nobarrier /dev/sdb /data
shell> vim /etc/fstab
UUID=de86ba8a-914b-4104-9fd8-f9de800452ea /data ext4 defaults,noatime,nodiratime,nobarrier 1 1
② 如要上线RDS系统的数据库节点,还需配置如下(非RDS环境上线略过)
Quota配置:
注意:不支持分区盘
l 准备⼀块已经格式化或者lvm,修改/etc/fstab, 对需要挂载的路径添加usrquota,grpquota 属性
shell> vim /etc/fstab
UUID=9a31aa5d-3e05-473d-bb17-05101bbc9bec / xfs defaults 0 0
UUID=de86ba8a-914b-4104-9fd8-f9de800452ea /data ext4 defaults,usrquota,grpquota 1 2
l mount -a 挂载 (如已挂载,需先卸载再挂载)(注:xfs ⽂件系统跳过步骤 3,4)
shell> mount -a
l 创建quota配置⽂件 (data 为 2 中挂载的路径 )
shell> quotacheck -cug /data
l 设置quota 启用
shell> quotacheck -auvg
l 完成上述步骤后代表 quota 磁盘已经设置完成,磁盘分区下会有aquota.group ,aquota.user两个文件,此时可以使⽤磁盘隔离。
IP地址 |
截图 |
|
|
3.5 配置ntp服务
备注:[以下两种采用一种形式即可]
同步时间有两种形式,ntp与ntpdate+crontab。
ntp使用服务的方式同上级同步时间;
ntpdate是使用命令,直接同时间服务同步时间,经常与crontab联合使用.
如下是配置ntp服务的方式来进行时间同步:
根据实际的 ntp 服务器地址修改配置
shell> vim /etc/ntp.conf
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
# 改为
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server 100.65.0.1 iburst
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst
## 启动服务: ##
# 先手工对时一下:
shell> ntpdate 100.65.255.1
# redhat6/centos6
shell> service ntpd start
shell> chkconfig ntpd on
# redhat7/centos7
shell> systemctl start ntpd
shell> systemctl enable ntpd
# 注:修改时间后须手动重启crontab,cron的执行时间才会同步
shell> systemctl restart crond
IP地址 |
截图 |
|
|
3.6 检查时区是否为东八区
# 查看时区,如果不是东八区需要按时区进行校准
shell> date -R
Wed, 06 Mar 2019 14:17:16 +0800
# 设置软连接,进行时区校准
shell> ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 注:修改时间后须手动重启crontab,cron的执行时间才会同步
shell> systemctl restart crond
IP地址 |
截图 |
|
|
3.7 关闭 iptables 及 selinux
服务器上的 iptables 应该是关闭的,否则规则可能对数据库服务造成影响,需要与客户确认
# 关闭iptables
# redhat6/centos6
shell> /etc/init.d/iptables stop
shell> chkconfig iptables off
# redhat7/centos7
shell> systemctl stop firewalld.service
shell> systemctl disable firewalld.service
# 关闭selinux
临时关闭
shell> setenforce 0
永久关闭
shell> vi /etc/selinux/config
SELINUX=disabled
SELINUXTYPE=targeted
IP地址 |
截图 |
|
|
3.8 核对 umask
查看/ etc / profile并搜索umask关键字,查看以下代码是否被扩展
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
#查看当前系统umask的值,确保与文件中的值一致
shell> umask
0022
IP地址 |
截图 |
|
|
3.9 配置sar
3.9.1创建sar、pidstat的数据存放目录
shell> mkdir /var/log/sysstat_action
3.9.2校验sadc、sar、pidstat命令的绝对路径:(用于下面数据的采集使用)
shell> find / -name sadc && which sar && which pidstat
3.9.3配置sar数据采集以及生成报告,在/etc/cron.d/sysstat 配置文件下添加如下两项配置:(sadc、sar命令根据环境的绝对路径填写)
*/1 * * * * root /usr/lib64/sa/sadc -F -L -S ALL 1 1 /var/log/sysstat_action/sa
53 23 * * * root /usr/bin/sar -A -f /var/log/sysstat_action/sa > /var/log/sysstat_action/sar
说明: 第一行每分钟生成sa报告, 第二行每天将sa格式转为sar(人类可读格式)
3.9.4配置pidstat数据采集,在/etc/cron.d/sysstat配置文件里添加如下配置。(pidstat命令根据环境的绝对路径填写)
*/1 * * * * root /usr/bin/pidstat -urdw -p ALL >>/var/log/sysstat_action/pidstat
3.9.5在/etc/logrotate.d目录下分别创建pidstat、sa文件,内容如下:
shell> cat /etc/logrotate.d/pidstat
/var/log/sysstat_action/pidstat {
missingok
notifempty
daily
compress
maxsize 400M
rotate 31
dateext
dateformat -%Y_%m_%d_%H_%s
create 0600 root root
}
参数说明:
compress-------压缩方式gzip,以一个小时的量进行压缩,压缩率接近10:1
maxsize 400M-----按照pidstat的采集方式,一个小时产生的数据量大致12M左右,一天的量288M
rotate 31-------------保留副本数量
shell> cat /etc/logrotate.d/sa
/var/log/sysstat_action/sa {
missingok
notifempty
daily
compress
}
/var/log/sysstat_action/sar {
missingok
notifempty
daily
compress
rotate 31
dateext
dateformat -%Y_%m_%d_%H
}
参数说明:
daily--------------------sar采集的数据文件,一天rotate一次。由于在下次复用该文件之前,已经生成相应的报告,因此不需要设置rotate数量。
3.9.6在/etc/cron.d/sysstat 配置logrotate计划任务
* */1 * * * root /usr/sbin/logrotate -v /etc/logrotate.d/pidstat /etc/logrotate.d/sa
3.9.7容量评估:
结论:/var/log/sysstat_action至少留有2G以上空间
注意:如果在使用cron过程中,时间格式、命令都正确的前提下,无法触发执行计划,请重启计划任务服务!!!!
容量评估办法:
l sar 大小预估:通过一分钟生成的sa数据量解析成文本,评估一分钟产生的文件大小,之后可以评估出一天的量,因为服务器的配置不一样,因此具体到某个环境,需要单独评估
l pidstat大小预估:因为服务器运行的进程数量、进程信息不一样,因此pidstat获得的报告,需要根据具体的服务器运行的进程,通过一分钟获取文件的大小来评估一天的量。
IP地址 |
截图 |
|
|
3.10 配置历史
让 history 记录更多历史操作记录,并记录时间戳和执行用户
shell> vi /etc/bashrc # 在末尾添加:
export HISTFILESIZE=500000000
export HISTSIZE=1000000
export PROMPT_COMMAND="history -a"
export HISTTIMEFORMAT='%F %T '
export HISTTIMEFORMAT="%Y-%m-%d %H:%M:%S `whoami` "
# 使配置生效:
shell> source /etc/bashrc
IP地址 |
截图 |
|
|
3.11 卸载系统自带旧版本MySQL相关RPM包
某些服务系预装了 MySQL,但是版本是5.1,避免客户端版本差异带来的影响,应该卸载这类rpm包
shell> rpm -qa|grep mysql -i
shell> rpm -e --nodeps mysql-xxx-5.1..x86_64
shell> mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d`
如系统中存在perl-DBD-MySQL-4.013-3.el6.x86_64mysql-libs-5.1.73-3.el6_5.x86_64可保留不卸载。
IP地址 |
截图 |
|
|
3.12 关闭numa
服务器关闭numa会影响所有进程,关闭numa主要是解决MySQL服务器swap严重以及内存泄漏的问题。需要注意的是MySQL5.7.9。 。如果使用MySQL5.7.9之后的版本,可以不用关闭服务器的numa。
3.12.1. 修改 grub.conf
RHEL/CentOS 6:
在 /boot/grub/grub.conf 文件中修改 kernel 行(添加numa=off):
shell> vi /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_vm-210/root rd.lvm.lv=rhel_vm-210/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto vconsole.keymap=us rhgb quiet numa=off
对于RHEL 7:
1、在/etc/default/grub 文件中修改 kernel 行:
shell> vi /etc/default/grub
GRUB_CMDLINE_LINUX="rd.lvm.lv=rhel_vm-210/root rd.lvm.lv=rhel_vm-210/swap vconsole.font=latarcyrheb-sun16 crashkernel=auto vconsole.keymap=us rhgb quiet numa=off
2、RHEL7/CentOS7 必须要重建 GRUB 配置文件才能生效:
shell> grub2-mkconfig -o /etc/grub2.cfg
IP地址 |
截图 |
|
|
3.13关闭透明大页面(THP)
3.13.1 查询系统是否开启了 THP 命令
shell> cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
shell> cat /sys/kernel/mm/transparent_hugepage/defrag
[always] madvise never
如果括号中的是 always 表示开启了,never 则表示未开启
3.13.2 实时生效关闭方案
shell> echo never >> /sys/kernel/mm/transparent_hugepage/enabled
shell> echo never >> /sys/kernel/mm/transparent_hugepage/defrag
3.13.3 写进配置文件(需要重启)
在/etc/rc.local中增加如下内容
if test -f /sys/kernel/mm/transparent_hugepage/enabled;
then
echo never > /sys/kernel/mm/transparent_hugepage/enabled
fi
if test -f /sys/kernel/mm/transparent_hugepage/defrag;
then
echo never > /sys/kernel/mm/transparent_hugepage/defrag
fi
执行以下操作,使rc.local可以在系统引导期间执行
shell> chmod +x /etc/rc.d/rc.local
IP地址 |
截图 |
|
|
3.14 检查系统网卡信息
3.14.1 检查IP是否为静态绑定
需要检查网卡是否为静态绑定,如果是dhcp,会导致IP丢失,或者服务器IP绑定成vip,导致DMP由于ping不通真实IP,出现停机
正确的配置:
shell> cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE = bond1
NAME = bond1
TYPE = Bond
BONDING_MASTER = yes
IPADDR = 10.252.205.120
GATEWAY = 10.252.205.1
NETMASK = 255.255.255.0
ONBOOT = yes
BOOTPROTO = static#也许使用dhcp
METRIC = 0
NM_CONTROLLED = no
PEERDNS = no
MACADDR = 28:7b:09:c1:f4:5a
BONDING_OPTS ='mode = 4 miimon = 100 use_carrier = 1'
错误的配置:
shell> cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE = bond1
NAME = bond1
TYPE = Bond
BONDING_MASTER =是
IPADDR =
GATEWAY =
NETMASK =
ONBOOT =是
BOOTPROTO = dhcp #也许使用dhcp
METRIC = 0
NM_CONTROLLED =否
PEERDNS =否
MACADDR = b4:fb:f9:7d:de:39
BONDING_OPTS ='mode = 4 miimon = 100 use_carrier = 1'
IP地址 |
截图 |
|
|
3.14.2检查网卡名是否过长
网卡名过长会导致DMP绑定不了SIP的情况
DMP版本 |
网卡名长度 |
<3.19.05.1 |
<5 |
>=3.19.05.1 |
<10 |
IP地址 |
截图 |
|
|
3.15 检查系统虚拟内存超配参数
l 虚拟机环境的宿主机超配,cpu超配。并给客户提出风险告知。
l 检查系统虚拟内存超配参数
l
shell> sysctl -A | grep "vm.overcommit_memory"
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
vm.overcommit_memory = 0
确认vm.overcommit_memory为0, 如果为其他值, 需报备
(场景, 若vm.overcommit_memory为2, 虚拟内存超配受到vm.overcommit_ratio限制, 可能无法分配足够大的内存)
IP地址 |
截图 |
|
|
3.16 用户密码过期时间
# 检查用户密码过期时间,默认99999
shell> cat /etc/login.defs |grep ^PASS_MAX_DAYS
PASS_MAX_DAYS 99999
# 查看用户actiontech-universe的密码过期时间是多少
shell> chage -l actiontech-universe
Last password change : Feb 19, 2020
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
IP地址 |
截图 |
|
|
3.17 检查服务器cpu是否处于低耗能模式
IP地址 |
截图 |
|
|
3.18glibc版本检查
shell> ldd --version |grep "GNU libc"
ldd (GNU libc) 2.17
# 版本不应低于glibc-2.12-1.167
IP地址 |
截图 |
|
|
3.19 关闭MySQL开机启动
#RHEL/CentOS 6:
chkconfig --list ##查看当前开机自启
chkconfig mysql off ##关闭mysql开机自启
##RHEL/CentOS7:这两种开机自启方式都要检查一下
chkconfig --list ##查看当前开机自启
chkconfig mysql off ##关闭mysql开机自启
systemctl list-unit-files |grep mysql ##disabled为关闭 enabled为开启
systemctl disable mysqld_3306.service ##关闭开机自启
IP地址 |
截图 |
|
|
3.20如操作系统是centos8,在上线检查时,需检查是否有正确的MySQL client依赖的动态链接库
1)CentOS8升级了ncurses-libs的版本. 导致文件名发生变更
2)MySQL client依赖libtinfo.so.5, 但是CentOS8文件名为libtinfo.so.6.1
3)需使用软链强制将MySQL client使用6.1版本的ncurses-libs
4)默认路径如下,也可根据实际实况进行修改
#检查操作系统版本
shell> cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)
#检查是否有MySQL client依赖的libtinfo.so.5文件
shell> ls /usr/lib64/libtinfo.so.5
ls: cannot access '/usr/lib64/libtinfo.so.5': No such file or directory //没有libtinfo.so.5文件,需要进行软链接
/usr/lib64/libtinfo.so.5 //已经有了libtinfo.so.5文件,不需要进行软链接
#检查libtinfo.so.6.1的文件是否存在
shell> rpm -qf /usr/lib64/libtinfo.so.6.1
ncurses-libs-6.1-7.20180224.el8.x86_64 //libtinfo.so.6.1文件存在,可以进行软链
error: file /usr/lib64/libtinfo.so.6.1: No such file or directory //libtinfo.so.6.1文件不存在,无法进行软链接
#如果没有libtinfo.so.5文件,需使用软链将MySQL client使用6.1版本的ncurses-libs
shell> ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5
#检查是否链接成功
shell> ls /usr/lib64/libtinfo.so.5
/usr/lib64/libtinfo.so.5 //链接成功,已有MySQL client依赖的文件
IP地址 |
截图 |
|
|
3.21 检查字符集
[root@dmpdb01 system]# locale | grep en
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
[root@dmpdb01 system]# echo $LANG
en_US.UTF-8
IP地址 |
截图 |
|
|
3.22 检查是否存在旧的MySQL实例
shell> /systemd/system|grep mysql|grep service|awk -F '_' '{print $2}'|awk -F '.' '{print $1}'|sort -u #针对注册了service服务的实例 空为正常
shell> netstat -nlp |grep mysqld|grep -v sock|awk '{print $4}'|awk -F ':' '{print $4}' #针对未注册service服务,手工安装的实例 空为正常
IP地址 |
截图 |
|
|
3.23 配置fs.aio-max-nr
系统默认fs.aio-max-nr为65536,若需部署单机多实例,可导致mysql服务因系统范围异步 I/O 请求数超过fs.aio-max-nr而启动失败,建议调整为1048576
# 检查系统aio数值,fs.aio-max-nr默认为65536
shell> sysctl -a|grep fs.aio
# 设置系统fs.aio-max-nr数值
shell> echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
shell> sysctl -p
IP地址 |
截图 |
|
|
3.24 查看是否开启传统大页
如开启传统大页,要和运维人员确定大页用途,如专门给MySQL使用,需关闭传统大页。
查看是否开启传统大页:
# 0为未开启传统大页
shell> cat /proc/sys/vm/nr_hugepages
0
#sysctl.conf文件中为空或者为0
shell> vim /etc/sysctl.conf
vm.nr_hugepages = 0
关闭传统大页:
#临时:
shell> echo 0 > /proc/sys/vm/nr_hugepages
#持久:sysctl.conf文件中设置为0或为空
shell> vim /etc/sysctl.conf
vm.nr_hugepages = 0
shell> sysctl -p #重新加载配置
IP地址 |
截图 |
|
|
3.25 重启服务器
IP地址 |
截图 |
|
|
四、对服务器进行基准性能测试
说明:sysbench iops(测试环境省略)
IP地址 |
截图 |
|
|
五、检查服务器网络配置
5.1 检查网络端口开放策略是否正确
# 使用相关网络命令进行检查netstat -tln、ping ——无误
# windows下ping Linux主机
# 以及检查端口telnet 198.28.2.82(umc ip):5799
shell> netstat -tln 10.186.60.32
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 :::5722 :::* LISTEN
tcp6 0 0 :::5701 :::* LISTEN
tcp6 0 0 :::5702 :::* LISTEN
tcp6 0 0 :::5703 :::* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
tcp6 0 0 :::5706 :::* LISTEN
tcp6 0 0 :::5710 :::* LISTEN
tcp6 0 0 :::111 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
IP地址 |
截图 |
|
|
5.2 检查网络是否与外网打通,ping是否正常
# 三台主机互ping,内网环境,测试无法ping通外网。
# 本次测试在内网环境应无法ping通外网
shell> ping www.baidu.com
PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data.
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=51 time=8.39 ms
64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=51 time=7.16 ms
^C
--- www.a.shifen.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1008ms
rtt min/avg/max/mdev = 7.160/7.776/8.393/0.622 ms
IP地址 |
截图 |
|
|
5.3 检查网络丢包率是否正常
# 1、ping IP + ctrl+c
shell> ping 10.186.60.32
PING 10.186.60.32 (10.186.60.32) 56(84) bytes of data.
64 bytes from 10.186.60.32: icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from 10.186.60.32: icmp_seq=2 ttl=64 time=0.029 ms
64 bytes from 10.186.60.32: icmp_seq=3 ttl=64 time=0.034 ms
64 bytes from 10.186.60.32: icmp_seq=4 ttl=64 time=0.040 ms
64 bytes from 10.186.60.32: icmp_seq=5 ttl=64 time=0.028 ms
64 bytes from 10.186.60.32: icmp_seq=6 ttl=64 time=0.031 ms
64 bytes from 10.186.60.32: icmp_seq=7 ttl=64 time=0.028 ms
64 bytes from 10.186.60.32: icmp_seq=8 ttl=64 time=0.031 ms
64 bytes from 10.186.60.32: icmp_seq=9 ttl=64 time=0.032 ms
64 bytes from 10.186.60.32: icmp_seq=10 ttl=64 time=0.029 ms
64 bytes from 10.186.60.32: icmp_seq=11 ttl=64 time=0.039 ms
64 bytes from 10.186.60.32: icmp_seq=12 ttl=64 time=0.032 ms
64 bytes from 10.186.60.32: icmp_seq=13 ttl=64 time=0.031 ms
64 bytes from 10.186.60.32: icmp_seq=14 ttl=64 time=0.036 ms
^C
--- 10.186.60.32 ping statistics ---
14 packets transmitted, 14 received, 0% packet loss, time 13043ms
rtt min/avg/max/mdev = 0.022/0.031/0.040/0.007 ms
# 2、IP包的重传率 =(segments retransmited) /(segments send out) * 100 %
shell> netstat -s |grep segments
131324843 segments received
142738071 segments send out
28204 segments retransmited
40 bad segments received.
IP地址 |
截图 |
|
|
5.4 检查tcp keepalive是否打开
shell> sysctl -a | grep keepalive
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
sysctl: reading key "net.ipv6.conf.all.stable_secret"
sysctl: reading key "net.ipv6.conf.default.stable_secret"
sysctl: reading key "net.ipv6.conf.eth0.stable_secret"
sysctl: reading key "net.ipv6.conf.lo.stable_secret"
IP地址 |
截图 |
|
|
5.5 检查tcp连接以及随机端口参数
# 表示开启重用(通过timestamp 递增性,客户端和服务器能够处理outofbind fin包)。允许将TIME-WAIT sockets重新用于新的TCP连接
shell > cat /proc/sys/net/ipv4/tcp_tw_reuse
1
# 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭 。注意: Linux 从4.12内核版本开始移除了 tcp_tw_recycle 配置
shell > cat /proc/sys/net/ipv4/tcp_tw_recycle
0
# 查看网络随机端口参数的值,如果参数范围包含DMP平台端口5690-5800(会有可能导致产品组件端口被占用)或者MySQL的端口范围,建议修改
shell > cat /proc/sys/net/ipv4/ip_local_port_range
32768 60999 # 默认值
# 指定为已知的第三方应用程序保留的端口。这些端口将不会被自动端口分配使用(例如,使用端口号0调用connect()或bind()时)。
# 防呆参数,如果有ip_local_port_range 可不配置此参数,显式端口分配行为不受此影响。
shell > cat /proc/sys/net/ipv4/ip_local_reserved_ports # 注意:内核版本要大于2.6.18-164,否则不支持该参数。
shell > vim /etc/sysctl.conf # 修改系统配置信息
net.ipv4.tcp_tw_reuse = 1 # 默认为空,表示关闭,建议为1,表示允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_tw_recycle = 0 # 默认为空,表示关闭,建议关闭
ip_local_port_range = 32768 60999 # 默认为32768 60999,如ip_local_port_range中为默认值,则本行无需填写
ip_local_reserved_ports = 5690-5800 # 默认为空,表示无保留端口
shell > sysctl -p # 配置生效
问题涉及工单: ATK-884
六、确定备份策略
说明:xtrabackup/binlog
|
七、确定MySQL主机容量规划
前提:开启 innodb_file_per_table
容量规划
7.1 数据文件大小估算
项目 |
说明 |
举值列 |
容量规划的目标周期 |
数据库在下次做容量调整前, 计划运行多久 |
3年/156周 |
现在数据库的容量大小 |
SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "DB Size in MB" FROM information_schema.tables; |
2013 MB |
当前的全备大小 |
只包括全备大小 |
1177 MB |
上一周期 (比如上周) 的全备大小 |
只包括全备大小 |
936 MB |
全备大小差异 |
|
241MB/每周 |
保留备份份数 |
|
2 |
估算数据文件大小
|
(全备大小差异) * (现在数据库的容量大小) * (容量规划的目标周期) / (上一周期 的全备大小) = ((1177 - 936) x 2013 x 156)/936 = 80856 MB ~= 81 GB after 3 years |
2 |
7.2 binlog文件大小估算
计算每小时的binlog增量, 可手工统计, 或使用event定期进行flush logs:
mysql> USE mysql;
mysql> CREATE EVENT flush_binlog ON SCHEDULE EVERY 1 HOUR STARTS CURRENT_TIMESTAMP ENDS CURRENT_TIMESTAMP + INTERVAL 2 HOUR
COMMENT 'Flush binlogs per hour for the next 2 hours'
DO FLUSH BINARY LOGS;
举例: 每小时的binlog增量为562 MB, binlog的容量预估为:
mysql> SELECT (562 * 24 * @@expire_logs_days);
+---------------------------------+
| (562 * 24 * @@expire_logs_days) |
+---------------------------------+
| 94416 |
+---------------------------------+
7.3 redo log容量计算
mysql> select @@innodb_log_file_size*@@innodb_log_files_in_group/1024/1024/1024 as 'Size in GB';
+----------------+
| Size in GB |
+----------------+
| 0.500000000000 |
+----------------+
1 row in set (0.00 sec)
7.4 临时文件容量计算
检查配置是否有最大值,如ibtmp1:12M:autoextend:max:500M,按最大值计算.
mysql> select @@innodb_temp_data_file_path;
+------------------------------+
| @@innodb_temp_data_file_path |
+------------------------------+
| ibtmp1:12M:autoextend |
+------------------------------+
1 row in set (0.00 sec)
如没有最大值, 可检查当前值 (需在业务运行一段时间后)
mysql> SELECT FILE_NAME, TABLESPACE_NAME, ENGINE, INITIAL_SIZE, TOTAL_EXTENTS*EXTENT_SIZE
-> AS TotalSizeBytes, DATA_FREE, MAXIMUM_SIZE FROM INFORMATION_SCHEMA.FILES
-> WHERE TABLESPACE_NAME = 'innodb_temporary'\G
*************************** 1. row ***************************
FILE_NAME: ./ibtmp1
TABLESPACE_NAME: innodb_temporary
ENGINE: InnoDB
INITIAL_SIZE: 12582912
TotalSizeBytes: 12582912
DATA_FREE: 8388608
MAXIMUM_SIZE: NULL
1 row in set (0.00 sec)
7.5 其他日志容量估算
检查如下日志:
l general log
l slow log
l error log
是否有较大的日志存在, 如有, 需要按照监控历史进行容量评估; 如没有较大日志, 则用常量替代估算, 如1G.
7.6 备份空间估算
备份时, 需备份所有数据文件、所有Redo log、部分binlog
估算备份的临时空间大小 = 评估周期结束时, (所有数据文件大小 + 所有Redo log大小 + 1小时的binlog增量大小) = (81 G + 0.5 G + 562 MB) ~= 82 G
估算全备文件的大小 = 估算备份的临时空间 * 压缩比(经验值) ~= 82G * 0.6 = 49.2 G
估算增备文件的大小 = 一个周期内全备大小差异 * 系数(经验值) ~= 936 M * 1.2 ~= 1123.2 M. 如不配置增备, 可忽略
估算备份的总空间 = (备份的临时空间大小) + 保留备份份数 * [(全备文件的大小) + (增备文件的大小)] = 82G+ 2 * (49.2G+ 1123.2) ~= 182.6 G
7.7 总空间估算
估算总空间 = 数据文件大小估算 + binlog 文件大小 + Redo log 容量 + 临时文件容量 + 其他日志容量 + 备份的总空间
= 81G + 94416 M + 0.5G + 12582912 bytes + 1 G + 182.6 G ~= 369.1 G
IP地址 |
截图 |
|
|
八、确定告警通道
|
九、确定my.cnf
说明:一般以DMP默认my.cnf
IP地址 |
截图 |
|
|
十、确定数据迁移方案
|
十一、检查是否存在DMP的旧版本组件
IP地址 |
截图 |
|
|
十二、对于uproxy实施: 确定前后端连接数限制
说明:默认客户端连接256
IP地址 |
截图 |
|
|
十三、对于dble实施配置检查
13.1确定数据分片规则
IP地址 |
截图 |
|
|
13.2确定内存参数
项目 |
公式 |
理论值 |
实际近似值 |
可用物理内存 |
|
64G |
64G |
DBLE总内存 |
0.6*可用物理内存 |
38.4G |
40G(取整易于计算) |
JVM-Xmx(wrapper.conf) |
0.4 * dble总内存 |
15.36G |
16G |
MaxDirectMemorySize (wrapper.conf) |
0.6 * dble总内存 |
23.04G |
24G |
bufferPoolPageNumber (server.xml) |
0.8 * MaxDirectMemorySize / 2M |
9216 |
9600 |
IP地址 |
截图 |
|
|
13.3确定前后端连接数限制
IP地址 |
截图 |
|
|
十四、umon监控数据容量规划
节点类型 |
Umon: 监控节点 |
硬件要求 |
CPU:8Cores ;内存:8G ;硬盘:500G |
操作系统类型 |
OS:RHEL6.4/CentOS6.4 以上; Kernel:2.6.3 以上 |
支持部署数 |
1 |
系统配置要求 |
集群内时间同步:NTP |
软件依赖(RHEL7/CentOS7) |
sudo vi less which wget net-tools fontconfig libaio hwloc lib-pciaccess lsof |
软件依赖(RHEL6/CentOS6) |
sudo vi less which wget net-tools fontconfig libaio hwloc lib-pciaccess lsof libtool-ltdl |
备注 |
Umon的磁盘规划: |
|
|
Umon磁盘容量规划影响因素为:M*N*L*120% |
|
单实例24h产生监控数据量为M |
|
监控实例个数为N |
|
监控数据保存周期为L |
|
增加20%的冗余空间 |
|
单实例24h的监控数据量约为20M/天;如规划1000个数据库实例的集群;保存周期为30天; |
|
则至少需要规划20*1000*30*1.2=720G的存储空间 |
IP地址 |
截图 |
|
|
十五、业务账号密码设置
说明:按照客户要求进行配置。
IP地址 |
截图 |
|
|
十六、确定udb的高可用方案
IP地址 |
截图 |
|
|
十七、RDS实施配置检查
1、在申请RDS数据库实例之前,在元数据里确认延迟检测参数是否开启及默认延迟检测阈值
l 在RDS上默认是开启延迟检测并且阈值为500秒(过长)
l 确认是否有开启延迟检测的需求,并且确认延迟检测的阈值
十八、上线
1、上线一个月内, 安排日/周巡检, 并记录巡检结果
2、上线一个月后, 每月安排巡检
3、上线后, 需要每天处理告警