tongsiying

阅读|运动|自律

0%

mysqlRds-draft

一 MySQL RDS 独立部署版本物理机手动安装手册

目的

本文档为MysqlRds(5.7)在物理机上手动执行脚本安装的操作说明。适配操作系统为CentOS 7.3(64bit) 和Redhat 6.3(64bit)。

环境准备

基本环境要求

硬件需求

  1. 机器数量

    • 单实例: 1台机器
    • HA集群:2台机器或3台机器
  2. vip资源

    • HA集群配置2个同网段的vip(单实例不需要vip)
  3. 同一HA集群中的数据库服务器部署在不同机架上

  4. 机器硬件配置

    • PRD环境配置万兆业务网卡
    • PRD环境配置独立的万兆备份网卡(或网口)并接入备份网络
    • PRD环境配置SSD硬盘
    • 同一HA集群的机器的硬件配置一致

软件和配置需求

  1. OS支持

    • CentOS 7.3 64位
    • Redhat 6.3 64位
  2. 文件系统

    • 格式

      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收发字节数
赞赏一下吧~