MySQL数据库MHA实现

前提:
关闭所有机器的防火墙
关闭selinux

1、主库54 从库52/53

三台服务器环境mysql8.0.25
配置文件:
cat > /fan/etc/mysql80/my.cnf <<EOF
[mysqld]
server_id=54
binlog_format=row
datadir=/fan/data/mysql80/
basedir=/fan/softwares/mysql80/
port=3308
socket=/tmp/mysql3308.sock
mysqlx_port=33080
mysqlx_socket=/tmp/mysqlx33080.sock
log-bin=/fan/logs/mysql80/binlog/binary-log #配置MySQL数据库二进制文件存放位置

gtid-mode=on					#开启gtid
enforce-gtid-consistency=true	#开启gtid必须开启此参数
log-slave-updates=1 			#指定从库在复制源过程中记录到自己的二进制日志中

EOF

2、初始化数据库(3台数据库同样的操作)
配置数据库数据、二进制日志和日志存放位置(都可以自定义目录)

pkill mysqld
install -o mysql -g  mysql -d /fan/logs/mysql80/{redolog,binlog,doublewrite,errlog,undo}
rm -rf /fan/logs/mysql80/{redolog,binlog,doublewrite,errlog,undo}/*
rm -rf /fan/data/mysql80/*
ll /fan/data/mysql80/


初始化数据库
/fan/software/mysql80/bin/mysqld  --defaults-file=/fan/etc/mysql80/my.cnf --initialize-insecure --user=mysql --basedir=/fan/software/mysql80  --datadir=/fan/data/mysql80 


启动数据库
/fan/software/mysql80/bin/mysqld_safe  --defaults-file=/fan/etc/mysql80/my.cnf  >/dev/null  &

3、主库(54)操作

创建用户:
CREATE USER copy@'%' IDENTIFIED WITH mysql_native_password by '123';
GRANT REPLICATION SLAVE ON *.* to copy@'%';


从库(53、52)配置主从复制:

CHANGE REPLICATION SOURCE TO 
	SOURCE_HOST='192.168.15.54', #主库ip
	SOURCE_USER='copy',			 #复制用户
	SOURCE_PASSWORD='123',
	SOURCE_PORT=3308,
	SOURCE_AUTO_POSITION=1;		 #基于gtid的主从复制	
开启主从复制	
START REPLICA;

检查从库主从复制是否正常
SHOW SLAVE STATUS\G;
	 Slave_IO_Running: Yes  #两种为yes状态正常
	 Slave_SQL_Running: Yes

如果主从复制配置失败,请依次执行"STOP SLAVE;"和"RESET SLAVE ALL;"

4、部署MHA基础环境:

MHA下载:
	 https://github.com/yoshinorim/mha4mysql-manager/releases
	 
配置MHA关键程序软连接
ln -sv /fan/software/mysql80/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -sv /fan/software/mysql80/bin/mysql /usr/bin/mysql


配置54、53和52节点免密登录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q

ssh-copy-id 192.168.15.54
ssh-copy-id 192.168.15.53
ssh-copy-id 192.168.15.52

将密钥下发到集群的所有节点,集群公用同一套密钥
for host in `seq 52 54`;do scp -rp ~/.ssh/  192.168.15.${host}:~ ; done
 
免密登录验证:
略



MHA Manager(管理节点)部署在54虚拟机上(也可以选择其他机器)
curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y localinstall mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
yum -y localinstall mha4mysql-node-0.58-0.el7.centos.noarch.rpm

MHA Node(子节点)52和53虚拟机
yum -y localinstall mha4mysql-node-0.58-0.el7.centos.noarch.rpm


主库(54)操作
	mkdir /fan/mha/{etc,logs,data} -pv
	
	主库创建MHA用户
	CREATE USER mha IDENTIFIED WITH mysql_native_password BY '123';
	GRANT ALL PRIVILEGES ON *.* to mha;
	
	准备MHA配置文件
	cat > /fan/mha/etc/mha.cnf <<EOF
	[server default]
	manager_log=/fan/mha/logs/manager          #指定MHA的manager组件的日志存储路径。 
	manager_workdir=/fan/mha/data/mha_manager  #指定MHA的manager组件的工作目录。
	master_binlog_dir=/fan/logs/mysql80/binlog/#指定主库的二进制日志的存储路径。  
	user=mha       				               #指定管理mha的用户             
	password=123                               #指定管理mha的用户密码。
	ping_interval=2							   #指定ping的间隔时间,即指定心跳的间隔时间
	repl_password=123						   #指定复制密码
	repl_user=copy  						   #指定复制的密码
	ssh_user=root 							   #指定各节点互信的用户
								  
	[server1]                                   
	hostname=192.168.15.53
	port=3308     
	candidate_master=1						  #指定候选的主库

	[server2]            
	hostname=192.168.15.52
	port=3308

	[server3]
	hostname=192.168.15.54
	port=3308

	EOF		

	mha的基础环境互信检查
	masterha_check_ssh /fan/mha/etc/mha.cnf
	都为ok为正常
	
	mha的基础环境主从状态检查
	masterha_check_repl /fan/mha/etc/mha.cnf

	启动MHA环境
	nohup masterha_manager --conf=/fan/mha/etc/mha.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null > /fan/mha/logs/manager.log   2>&1 &

	查看MHA状态
	masterha_check_status --conf=/fan/mha/etc/mha.cnf
posted @ 2024-07-20 20:23  运维实习生  阅读(56)  评论(0)    收藏  举报