CENTOS7环境下配置MYSQL MHA方案
更新时间:2024-04-17 01:34:01 阅读量: 综合文库 文档下载
CENTOS7环境下配置MYSQL MHA方案
序号 1 软件环境
虚拟机: VMware? Workstation-10.0.1 build-1379776-Win 操作系统: Window 2008
虚拟机系统环境 描述 OS硬盘空间 内存 网卡 MySQL 操作系统 拓扑结构
说明 30G 8G 1 5.6.24 Linux Centos 备注 Ver 14.14 Distrib 5.6.24, for linux-glibc2.5 (x86_64) centos-release-7-1.1503.el7.centos.2.8.x86_64 版本 V1.0.0.0 日期 2015/05/20 作者 黄种龙 描述 CENTOS7环境下MySQL安装和MHA高可用性方案的配置。
一、 安装MySQL
参见以上的拓扑图,IP 172.16.0.202的主机和 IP 172.16.0.203的主机都才用以下的方式安装MYSQL数据库。
(一) 检查安装先决条件 1、依赖库的安装
MySql的linux版本依赖于libaio库,必须先检查一下系统是否已经安装了此库。 # yum search libaio 若没有安装,必须先安装 # yum install libaio
推荐安装一个epel源
# yum install epel-release-7-5.noarch
2、防火墙设置
CENTOS7系统,模式是开启SELINUX设置的,所以先检查SELINUX的设置,若开启则必须禁用。
#sudo vim /etc/selinux/config
把SELINUX=enforcing改为SELINUX=disabled
必须设置CentOs操作系统的防火墙,以便让相应的端口数据例如可以通过。CentOS 7.0默
认使用的是firewall作为防火墙,本文档只是简单的禁用此防火墙,需要生产环境级的安全,请具体参考防火墙设置手册。
#systemctl start firewalld.service#启动firewall #systemctl stop firewalld.service#停止firewall
#systemctl disable firewalld.service#禁止firewall开机启动 (二)安装和配置MySql Binaries包 【创建用户和目录】 #groupadd mysql
#useradd -r -g mysql mysql #cd /usr/local 【解压Binaries包】
#sudo tar zxvf mysql-advanced-5.6.24-linux-glibc2.5-x86_64.tar.gz #sudo ln -s mysql-advanced-5.6.24-linux-glibc2.5-x86_64 mysql #export PATH=$PATH:/usr/local/mysql/bin #source /etc/profile 【配置my.cnf】
需要特别注意,在以下的my.cnf文件中server-id 的值必须不一样。例如IP 172.16.0.202的centos主机上的/etc/my.cnf文件的server-id分别为:server-id=1、server-id=2、server-id=3,则IP 172.16.0.203的centos主机上的/etc/my.cnf文件的server-id可以为server-id=4、
server-id=5、server-id=6
#cd /etc
#sudo touch my.cnf #sudo vim my.cnf 输入如下的配置:
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin log = /home/mysql/mydata/log/mysqld_multi.log [mysqld1]
socket = /home/mysql/mydata/data1/socket/mysqld.sock port = 3306
pid-file = /home/mysql/mydata/data1/mysqld.pid datadir = /home/mysql/mydata/data1
log_bin=/home/mysql/mydata/data1/binlog/mysql-bin server-id = 1
[mysqld2]
socket = /home/mysql/mydata/data2/socket/mysqld.sock port = 3307
pid-file = /home/mysql/mydata/data2/mysqld.pid datadir = /home/mysql/mydata/data2
log_bin=/home/mysql/mydata/data2/binlog/mysql-bin server-id = 2
relay_log = /home/mysql/mydata/data2/relay_log/mysql-relay-bin log_slave_updates = 1 read_only = 1
[mysqld3]
socket = /home/mysql/mydata/data3/socket/mysqld.sock port = 3308
pid-file = /home/mysql/mydata/data3/mysqld.pid datadir = /home/mysql/mydata/data3
log_bin=/home/mysql/mydata/data3/binlog/mysql-bin server-id = 3
relay_log = /home/mysql/mydata/data3/relay_log/mysql-relay-bin log_slave_updates = 1 read_only = 1
【创建数据目录】 cd /home mkdir mysql cd mysql mkdir mydata cd mydata
mkdir data1 cd data1 mkdir socket mkdir binlog
cd /home/mysql/mydata
mkdir data2 cd data2 mkdir socket mkdir binlog
mkdir relay_log
cd /home/mysql/mydata
mkdir data3 cd data3
mkdir socket mkdir binlog mkdir relay_log
cd /home/mysql/mydata mkdir log
cd /home/mysql/ chown -R mysql . chgrp -R mysql .
【初始化数据库】
/usr/local/mysql/scripts/mysql_install_db
--basedir=/usr/local/mysql --datadir=/home/mysql/mydata/data1 /usr/local/mysql/scripts/mysql_install_db
--basedir=/usr/local/mysql --datadir=/home/mysql/mydata/data2
--user=mysql
--user=mysql
/usr/local/mysql/scripts/mysql_install_db
--basedir=/usr/local/mysql --datadir=/home/mysql/mydata/data3
【启动数据库】
# mysqld_multi --defaults-extra-file=/etc/my.cnf start 1,2,3 启动后,可以使用如下查看服务运行情况:
#mysqld_multi --defaults-extra-file=/etc/my.cnf report
--user=mysql
到此,MYSQL数据库已经在172.16.0.202和172.16.0.203的机器上安装完毕。
(三)配置Mysql服务的复制 【master库配置】
1、进入数据库
在172.16.0.202上:
$ mysql -uroot -P3306 -p -h127.0.0.1
2、创建复制账号
进入数据库中,执行如下,创建复制账号: $ grant replication slave, replication client on *.* to repl@'172.16.0.%' identified by 'repl';
3、修改远程访问权限
update user set password=PASSWORD('XXXXX') where user='root'; update user set host='%' where host='localhost'; flush privileges;
【slave库配置】
1、步骤一:
在172.16.0.202上:
$ mysql -uroot -P3307 -p -h127.0.0.1 $change master to master_host='172.16.0.202', MASTER_PORT=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001',
master_log_pos=0; $start slave;
可以查看复制状态: $show slave status\\G;
2、步骤二:
在172.16.0.202上:
$ mysql -uroot -P3308 -p -h127.0.0.1 $change master to master_host='172.16.0.202', MASTER_PORT=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0; $start slave; 3、步骤三:
在172.16.0.203上:
$ mysql -uroot -P3306 -p -h127.0.0.1 $change master to master_host='172.16.0.202', MASTER_PORT=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0; $start slave; 4、步骤四:
在172.16.0.203上:
$ mysql -uroot -P3307 -p -h127.0.0.1 $change master to master_host='172.16.0.202', MASTER_PORT=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0; $start slave; 5、步骤五:
在172.16.0.203上:
$ mysql -uroot -P3308 -p -h127.0.0.1 $change master to master_host='172.16.0.202', MASTER_PORT=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0; $start slave; 【查看复制进程】
在172.16.0.202上:
$ mysql -uroot -P3307 -p -h127.0.0.1
配置完成以上步骤后,可以使用如下命令查看复制进程:
【安装半同步插件】 1、在master上安装插件 在172.16.0.202上:
$mysql -uroot -P3306 -p -h127.0.0.1
$ install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
继续执行如下:
$ set global rpl_semi_sync_master_enabled = 1; $ set global rpl_semi_sync_master_timeout = 1000;
2、在slave上安装插件 在
172.16.0.202:3307 172.16.0.202:3308 172.16.0.203:3306 172.16.0.203:3307 172.16.0.203:3308
的mysql数据实例上都执行如下步骤:
install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
show variables like \(如果看到新增的semi变量的话证明安装模块成功) set global rpl_semi_sync_slave_enabled = 1; stop slave; start slave;
至此mysql的复制功能配置完毕。
最后可以把常用的配置参数写入my.cnf配置文件中: 在172.16.0.202的/etc/my.cnf配置文件补充如下: [mysqld1]
rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000
[mysqld2]
rpl_semi_sync_slave_enabled=1 [mysqld3]
rpl_semi_sync_slave_enabled=1
在172.16.0.203的/etc/my.cnf配置文件补充如下: [mysqld1]
rpl_semi_sync_slave_enabled=1 [mysqld2]
rpl_semi_sync_slave_enabled=1 [mysqld3]
rpl_semi_sync_slave_enabled=1
二、 安装MHA 1、安装依赖
如上图所示在MHA NODE节点172.16.0.202、172.16.0.203上执行 #yum install perl-DBD-MySQL
在manager节点172.16.0.201上执行: # yum install perl-DBD-MySQL # yum install perl-Config-Tiny # yum install perl-Log-Dispatch
# yum install perl-Parallel-ForkManager
# yum install -y rrdtool perl-rrdtool rrdtool-devel perl-Params-Validate 2、 安装RPM包
在MHA Manger主机172.16.201的机器上执行: #rpm -ivh
mha4mysql-manager-0.56-0.el6.noarch.rpm mha4mysql-node-0.56-0.el6.noarch.rpm
分别在两台MHA NODE主机172.16.0.202和172.16.0.203的机器上执行 #rpm –ivh mha4mysql-node-0.56-0.el6.noarch
3、 配置MHA Manager (主机IP:172.16.0.201) 在MHA Manager主机172.16.0.201上执行: #mkdir -p /etc/masterha/
#mkdir -p /var/log/masterha/app1/
将下面的内容写进/etc/masterha/app1.cnf:
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
user=root #数据库账号MySQL数据库管理账户及密码,因为要执行一些必要的管理命令,比如:Stop Slave、Change Master、#Reset Slave,所以该账户应该为root,这也是缺省值。 password=xxxxx #数据库账号密码 ssh_user=root repl_user=repl repl_password=repl ping_interval=1 shutdown_script=\
master_ip_online_change_script=\report_script=\
[server1]
hostname=172.16.0.202 port=3306
candidate_master=1
master_binlog_dir=\
[server2]
hostname=172.16.0.203 port=3306
candidate_master=1
master_binlog_dir=\
[server3]
hostname=172.16.0.202 port=3307
[server4]
hostname=172.16.0.202 port=3308
[server5]
hostname=172.16.0.203 port=3307
[server6]
hostname=172.16.0.203 port=3308
4、 设置SSH互信
4.1、修改sshd_config配置
在172.16.0.201、172.16.0.202、172.16.0.203三台机器上分别执行更改SSH的配置文件 /etc/ssh/sshd_config的操作:
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥私钥配对认证方式 AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径 重启SSH服务: service sshd restart 4.2、执行SSH秘钥创建
4.2.1、在MHA MANAGER 172.16.0.201主机上执行 #ssh-keygen -t rsa
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.201
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.202 #ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.203
完成以上操作后,可以执行以下命令,检查SSH无密码登陆是否配置好了。
4.2.2、在MHA NODE 172.16.0.202主机上执行
#ssh-keygen -t rsa
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.201 #ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.202
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.203 4.2.3、在MHA NODE 172.16.0.203主机上执行
#ssh-keygen -t rsa
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.201 #ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.202 #ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.0.203 4.3、检查三台主机间的SSH互信设置
在MHA Manager主机172.16.0.201上执行
#masterha_check_ssh --conf=/etc/masterha/app1.cnf
5、 启动MHA Manager服务
注意小节的操作,都需要在MHA Manager主机172.16.0.201上进行。 启动之前,可以先检查下MYSQL的复制状态,执行:
# masterha_check_repl --conf=/etc/masterha/app1.cnf
(注意:以上的截图不全,仅供参考)
启动MHA Manager服务:
#nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log 2>&1 &
启动服务之后,可以执行服务状态检查:
#masterha_check_status --conf=/etc/masterha/app1.cnf
6、 测试故障切换
首先,新开一个terminal连接到MHA Manager主机172.16.0.201上面,执行: #tail -f /var/log/masterha/app1/manager.log
从这个terminal可以查看MHA Manager日志的实时刷新。
这个时候使用 #kill -9 进程号
来强制关掉My Sql 172.16.0.202:3306上的Master数据库实例。 通过运行
# /usr/local/mysql/bin/mysqld_multi --defaults-extra-file=/etc/my.cnf report 可以看到172.16.0.202:3306的Msql Master已经不运行了。
在本小节开头打开的那个MHA Manager主机172.16.0.201的terminal可以看到:
这个时候通过登录172.16.0.203:3306的Mysql实例,可以看到:
管理节点查看到的日志(failover之后,mha manager进程会自动关闭)。
所以,注意:如果MHA已经进行过一次failover,MHA进程就会自动退出。
如果这个时候,想试验STOP掉172.16.0.203:3306看能不能再次自动故障转移MASTER到 172.16.0.202:3306上。
必须首先启动172.16.0.202:3306实例。 接着执行
#mysql -uroot -p -P3306 -h172.16.0.202 登录172.16.0.202:3306的MySQL实例 执行 #change master to master_host='172.16.0.203', MASTER_PORT=3306, master_user='repl', master_password='repl', master_log_file='mysql-bin.000001', master_log_pos=0; start slave
然后在MHA Manager主机172.16.0.201上执行:
#rm /var/log/masterha/app1/app1.failover.complete 重启mha manager:
#masterha_manager --conf=/etc/masterha/app1.cnf
这样。如果172.16.0.203:3306挂掉了,将自动故障转移MASTER回到172.16.0.202:3306的Mysql实例上。 三、 MySQL代理中间件 1、 奇虎Atlas
在IP172.16.0.201的机器上执行以下的操作。
1.1下载安装:
#wget
https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
rpm -iv Atlas-2.2.1.el6.x86_64.rpm 1.2配置
Atlas的安装目录是 /usr/local/mysql-proxy,进入安装目录下conf目录,编辑test.cnf文件,很多选项用默认值即可。
1)主库的ip和端口,可设置多项,用逗号分隔 proxy-backend-addresses = 192.168.29.128:3306
2)(非必备,根据实际情况配置)从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔。如果想让主库也能分担读请求的话,只需要将主库信息加入到下面的配置项中。
proxy-read-only-backend-addresses = 192.168.29.129:3306
3)(必备,根据实际情况配置)用户名与其对应的加密过的MySQL密码,密码使用安装路径 /bin目录下的加密程序encrypt加密,用户名与密码之间用冒号分隔。主从数据库上需要先创建该用户并设置密码(用户名和密码在主从数据库上要一致)。 加密密码:
./encrypt 123456 配置密码
pwds = root:/iZxz+0GRoA= 4)(必备,默认值即可)Atlas的运行方式,设为true时为守护进程方式,设为false时为前台方式,一般开发调试时设为false,线上运行时设为true daemon = true 5)(必备,默认值即可)Atlas监听的工作接口IP和端口,proxy-address = 0.0.0.0:1234代表客户端应该使用1234这个端口连接Atlas来发送SQL请求。 proxy-address = 0.0.0.0:1234 6)(必备,默认值即可)Atlas监听的管理接口IP和端口,admin-address = 0.0.0.0:2345代表DBA应该使用2345这个端口连接Atlas来执行运维管理操作。 admin-address = 0.0.0.0:2345
7)(可选项,可不设置)默认字符集,若不设置该项,则默认字符集为latin1 charset = utf8
8)(必备,根据实际情况配置)SQL日志的开关,可设置为OFF、ON、REALTIME,OFF代表不记录SQL日志,ON代表记录SQL日志,该模式下日志刷新是基于缓冲区的,当日志填满缓冲区后,才将日志信息刷到磁盘。REALTIME用于调试,代表记录SQL日志且实时写入磁盘,默认为OFF sql-log = REALTIME
日志路径在 /usr/local/mysql-proxy/log 下
我们的测试配置如下截图所示:
1.3启动Atlas
进入/usr/local/mysql-proxy/bin目录,执行下面的命令启动、重启或停止Atlas。 ./mysql-proxyd test start,启动Atlas。 ./mysql-proxyd test restart,重启Atlas。 ./mysql-proxyd test stop,停止Atlas。 启动:
# ./mysql-proxyd test start
# ps -ef | grep mysql-proxy
注意:
(1). 运行文件是:mysql-proxyd(不是mysql-proxy)。
(2). test是conf目录下配置文件的名字,也是配置文件里instance项的名字,三者需要统一。
(3). 可以使用ps -ef | grep mysql-proxy查看Atlas是否已经启动或停止。
客户端使用刚才配置的Atlas监听端口连接到Atlas代理服务
[root@Luxh-03 ~]# mysql -h192.168.29.130 -P1234 -uroot -p123456
执行sql进行测试,可以通过日志看到写操作都在Master,读操作都连接到Slave了
1.4连接Atlas代理
客户端使用刚才配置的Atlas监听端口连接到Atlas代理服务
以下的演示在主机172.16.0.201上执行:
连接到以上配置文件设置的管理端口2345 #mysql -h127.0.0.1 -P2345 -uuser –ppwd
执行select * from help;
可以查看Atlas管理端提供的管理功能
1.5 进行读写分离测试。
注意,172.16.0.201主机上,并没有运行的MYSQL实例,通过 #px-aux|grep –I mysqld
可以查看本机并没有mysql实例在运行。
# mysql -h172.16.0.201 -P1234 -uroot –poopay
执行sql进行测试,可以通过日志看到写操作都在Master,读操作都连接到Slave了 测试如下:
如上面的1.2小节中的配置:
172.16.0.203:3306的MYSQL实例日志只有insert或者update的如下所示:
172.16.0.203:3306的MYSQL实例日志只有select的如下所示:
1.6 使用mysqlslap工具进行性能测试 执行一次测试,100个并发。
执行一次测试,分别500和1000个并发,执行1000次总查询:
下面进行使用Atlas代理的进程的性能与不使用代码接连MASTER数据库的性能比较。
如下使用代理:
不使用代理:
四、 使用JAVA的进行实时可用性测试
(一)、设计说明
1、 首先使用SELECT COUNT(1) FROM 表名 读取Master MySQL数据库中的现有的数据总
条数。假设这个值的变量名称为TOTAL_COUNT 2、 设计一个类用于模拟,每隔N秒向Atlas代理提交M条的数据。此类implements Runnable。
此时TOTAL_COUNT=TOTAL_COUNT+M 3、 设计一个类用于模拟,每隔N秒从Atlas代理执行SELECT COUNT(1) FROM 表名。 假
设得到这个值为 SELECT_COUNT。此类implements Runnable。 4、 SELECT_COUNT=TOTAL_COUNT 则读取正确,反之则读取失败。 (二)、测试环境的虚拟机硬件配置 CPU CPU核心数 内存 Mysql 配置 Intel(R) Xeon(R) CPU E5-2603 v2 @ 1.80GHz 1 4G set global slave_parallel_workers=20; set global sync_binlog=1; set global sync_master_info=1; set global sync_relay_log=1; set global sync_relay_log_info=1; set global wait_timeout=31536000 set global interactive_timeout=31536000 注意,设置global slave_parallel_workers的参数会严重影响测试结果。应该根据机器的具体配置来做优化。 (三)、测试结果 测试的条件 每线程插入频率 1秒执行一次插入 每次插入的数据条数 1次提交10条数据 每线程读取频率 1秒执行一次读取 测试的结果 总计提交插入数据条数(A) 总计执行的读取测试次数(B) 正确读取次数(C) 错误读取次数(D) 测试时间 10分钟 错误率D/B 0.0043 并发插入的线程数 2个线程 并发读取的线程数 100个线程 2070 6886 6856 30 测试的条件 每线程插入频率 1秒执行一次插入 每次插入的数据条数 1次提交10条数据 每线程读取频率 1秒执行一次读取 测试的结果 总计提交插入数据条数(A) 总计执行的读取测试次数(B) 正确读取次数(C) 错误读取次数(D) 197 测试时间 10分钟 错误率D/B 0.0274 并发插入的线程数 10个线程 并发读取的线程数 100个线程 8550 7165 6968 测试的条件 每线程插入频率 1秒执行一次插入 每次插入的数据条数 1次提交10条数据 每线程读取频率 1秒执行一次读取 测试的结果 总计提交插入数据条数(A) 6460 总计执行的读取测试次数(B) 7183 正确读取次数(C) 7025 错误读取次数(D) 158 测试时间 10分钟 错误率D/B 0.0219 并发插入的线程数 10个线程 并发读取的线程数 200个线程 Master数据库上的主机执行top的结果:
测试的项目代码
Constants.java
Insert.java
Select.javaMain.java
正在阅读:
模糊语12-26
《设计素描》课程改革与建设总结报告09-02
我最喜欢游泳作文450字07-09
第三次作业:逻辑综合练习题-107-24
市场营销之葡萄酒案例(1)05-26
唐诗排版设置(Word版)06-20
2015年江苏省常州市会计继续教育答案成本性态分析11-18
2009年高考理综(全国卷1)200904-23
20XX小班区域活动计划范文06-13
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 配置
- CENTOS7
- 环境
- 方案
- MYSQL
- MHA
- 营运驾驶员安全知识问答试题
- 仪器分析练习题
- 中国几个典型城市的BRT应用情况分析
- 土方工程量计算 - 图文
- 管理会计复习题两套及知识点整理
- 大班科学声音是怎样产生的
- 南京大学物理化学选择题答案完整版讲解
- 施工监理服务收费基价表(详细)
- 黄氏族谱
- 《企事业单位评聘专业技术职务若干问题暂行规定》有关具体问题的
- Low-carbon life
- 2012届新人教版高考英语复习学案必修2 Unit 5 Music
- 《概率论与数理统计》练习题1
- 食品中总灰分含量的测定
- 2010年5月心理咨询师二级考试真题及答案(标准答案)
- 毒理学习题
- 谈谈初中古诗文有效教学
- 高中地理复习知识点 必修1 第二单元 第三节水圈与水循环
- 房地产营销策划--太湖山水湖滨别墅经典策划案例
- 小学五年级上册语文第三单元作文 doc