前言:
而今大家对“centos 互信”大概比较关心,姐妹们都想要知道一些“centos 互信”的相关知识。那么小编也在网络上网罗了一些有关“centos 互信””的相关文章,希望兄弟们能喜欢,咱们一起来了解一下吧!一.MHA简介
MHA(Master High Availability)是MySQL高可用方面的一个相对成熟的解决方案,在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且 在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。
1. MHA里有两个重要的角色:
MHA Node(数据节点):MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。
Node提供的工具包主要工具:
1
save_binary_logs
保存和复制master的二进制日志
2
apply_diff_relay_logs
识别差异的中继日志事件并将其差异的事件应用于其他的slave
3
filter_mysqlbinlog
去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
4
purge_relay_logs
清除中继日志(不会阻塞SQL线程)
MHA Manager(管理节点):MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
Manager提供的工具包主要工具:
1
masterha_check_ssh
检查MHA的SSH配置状况
2
masterha_check_repl
检查MySQL复制状况
3
masterha_manger
启动MHA
4
masterha_check_status
检测当前MHA运行状态
5
masterha_master_monitor
检测master是否宕机
6
masterha_master_switch
控制故障转移(自动或者手动)
7
masterha_conf_host
添加或删除配置的server信息
注意:为了尽可能地减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL的半同步复制(不是必须)。
2. MAH工作原理
1) 从宕机崩溃的Master保存二进制日志事件(binlog event);
2) 识别含有最新更新的Slave;
3) 应用差异的中继日志(relay log)到其他Slave;
4) 应用从Master保存的二进制日志事件;
5) 提升一个Slave为新的Master;
6) 使其他的Slave连接新的Master进行复制;
二.软件准备
在进行搭建MHA之前,需要提前准备好如下文件
VM: VMware-workstation-full-10.0.1-1379776.exe
CentOS: CentOS-7-x86_64-Minimal-2009.iso
MySQL 8.0: mysql-community-client-8.0.31-1.el7.x86_64.rpm
mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm
mysql-community-common-8.0.31-1.el7.x86_64.rpm
mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm
mysql-community-libs-8.0.31-1.el7.x86_64.rpm
mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm
mysql-community-server-8.0.31-1.el7.x86_64.rpm
MHA: mha4mysql-manager-0.56.tar.gz
mha4mysql-node-0.56.tar.gz
三.MHA环境规划
首先创建4个已经安装好CentOS系统的虚拟机,其用途如下表所示:
虚拟机角色
IP
安装服务
Master
192.168.246.129
MySQL + MHA Node
Slave -- 备用 Master
192.168.246.128
MySQL + MHA Node
Slave
192.168.246.131
MySQL + MHA Node
MHA Manager
192.168.246.130
MHA Node+ MHA Manager
四.MHA环境准备
1. 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
2. 开启端口3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
3. 依赖包安装
全部4台服务器均需要安装相关的依赖包,如果已经安装过,请忽略。
Yum install perl-DBD-MySQL perl-Config-Tiny perl-log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes perl-Config-IniFiles ncftp perl-Params-Validate perl-CPAN perl-LWP-Authen-Negotiate.noarch perl-devel perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
4. SSH 互信
全部4台服务器都要相互做密钥登录
1) 192.168.246.129上执行:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.128
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.130
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.131
2) 192.168.246.128上执行:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.129
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.130
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.131
3) 192.168.246.130上执行:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.128
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.129
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.131
4) 192.168.246.131上执行:
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.128
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.129
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.246.130
注:在/.ssh文件夹下,会生成id_rsa(私钥),id_rsa.pub(公钥)
互信验证:
在每一台服务器上,都要对其它三台服务器,执行如下命令:
ssh ip地址 ls
如果均可以顺利ls到对方主机文件,则证明配置成功。
五.配置MySQL主从复制
为了尽可能的减少主库硬件损坏宕机造成的数据丢失,在这里,配置成MySQL的半同步复制。
1. MySQL安装
所有3台MySQL服务器执行如下进行Server的安装:
rpm -ivh mysql-community-common-8.0.31-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.31-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.31-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.31-1.el7.x86_64.rpm
rpm -ivh mysql-community-icu-data-files-8.0.31-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.31-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.31-1.el7.x86_64.rpm
2. MySQL启动
systemctl start mysqld
3. 修改密码
首次安装,登录的密码在相关的mysqld.log文件中。
查询初始密码:
grep 'temporary password' /var/log/mysqld.log
登录并修改密码
Alter user ‘root’@’localhost’ identified by ‘Ygzlpaul*2022’;
4. 半同步插件安装
需要在每一台MySQL服务器上执行如下命令安装半同步插件,这里是三台服务器:
install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
可以执行如下命令检查Plugin是否已经安装:
Show plugins;
5. My.cnf配置
三台MySQL服务器的my.cnf配置如下:
192.168.246.129(master):
192.168.246.128:
192.168.246.131:
在修改之后,记得重启MySQL服务
systemctl restart mysqld
6. 创建用户
192.168.246.129(master):
创建复制用户:
create user 'rpl'@'%' identified by 'Ygzlpaul*2022';
grant replication slave on *.* to 'rpl'@'%';
创建监控用户:
create user 'root'@'%' identified by 'Ygzlpaul*2022';
grant all privileges on *.* to 'root'@'%';
flush privileges;
192.168.246.128:
创建复制用户:
create user 'rpl'@'%' identified by 'Ygzlpaul*2022';
grant replication slave on *.* to 'rpl'@'%';
创建监控用户:
create user 'root'@'%' identified by 'Ygzlpaul*2022';
grant all privileges on *.* to 'root'@'%';
flush privileges;
192.168.246.131:
创建监控用户:
create user 'root'@'%' identified by 'Ygzlpaul*2022';
grant all privileges on *.* to 'root'@'%';
flush privileges;
注:监控用户是给MHA Manager使用的
7. 复制搭建
在192.168.246.129(master)上:
Show master status;
在192.168.246.128上:
mysql> stop slave;
mysql> change master to master_host='192.168.246.129', master_port=3306, master_user='rpl', master_password='Ygzlpaul*2022', master_log_file='mysql-bin1.000009', master_log_pos=157;
mysql>start slave ;
在192.168.246.131上:
mysql> stop slave;
mysql> change master to master_host='192.168.246.129', master_port=3306, master_user='rpl', master_password='Ygzlpaul*2022', master_log_file='mysql-bin1.000009', master_log_pos=157;
mysql>start slave ;
可以在slave上,分别执行如下命令进行检测,是否主从复制正常
mysql> SHOW SLAVE STATUS;
六.MHA配置
1. MHA Node 安装
依次对所有的4台服务器均执行如下命令进行安装:
tar zxf mha4mysql-node-0.56.tar.gz
cd mha4mysql-node-0.56
perl Makefile.PL
Make && make install
2. MHA Manager安装
仅需要在需要的管理服务器上进行安装,这里是 192.168.246.130
tar zxf mha4mysql-manager-0.56.tar.gz
cd mha4mysql-manager-0.56
perl Makefile.PL
Make && make install
3. 编辑MHA 配置文件
mkdir /etc/masterha
cp /mha4mysql-manager-0.56/samples/conf/* /etc/masterha
vi /etc/masterha/app1.cnf
进行修改配置文件内容如下:
参数解释:
manager_workdir=/masterha/app1 # 设置manager的工作目录
manager_log=/masterha/app1/manager.log # 设置manager的日志位置
user=root # 设置监控用户
password=Ygzlpaul*2022 # 设置监控用户的密码
ssh_user=root # 设置ssh连接用户
repl_user=rpl # 设置主从复制用户
repl_password=Ygzlpaul*2022 # 设置主从复制用户的密码
ping_interval=1 # 设置监控主库,发送ping包的时间间隔,默认是3秒
candidate_master=1 #设置为候选master,发生主从切换以后,无论此服务器的日志是否最新,都将强行提升为master
no_master=1 # 永不提升为master
4. SSH有效性验证
masterha_check_ssh --conf=/etc/masterha/app1.cnf
只有当出现如上图所示的All SSH connection tests passed successfully. 信息才表示通过SSH验证。否则,请依照提示信息,修复SSH未互信成功的服务器。
5. 复制有效性验证
前提:所有的MySQL服务必须全部启动
masterha_check_repl --conf=/etc/masterha/app1.cnf
验证成功的话会自动识别出所有服务器和主从状况,请见上图中的3台MySQL服务器的相关信息。
最后的显示信息MySQL Replication Health is OK.表明验证成功。
6. 启动MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf > /tmp/mha_manager.log </dev/null 2>&1 &
注:在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。
7. 状态检查
masterha_check_status --conf=/etc/masterha/app1.cnf
如图所示,证明正常启动,也识别出来了master
8. 故障转移验证
让我们来模拟一下master(192.168.246.129)宕机,查看备用master(192.168.246.128)是否会成为新的master。
192.168.246.129上,执行:systemctl stop mysqld
192.168.246.131上,我们登录数据库,查看Slave状态:
发现,新Master已经成为备用master(192.168.246.128)
再查看MHA日志
cat /masterha/app1/manager.log
日志表明,备用master(192.168.246.128)已经被选为new master.
至此,MHA成功搭建。
七.MHA配置过程中的一些错误解决
注意:在以下错误中,我仅仅列出错误的重点关键信息。
1. 执行:masterha_check_repl --conf=/etc/masterha/app1.cnf 报告Error:
... perhaps the DBD::mysql perl module hasn't been fully installed ...
解决办法:系统没有按安装DBI组件。DBI(Database Interface)是perl连接数据库的接口
yum install perl-DBI perl-DBD-MySQL -y
2. 执行:masterha_check_repl --conf=/etc/masterha/app1.cnf 报告Error:
Can't locate MHA/BinlogManager.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/apply_diff_relay_logs line 24.
解决办法:在每个节点上设置软链接:ln -s /usr/lib/perl5/vendor_perl/MHA /usr/lib64/perl5/vendor_perl/
3. 执行:masterha_check_repl --conf=/etc/masterha/app1.cnf 报告Error:
node version on 192.168.246.131 not found! Maybe MHA Node package is not installed?
解决办法:请检查是否MHA Node没有安装,安装即可。
4. 执行:masterha_check_repl --conf=/etc/masterha/app1.cnf 报告Error:
Can’t exec “mysqlbinlog”
解决办法:ln -s /usr/local/mysql/bin/* /usr/local/bin/
如有不妥之处,请大家指正。
标签: #centos 互信 #centos安装cpan #centosmha配置