一 MySQL RDS 独立部署版本物理机手动安装手册
目的
本文档为MysqlRds(5.7)在物理机上手动执行脚本安装的操作说明。适配操作系统为CentOS 7.3(64bit) 和Redhat 6.3(64bit)。
环境准备
基本环境要求
硬件需求
机器数量
- 单实例: 1台机器
- HA集群:2台机器或3台机器
vip资源
- HA集群配置2个同网段的vip(单实例不需要vip)
同一HA集群中的数据库服务器部署在不同机架上
机器硬件配置
- PRD环境配置万兆业务网卡
- PRD环境配置独立的万兆备份网卡(或网口)并接入备份网络
- PRD环境配置SSD硬盘
- 同一HA集群的机器的硬件配置一致
软件和配置需求
OS支持
- CentOS 7.3 64位
- Redhat 6.3 64位
文件系统
格式
ext4格式
物理磁盘
binlog分区: /binlog ext4 defaults,noatime,nodiratime 0 0 bak分区: /bak ext4 defaults 0 0 data分区: /mysql ext4 defaults,noatime,nodiratime 0 0 确保binlog分区至少100G, data分区和bak分区的大小比值为1:2,三个分区的总大小要小于磁盘的总大小 (要预留出至少2G以上的空间,不能全部占满)。
安装前准备
物理机安装MySQLRds前需要确认以下安装包已获取并上传到各节点的/opt目录下:
- percona-xtrabackup-2.4.3-Linux-x86_64.tar.gz
- Percona-Server-5.7.19-17-Linux.x86_64.ssl101.tar
- mysqlRds_standalone_v1.0.0.tar.gz(独立部署版本)
- pkgs.tar.gz
安装前环境清理[各节点均执行]
以下步骤是为了清理过去可能有过的安装步骤造成的残留文件,清理环境避免安装失败。
[root@CentOS7 opt]# rm -rf /mysql/*
[root@CentOS7 opt]# rm -rf /binlog/*
[root@CentOS7 opt]# rm -rf /bak/*
安装
1. 共通安装操作
以下步骤是适用于单实例和HA集群安装的共通操作,在所有机器上执行,使用root用户执行作。
1.1 解压[各节点均执行]
- 解压mysqlRds_standalone.tar.gz到/opt, 并重命名
[root@CentOS7 opt]# tar -C /opt -xvf mysqlRds_standalone.tar
[root@CentOS7 opt]# mv mysqlRds_standalone mysqlRds
- 解压pkgs.tar.gz到/opt/mysqlRds
[root@CentOS7 opt]# tar -C /opt/mysqlRds -zxvf pkgs.tar.gz
- 拷贝MySQL和xtrabackup安装包到/opt/mysqlRds/pkgs/mysql
[root@CentOS7 opt]# cp -f Percona-Server-5.7.19-17-Linux.x86_64.ssl101.tar.gz percona-xtrabackup-2.4.3-Linux-x86_64.tar.gz /opt/mysqlRds/pkgs/mysql
- 赋权限:
[root@CentOS7 opt]# chmod -R 755 /opt/mysqlRds
[root@CentOS7 opt]# chmod -R 777 /opt/mysqlRds/pkgs/
1.2 编辑mysqlRds.cfg[各节点均执行]
[root@CentOS7 opt]#cd /opt/mysqlRds/etc
vim打开mysqlRds.cfg,具体配置如下修改:
[mysqlRds]
ftp_pkg_dir = /soft/mysql/5.7
mysql_install_pkg = Percona-Server-5.7.19-17-Linux.x86_64.ssl101.tar.gz
xtrabackup_install_pkg = percona-xtrabackup-2.4.3-Linux-x86_64.tar.gz
mysql_install_path = /usr/local
defaults_file = /home/mysql/etc/my.cnf
mysql_instance_user = mysql
mysqlRds_dir = /opt/mysqlRds
data_path = /mysql/data
binlog_path = /mysql/binlog
backup_path = /mysql/bak
core_path = /mysql/cores
disk_device = /dev/vdb ##根据实际改
data_mount_point = /mysql
data_size = 200G
binlog_mount_point = /binlog
binlog_size = 100G ## 正常设置200G
backup_mount_point = /bak
backup_size = 400G ##data_size和backup_size比例正常为1:2
vm_cpu = auto
vm_mem = auto
#######注:上述参数一般情况下不需要修改,下述参数根据情况修改###########################
root_user = root
root_password = SuningRds@123
fabu_user = fabu
fabu_password = SuningRds@123
innotop_user = innotop
innotop_password = SuningRds@123
repl_mode = semisync #注:semisync半同步(保证双主数据一致,互相同步),async异步同步
repl_user = repl #注:单实例不创建复制用户,此项留空
repl_password = repl #注:单实例不创建复制用户,此项留空
admin_user = sndsadmin
admin_password = 123456
app_database = app_db
app_user = appuser
app_password = mysqlRds@suning
ipnodes = 10.47.211.117,10.47.211.118,10.47.211.119 #各节点ip,单实例填写该节点ip即可
writer_vip = 10.47.211.210 #注:单实例没有vip此项留空(主从如果没有vip,选择一个ping不通的ip)
reader_vip = 10.47.211.215 #注:单实例没有vip此项留空,注意请按实际情况填写,有的环境不需要只读VIP(主从如果没有vip,选择一个ping不通的ip)
vip_nic = bond0 #注:请按照实际情况填写,物理机一般为bond0
其中:ipnodes配置服务器ip信息,writer_ip配置读写VIP,reader_vip配置只读VIP。
vip_nic即网卡名称需按照实际情况填写,物理机通常为bond0, 虚拟机一般为eth0。
【如果配置文件配置错,再执行一遍setup_mysql_ha.py生效】
1.3 创建目录和软连接[各节点均执行]【没分区可以不执行1.3】
[root@CentOS7 ~]mkdir -p /mysql/data
[root@CentOS7 ~]mkdir -p /bak/cores
[root@CentOS7 ~]ln -sf /binlog /mysql/binlog
[root@CentOS7 ~]ln -sf /bak /mysql/bak
[root@CentOS7 ~]ln -sf /bak/cores /mysql/cores
1.4 安装python2.7[各节点均执行]
[root@CentOS7 ~]# cd /opt/mysqlRds/install
[root@CentOS7 install]# python install_python.py
注: 此过程会检测当前python版本是否是2.7,如果不是,则安装python2.7至/usr/local/python2.7
创建目录和软连接:(其实就是1.3)
[root@CentOS7 ~]# cd /opt/mysqlRds/install
[root@CentOS7 ~]# python create_disk.py[如果执行卡住,先执行下pvcreate /dev/vdb]
1.5 安装mysql软件和初始化实例[各节点均执行]
[root@CentOS7 ~]# cd /opt/mysqlRds/install
[root@CentOS7 install]# python2.7 install_mysql.py
[root@CentOS7 install]# python2.7 init_db.py
2. 仅单实例需要执行的步骤【单机执行这一步,主从直接跳到3.】
[root@CentOS7 ~]# cd /opt/mysqlRds/install
[root@CentOS7 install]# python2.7 setup_mysql_single.py
单实例安装步骤到此结束。
2.1 检查实例状态
安装完成后可以执行mysql_ha_status查看实例状态是否正常。
3. 仅HA集群需要执行的步骤
3.1 资源准备
支持创建1主1从和1主2从HA集群,准备2或3台机器以及1个读写VIP,一个只读VIP,注意请按实际情况填写,有的环境不需要只读VIP
3.2. 设置ssh互信
设置所有机器SSH互信,并且每台机器还要和自身互信
设置ssh免密码登录(使用RSA Key)
机器1:10.37.64.52
机器2:10.37.64.53
设置机器1和机器2之间免密码登录
以下全是使用root用户,若以其他用户登录(如postgres用户),则先切换到该用户环境下在执行以下步骤。
机器1免密码登录机器2
1)机器1上生成RSA Key
cd ~/.ssh/
rm -f ./*
ssh-keygen -t rsa //随后按3次ENTER键
此时在.ssh目录下生成了id_rsa和id_rsa.pub。其中id_rsa是私钥,本机要用;id_rsa.pub是公钥,给其他的机器用。
2) 设置自身ssh互信
cd ~/.ssh/
cp id_rsa.pub authorized_keys
3)将公钥上传到机器2上
scp ./id_rsa.pub root@10.37.64.53:/root/.ssh/1_id_rsa.pub
4)将公匙写入机器2中的~/.ssh/authorized_keys文件
cat ~/.ssh/1_id_rsa.pub >> ~/.ssh/authorized_keys
机器2免密码登录机器1
与“机器1免密码登录机器2”的操作类似。
常见问题
设置ssh免密码后仍需要输入密码
在root用户下查看系统日志文件(rhel6.3目录 /etc/log/secure,centOS6.5目录/var/log/secure),发现如下日志:
Jun 26 15:28:14 sndsdevapp14 sshd[18439]: Authentication refused: bad ownership or modes for directory /var/lib/pgsql
Jun 26 15:28:16 sndsdevapp14 sshd[18439]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=sndsdevapp12 user=postgres
由日志可知,是目录/var/lib/pgsql的权限问题,将该目录权限设为700即可。
注:如果发现secure文件中没有日志记载,可能是rsyslog服务未启动,执行 ' service rsyslog start ' 启动即可。
3.3. 配置主从复制[仅主节点执行]
在第一台机器上以root用户执行以下命令,配置主从复制
[root@CentOS7 ~]# cd /opt/mysqlRds/install
[root@CentOS7 install]# python2.7 setup_replication.py
3.4.安装配置HA[仅主节点执行]
在第一台机器上以root用户执行以下命令,配置主从HA
[root@CentOS7 ~]# cd /opt/mysqlRds/install
[root@CentOS7 install]# python2.7 setup_mysql_ha.py
至此HA集群的安装步骤结束。
3.5 检查HA集群情况
在任一台机器上以root用户执行mysql_ha_status命令检查集群状态。
CLUSTER INFO
================================================================================
cluster type [ha]
cluster id [standalone_cluster]
nodes [{'ip': '10.47.211.117', 'bak_ip': ''}, {'ip': '10.47.211.118',
'bak_ip': ''}, {'ip': '10.47.211.119', 'bak_ip': ''}]
port [3306]
vip [eth0]
readonly_vip [10.47.211.215]
writer_vip [10.47.211.210]
master [10.47.211.117]
slave [['10.47.211.118', '10.47.211.119']]
dead servers [[]]
cluster is healthy
4. 测试验证
HA集群在部署完毕后,确认HA切换是否正常
- 验证HA集群状态[在任意节点执行]:
mysql_ha_status
CLUSTER INFO
================================================================================
cluster type [ha]
cluster id [standalone_cluster]
nodes [{'ip': '10.47.211.117', 'bak_ip': ''}, {'ip': '10.47.211.118',
'bak_ip': ''}, {'ip': '10.47.211.119', 'bak_ip': ''}]
port [3306]
vip [eth0]
readonly_vip [10.47.211.215]
writer_vip [10.47.211.210]
master [10.47.211.117]
slave [['10.47.211.118', '10.47.211.119']]
dead servers [[]]
如集群状态正常会出现类似上面的结果。若出现"cluster is not healthy"代表集群状态不正常。
dead_servers表示可能宕机或Mysql进程不存在的节点。
登录本机mysql:
su - mysql mysql -h127.1 -usndsadmin -p'123456'
检查是否具有在线切换的条件:
1、在任意节点上以root用户验证集群状态: mysql_ha_status 2、切换前系统参数配置和VIP情况检查: cd /opt/mysqlRds/lib python2.7 mysql_ha_check.py 若无任何信息输出,代表系统复制参数配置和VIP挂载正常 3、检查是否具有在线切换的条件(在任意节点): mysql_ha_online_switch -c
验证在线切换:
1、在任意节点上以root用户执行脚本: mysql_ha_online_switch -n 查看切换结果和切换日志/opt/mysqlRds/log/mysql_ha.log,检查切换是否成功。 2、验证在线切换后HA集群的状态: mysql_ha_status
二 orzdba安装
MySQL 淘宝网开源监控工具orzdba安装、使用(安装到mysql服务端)
mysql客户端是指在一台设备上面装一个单机mysql
mysql服务端是指在主从mysql,实际提供服务的mysql
前言
orzdba是淘宝DBA团队开发出来的一个perl监控脚本,主要功能是监控mysql数据库,也有一些磁盘和cpu的监控选项,好不好用就见仁见智,毕竟各公司需求不尽相同.
安装
1. 共通安装操作
既然是perl脚本,那当然是先装各种perl相关的依赖包和控件:
yum install -y perl-Test-Simple.x86_64 perl-Time-HiRes perl-ExtUtils-CBuilder
yum install -y perl-ExtUtils-MakeMaker perl-DBD-MySQL perl-DBI perl-Module-Build
还有一个依赖命令:
2.先下载下来(有安装包可以不下载)
wget http://github.com/downloads/Lowercases/tcprstat/tcprstat-static.v0.3.1.x86_64
3.移动到/usr/bin
mv tcprstat-static.v0.3.1.x86_64 /usr/bin/
4.做个连接
ln -sf /usr/bin/tcprstat-static.v0.3.1.x86_64 /usr/bin/tcprstat
安装控件
1.先解压
tar -zxvf orzdba.tar.gz
cd /opt/trunk
tar xf orzdba_rt_depend_perl_module.tar.gz
2.进去解压后的文件夹
cd Perl_Module
3.里面有几个压缩包,一个个来安装
tar xf version-0.99.tar.gz
cd version-0.99
perl Makefile.PL
make
make install
cd ..
tar xf File-Lockfile-v1.0.5.tar.gz
cd File-Lockfile-v1.0.5
perl Build.PL
perl ./Build
perl ./Build install
cd ..
tar xf Class-Data-Inheritable-0.08.tar.gz
cd Class-Data-Inheritable-0.08
perl Makefile.PL
make
make install
cd ..
tar xf Module-Build-0.31.tar.gz
cd Module-Build-0.31
perl Build.PL
./Build
./Build install
当然了,还要改下配置,不然你怎么确认他连的是哪里呢?
4.修改orzdba
cd /opt/trunk
修改481行
my $ip = "10.244.208.11";//数据库ip
修改28行:
my $ipdz = '10.244.208.11'; #数据库ip
当然了,有很多参数,请看最后面一一列举,现在来看看怎么用:
./orzdba-lazy -rt 2>/dev/null
三 sysbench安装
(安装到mysql客户端上)
前言
sysbench原码安装,rpm包安装需要依赖
参考:https://www.jianshu.com/p/9982e0e513ee
1.安装前准备工作
yum -y install make automake libtool pkgconfig libaio-devel
//对于MySQL支持,在RHEL/CentOS 5上用mysql-devel替换
yum -y install mysql-devel openssl-devel
2.安装sysbench(源码编译形式)
./autogen.sh
./configure
make -j
make install
3.检查安装是否成功
sysbench –version
显示 sysbench 1.0.9
4.lua脚本路径
/usr/local/share/sysbench
常用的脚本:
只读:oltp_read_only.lua
只写:oltp_write_only.lua
更新:oltp_update_non_index.lua –主要是用来测试复制延时
5.拷贝mysql到/usr/bin/
cp /usr/local/mysql/bin/mysql /usr/bin/
6.修改get_rpl_delay.p
1.get_rpl_delay.py放在/opt目录下
2.修改一下parser.add_argument(‘-h’, ‘–host’, dest=’host’, help=’host’, default=”127.0.0.1”) 这一行的default值为备机的IP地址
7.注:如何采集复制延迟和剩余内存:
因为orzdba本身不支持复制延迟和剩余内存指标的收集,因此需要自己改一下代码支持一下。
(一)复制延迟:
MySQL: 修改orzdba脚本,当带-mysql参数时,调用一个python脚本,该脚本通过show slave status中的Seconds Behind Master参数值,作为当前时刻的复制延迟,并打印在orzdba输出值的delay参数这一列。
PG: 修改orzdba脚本,当带-mysql参数时,调用一个shell脚本,该脚本通过在主机上执行”select extract(epoch from replay_lag::time)::numeric(20,6) from pg_stat_replication;”获取复制延迟,并打印在orzdba输出值的pg_delay参数这一列。
(二)剩余内存:
修改orzdba脚本,当带-s或-lazy参数时,打印mem-free参数。
四 Mysql性能测试
1. 背景数据准备
为不同的数据量创建不同的数据库。例如sysbench_10_100w对应于10张表,每张表100w记录。
【mysql数据准备:】
1.在主mysql上创建库:
CREATE DATABASE 数据库名;
2.在客户端上通过sysbench创建背景数据
sysbench oltp_common --db-driver=mysql --mysql-host=10.244.208.11 --mysql-port=3306 --mysql-user=sndsadmin --mysql-password=123456 --mysql-db=sysbench_10_1000w --tables=10 --table-size=1000000 prepare
注释:
1.--mysql-host=10.37.2.180 数据库地址
2.--mysql-db=sysbench_10_1000w 库名称
3.--tables=10 表个数
4.--table-size=10000000 多少条数据
【PostgreSQL数据准备:】
sysbench oltp_common --db-driver=pgsql --pgsql-host=10.37.2.180 --pgsql-port=5432 --pgsql-user=postgres --pgsql-db=sysbench_10_1000w --tables=10 --table-size=10000000 prepare
2.测试
【mysql测试:】
sysbench /usr/local/share/sysbench/oltp_write_only.lua \
--db-driver=mysql --mysql-host=10.37.2.180 --mysql-port=3306 \
--mysql-user=sndsadmin --mysql-password=123456 --mysql-db=sysbench_10_1000w \
--tables=10 --table-size=10000000 --num_threads=1 --report-interval=1 \
--max-time=1200 run
【PostgreSQL测试:】
sysbench /usr/local/share/sysbench/oltp_write_only.lua \
--db-driver=pgsql --pgsql-host=10.37.2.180 --pgsql-port=5432 \
--pgsql-user=postgres --pgsql-db=sysbench_10_1000w \
--tables=10 --table-size=10000000 --num_threads=1 --report-interval=1 \
--max-time=1200
3. orzdba进行性能参数
在mysql服务端上执行
分别运行:
nohup /opt/trunk/orzdba -lazy -d vdb -mysql -rt -L /tmp/orzdba_0729.log &
采集的参数记录在/tmp/orzdba_0729.log中
4.orzdba结果分析
1.所有结果求平均值
2.参数:
-tcprstat(us):
count:此间隔内完成的请求数量
avg:此间隔内所有完成的请求,响应的平均时间
95_avg:此间隔内95%的请求量的平均响应时间(单位微秒),该值较能体现MySQL Server查询的平均响应时间
-QPS–TPS- :
显示出数据库常用变量值、insert/update/delete/select的统计值、innodb请求命中率、线程状态、mysql收发字节数