mysql高可用之MHA,一主多从

mac2024-01-26  31

一主多从 mysql高可用之MHA

MHA是一套相对成熟的MySQL高可用方案, 能做到在0~30s内自动完成数据库的故障切换操作, 在master服务器不宕机的情况下,基本能保证数据的一致性 简单理解: master slave1 slave2 当master down掉的时候,slave1顶替成为新的master,原来的master成为新的slave 一直都保持一主多从,也就是一直都是一个主,多个从 如果有多个主的话,会抢占资源

当密码找不到的时候 删除/var/log/mysql/*

新的环境 server1 server2 server3 server4

server1 ,server2,server3都安装好mysql环境

【1】下载mysql的rpm包

tar xf mysql-5.7.24-1.el7.x86_64.rpm-bundle.tar

安装需要的包 yum install -y mysql-community-client-5.7.24-1.el7.x86_64.rpm mysql-community-common-5.7.24-1.el7.x86_64.rpm mysql-community-libs-5.7.24-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm mysql-community-server-5.7.24-1.el7.x86_64.rpm 【2】 vim /etc/my.cnf

【server1】

server_id=1 gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON log_bin=binlog 【server2】

server_id=2 gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON log_bin=binlog 【server3】

server_id=3 gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON log_bin=binlog systemctl start mysqld

三个server进行安全初始化,修改新密码

cat /var/log/mysqld.log | grep password mysql_secure_installation

【3】【server1】进行授权

mysql> grant replication slave on . to repl@‘172.25.78.%’ identified by ‘Westos+001’; mysql> show master status; 【4】【server2】【server3】成为slave

mysql> CHANGE MASTER TO ##修改master信息 -> MASTER_HOST = '172.25.78.1', -> MASTER_USER = 'repl', -> MASTER_PASSWORD = 'Westos+001', -> MASTER_AUTO_POSITION = 1; mysql> start slave; mysql> show slave status\G ##可以看到master为server1的IP

##参数为yes Slave_IO_Running: Yes Slave_SQL_Running: Yes

【5】【server4】 配置server4环境

配置高可用(再开一台server4来做master, 因为高可用一般都是奇数个节点,因为如果master挂了, 其他从节点需要投票选举一个新的master, 偶数节点可能出现投票数相同) 下载MHA-7目录,并安装 1:cd MHA-7 --> ls yum install mha4mysql-manager-0.58-0.el7.centos.noarch.rpm perl-* mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y 2:配置免密访问(server4需要连接server1 2 3都免密码) ssh-keygen ##先生成密钥 ssh-copy-id server1 ssh-copy-id server2 #发送密钥 ssh-copy-id server3 3:【server1,server2,server3】 #其他3个节点只安装mha4mysql-node-0.58-0.el7.centos.noarch.rpm即可 cd MHA-7 -- > ls yum install -y mha4mysql-node-0.58-0.el7.centos.noarch.rpm

【6】:【server4】配置mha工作目录及配置文件 #参考https://www.cnblogs.com/gomysql/p/3675429.html

1: mkdir /etc/masterha vim /etc/masterha/app1.cnf [server default] manager_workdir=/etc/masterha manager_log=/var/log/masterha.log # manager 日志文件 master_binlog_dir=/etc/masterha password=Westos+001 #MySQL管理帐号和密码 user=root ping_interval=1 remote_workdir=/tmp repl_password=Westos+001 repl_user=repl # 复制帐号和密码 ssh_user=root # 系统ssh用户 [server1] hostname=172.25.78.1 port=3306 [server2] hostname=172.25.78.2 port=3306 candidate_master=1 check_repl_delay=0 [server3] hostname=172.25.78.3 port=3306 no_master=1 ##no_master表示这个节点不能作为master

2:检测ssh连接

masterha_check_ssh --conf=/etc/masterha/app1.cnf ##发现报错,server1 2 3互相之间不免密 3:拷贝server4上的密钥给server1 2 3

scp -r .ssh server1: scp -r .ssh server2: scp -r .ssh server3: masterha_check_ssh --conf=/etc/masterha/app1.cnf ##再检测ssh,成功 4:接下来检测复制功能

masterha_check_repl --conf=/etc/masterha/app1.cnf ##发现有报错,这是因为server4默认是用root远程连接数据库,但是在配置数据库是已经禁用了root的远程连接 【7】 1:【server1】在主库上授权用户

mysql> grant all on . to root@’%’ identified by ‘Westos+001’ ; 【8】【server4】再次检测复制功能

1:masterha_check_repl --conf=/etc/masterha/app1.cnf 再检测发现可能卡住了,因为之前半同步的配置写在了配置文件里,数据不同步就会卡住,在所有节点配置文件里删除半同步配置,只保留之前的 所有节点的配置文件必须一样!!!!(前面的内容其实都不需要做 只要保持三个server的my.cnf的内容与这里的一致就可以 三台做好gtid的复制就ok ) ##而且三个节点必须有数据(数据必须同步) 2: password=Westos+001 user=root 3:测试自动的manager能否开启 nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf – ignore_last_failover < /dev/null > /var/log/masterha.log 2>&1 &

【9】测试手动failover切换

为了手动测试,先把manager关闭,不关的话手动切不了,manager会自动切,manager是自动切换的工具 1:【server4】关闭manager masterha_stop --conf=/etc/masterha/app1.cnf 2:【server1】此时为master systemctl stop mysqld ##down掉master 开始手动切换,当master down掉的的时候,将server2转换为新的master

3:【server4】 masterha_master_switch --master_state=dead --conf=/etc/masterha/app1.cnf --dead_master_host=172.25.78.1 --dead_master_ip=172.25.78.1 --dead_master_port=3306 --new_master_host=172.25.78.2 --new_master_port=3306 ##中间都选yes 4:【server3】 show slave status\G ##可以看到它的master已经变成了server2 5:【server2】 show slave status\G ##是空的 6:【server1】开启mysqld,让此时的server1为slave, 因为server1 down掉以后,脱离了集群,所以要重新加入集群,成为server2的slave,并开启slave systemctl start mysqld mysql -uroot -pWestos+001 mysql> CHANGE MASTER TO -> MASTER_HOST = ‘172.25.78.2’, -> MASTER_USER = ‘repl’, -> MASTER_PASSWORD = ‘Westos+001’, -> MASTER_AUTO_POSITION = 1;

mysql> start slave; mysql> show slave status\G ##看到master为server2 至此完成了一次手动切换

7:这时会在/etc/masterha目录下生成一个app1.failover.complete文件,是来记录failover情况的, 再进行failover时必须先把这个文件删除,不然不会failover 【server4】 cd /etc/masterha/ – > ls rm -fr app1.failover.complete 【10】手动测试在线切换,即活切,刚才是master挂掉后切换

1:【server4】 活切: 让此时为slave的server1重新为master,而此时为master的【server2】再次为slave masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.78.1 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000 ##其他输入YES yes YES 2:【server3】 show slave status\G ##看到master为server1 3:【server1】 show slave status\G ##是空的 4:【server2】 show slave status\G ##看到master为server1 【11】 测试半自动failover

首先清理/etc/masterha/app1.failover.complete ##masterha manager自带守护进程 1:【server4】 nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/dev/null & > cat /var/log/masterha.log ##可以看到server1和server2自动切换

2:【server2】 show slave status\G ##是空的,为新的master 3:【server3】 show slave status\G ##master为server2 手动删除多余文件 rm -fr /etc/masterha/app1.failover.complete

4:【server1】查看 ps ax | grep mysql ##看到mysql的进程 kill -9 2566 ps ax | grep mysql ##再查看,发现mysql进程又开启了 手动关闭mysqld systemctl stop mysqld 5:【server4】 cat /var/log/masterha.log ##发现已经切换,同时manager进程退出,所以全自动需要脚本

6:【server1】把server1加回集群, ##因为此时server2为master,将server1添加到集群,成为slave

systemctl start mysqld mysql> CHANGE MASTER TO -> MASTER_HOST = '172.25.78.2', -> MASTER_USER = 'repl', -> MASTER_PASSWORD = 'Westos+001', -> MASTER_AUTO_POSITION = 1; mysql> start slave; mysql> show slave status\G

最新回复(0)