安装MySQL:(RPM包安装)
系统环境:
Linux version 2.6.32-642.el6.x86_64
mysql Ver 14.14 Distrib 5.6.40
mha-manager-0.56,mha-node-0.56
- 在CentOS6的yum源中没有mysql,在mysql的官网(https://downloads.mysql.com/archives/community/)中进行下载,相关的rpm包:
- mha软件包:
https://pan.baidu.com/s/1CT6sVEAShxAHaeGYeX2tNw
整体架构:
+ 角色分配:
+ 整体架构图:
安装部分:
MySQL安装:
- 先查看系统本身是否存在MySQL或者mariadb,若存在将其卸载(把一切与mysql有关的都删除):
rpm -qa | grep mysql && yum -y remove mysql
whereis mysql
find / -name mysql - 将下载好的压缩包解压:
[root@master mysql5.6]# rpm -ivh MySQL-* #安装 - 安装完成后,查看MySQL初始密码并进行修改:
使用此密码登入数据库进行密码修改:
mysql> set password=password('1234')
- 配置三个数据节点的主从关系:
修改 节点master 的数据库配置文件/etc/my.cnf,追加
server-id=205
log-bin=mysql-bin
log_slave_updates,同理修改其他两个节点的配置文件,注意server-id不可相同。保存后重启数据服务。
[root@master mysql5.6]# /etc/init.d/mysql restart
登入数据库,进行授权操作:
mysql> grant replication slave,reload,super on . to slave@'192.168.1.%' identified by '1234';
mysql> flush privileges;
对 节点slave1 进行操作,如master节点一样修改相应的参数文件后,重启mysql服务然后登入数据库。配置从属关系。
mysql > change master to master_host='192.168.1.205',master_port=3306,master_user='slave',master_password='1234',master_log_file='mysql-bin.000001',master_log_pos=423;
mysql> start slave;
mysql> show slave statusG;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> grant replication slave,reload,super on . to slave@'192.168.1.%' identified by '1234';
mysql> flush privileges;
对节点slave2 进行操作,同样修改参数文件后,登入数据库更改从属关系。
mysql > change master to master_host='192.168.1.205',master_port=3306,master_user='slave',master_password='1234',master_log_file='mysql-bin.000001',master_log_pos=423;
mysql> start slave;
mysql> show slave statusG;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
mysql> grant replication slave,reload,super on . to slave@'192.168.1.%' identified by '1234';
mysql> flush privileges;- 进行测试
登入master节点,执行 mysql> show slave hosts;看到其他两个从节点即成功。
- 进行测试
执行安装命令:
yum -y install mysql-server
等待安装完成后,查看相应的包是否安装成功
rpm -qa | grep mysql
启动MySQL:
systemctl start mysqld
查看MySQL是否正常启动:
netstat -antp | grep mysqld
由于MySQL安装启动后会自动生成临时密码,需要在日志中将此密码过滤出来:
grep 'temporary password' /var/log/mysqld.log
登录成功后,进行密码的修改
此时未修改临时密码需要先进行修改
mysql> set password='ABCabc123!@#';
开启远程控制:
MySQL默认未开启远程控制即只能自己访问别的主机无法访问此数据库,必须添加远程访问的用户。 - 配置三个数据节点的主从关系:
MHA安装与配置:
+ 首先配置四台主机之间免密登陆。
[root@master ~]# echo -e "
" |ssh-keygen -t dsa -N ""
[root@master ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.211
[root@master ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.202
[root@master ~]# ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.204
- 安装软件。
先创建repo,使用ftp给各节点推送安装包(方法有很多)。
vim ftp-mha.repo
[mha]
name=mha
baseurl=ftp://192.168.1.234/rpm/6mha
enabled=1
gpgcheck=0
给各个非manager节点安装mha4mysql-node。
并执行:
mysql> grant super,reload,replication client,select on . to manager@'192.168.1.%' identified by '1234';
mysql> grant create,insert,update,delete,drop on. to manager@'192.168.1.%';
mysql> flush privileges;
在manager节点上编辑配置文件:
vim /etc/masterha_default.cnf
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
remote_workdir=/var/log/masterha/app
ssh_user=root
user=manager
password=1234
repl_user=slave
repl_password=1234
ping_interval=1
master_ip_failover_script="/etc/masterha/master_ip_failover"
master_ip_online_change_script="/etc/masterha/master_ip_online_change"
mkdir /etc/masterha
vim /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
ssh_user=root
user=manager
password=1234
repl_user=slave
repl_password=1234
ping_interval=1
[server1]
hostname=192.168.1.211
candidate_master=1
master_binlog_dir=/data/mysql/
[server2]
hostname=192.168.1.202
candidate_master=1
master_binlog_dir=/data/mysql/
[server3]
hostname=192.168.1.205
/candidate_master=1/ 注释
master_binlog_dir=/data/mysql/
配置文件具体含义:
manager_workdir=/var/log/masterha/app1 管理目录
manager_log=/var/log/masterha/app1/manager.log 日志文件
remote_workdir=/var/log/masterha/app 远程工作目录
ssh_user=root 远程连接的用户
user=manager mysql授权连接用户
password=12345 密码
repl_user=slave AB复制用户
repl_password=123 密码
ping_interval=1 ping的时间间隔,1秒
[server1]
hostname=192.168.1.202 node的IP
candidate_master=1 当master宕机时,由当前node接替称为master
当多个[serverX]等设置此参数时,优先级由[serverX]配置的顺序决定。
master_binlog_dir=/data/mysql/
secondary_check_script mha强烈建议有两个或多个网络线路检查MySQL主服务器的可用性。
默认情况下,只有单一的路线 MHA Manager检查:从Manager to Master,但这是不可取的;
MHA实际上可以有两个或两个以上的检查路线通过调用外部脚本定义二次检查脚本参数。
master_ip_failover_script 在MySQL从服务器提升为新的主服务器时,调用此脚本,因此可以将vip信息写到此配置文件。
master_ip_online_change_script 使用masterha_master_switch命令手动切换MySQL主服务器时后会调用此脚本,
参数和master_ip_failover_script 类似,脚本可以互用 shutdown_script 此脚本(默认samples内的脚本)利用服务器的远程控制IDRAC等,使用ipmitool强制去关机,以避免fence设备重启主服务器,造成脑裂现象。
report_script 当新主服务器切换完成以后通过此脚本发送邮件报告。
master_ip_failover脚本:9zmp
https://pan.baidu.com/s/1Sg42PavduMDNzuWax01u5Q
master_ip_online_change脚本:qqqz
https://pan.baidu.com/s/1QW1WXz_Mw4i0w2KQnS_f9A
测试:
使用mha工具check检查ssh:
masterha_check_ssh --conf=/etc/masterha/app1.cnf 测试节点间互信
使用mha工具check检查repl:
注意:mysql_master 上需要绑定vip,否则工具卡在Checking the Status of the script.. OK。同时将slave节点置于read only
设置方法:ifconfig eth1:1 192.168.1.209 netmask 255.255.254.0 up。mysql> set global read_only=1;
masterha_check_repl --conf=/etc/masterha/app1.cnf 测试节点间主从复制
mha操作命令:
+ 启动manager:
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 & 启动并移除已死掉的节点
tail -0f /var/log/masterha/app1/manager.log 动态查看日志信息
+ 查看状态:
masterha_check_status --conf=/etc/masterha/app1.cnf
+ 关闭manager:
masterha_stop --conf=/etc/masterha/app1.cnf
+ master死机切换测试:
在mysql的master上,执行如下命令:echo c> /proc/sysrq-trigger
相关内容:
立即重启计算机 echo "b" > /proc/sysrq-trigger
立即关闭计算机 echo "o" > /proc/sysrq-trigger
导出内存分配的信息 echo "m" > proc/sysrq-trigger (可以用/var/log/message查看)Outputs memory statistics to the console
导出当前CPU寄存器信息和标志位的信息 echo "p" > proc/sysrq-trigger (outputs all flags and registers to the console)
导出线程状态信息 echo "t" > proc/sysrq-trigger (outputs a list of processes to the console)
故意让系统崩溃 echo "c" > proc/sysrq-trigger (crashes the system without first unmounting file systems or syncing disks attached to the system)
立即重新挂载所有的文件系统 echo "s" > proc/sysrq-trigger (attempts to sync disks attached to the system)
立即重新挂载所有的文件系统为只读 echo "u" > proc/sysrq-trigger (attempts to unmount and remount all file systems as read-only)
修复:
修复原master:
修复原master-192.168.1.205
说明:这时候192.168.1.205因为故障,导致和另两台节点无法进行mysqlAB通信,可能会导致数据不一致;
为了解决这个问题,最好是在现在的A上加一个读锁,做全库(单库)备份,把备份推送给192.168.1.205;
192.168.1.205做恢复操作,保证和其他两个节点的数据是一致的;
具体操作:
/etc/init.d/mysqld start
mysql
mysql> change master to master_host='192.168.1.211',master_port=3306,master_user='slave',master_password='1234',master_log_file='mysql-bin.000005',master_log_pos=120;
mysql> start slave;
mysql> show slave statusG;
mysql> grant replication slave,reload,super on *.* to slave@'192.168.1.%' identified by '1234';
mysql> flush privileges;
mysql> set global read_only=1;
在完成192.168.1.205的B的操作后,A解除读锁。
MHA操作:
1. 删除上一次失效的日志 # cd /var/log/masterha/app1/ # ls
app1.failover.complete manager.log
rm -f app1.failover.complete
2. 修改配置文件
vim /etc/masterha/app1.cnf
[server1]
hostname=192.168.1.201
candidate_master=1 <--注释
master_binlog_dir=/data/mysql
[server2]
hostname=192.168.1.202
candidate_master=1
master_binlog_dir=/data/mysql/
[server3]
hostname=192.168.1.205
candidate_master=1 <--打开注释
master_binlog_dir=/data/mysql/
3. 启动MHA
masterha_check_repl --conf=/etc/masterha/app1.cnf
nohup masterha_manager --conf=/etc/masterha/app1.cnf < /dev/null > /var/log/masterha/app1/manager.log &
masterha_check_status --conf=/etc/masterha/app1.cnf
现在的架构是:
192.168.1.201 master
192.168.1.202 slave
192.168.1.205 slave
说明:如果201再出现故障,202会接管,成为master。