&1"">&1"">
赞
踩
服务器 | IP地址 | bobe版本 | manager版本 |
---|---|---|---|
master(主) | 20.0.0.105 | mha4mysql-node-0.57 | |
slave(从/主备) | 20.0.0.106 | mha4mysql-node-0.57 | |
slave(从/主备) | 20.0.0.107 | mha4mysql-node-0.57 | |
manager | 20.0.0.183 | mha4mysql-node-0.57 | mha4mysql-manager-0.57 |
一、分别给主、从三单台服务器设置主机名,做地址映射
[root@localhost ~]# hostnamectl set-hostname mysql1
[root@localhost ~]# su
[root@mysql1 ~]# vi /etc/hosts
20.0.0.105 mysql1
20.0.0.106 mysql2
20.0.0.107 mysql3
(三台都要设置;名称对应地址)
二、修改master 20.0.0.105 服务器上主配置文件
[root@mysql1 ~]# vi /etc/my.cnf [client] port = 3306 #default-character-set=utf8 ####“#”号注释这一行掉 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 1 ####master 服务器id号,三台不能为相同;并且添加以下两行 log_bin = master-bin log-slave-updates = true ...........省略内容 [root@mysql1 ~]# systemctl restart mysqld
三、分别修改从服务器20.0.0.106 和 20.0.0.107 上的主配置文件
[root@mysql2 ~]# vi /etc/my.cnf [client] port = 3306 #default-character-set=utf8 ####注释掉这一行 socket = /usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket = /usr/local/mysql/mysql.sock [mysqld] user = mysql basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 character_set_server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket = /usr/local/mysql/mysql.sock server-id = 2 ####id号不能相同,并添加下面三行 log_bin = master-bin relay-log = relay-log-bin relay-log-index = slave-relay-bin.index ...........省略内容 [root@mysql1 ~]# systemctl restart mysqld
四、Mysql1、Mysql2、Mysql3 分别做两个软链接,给启动文件进行优化
[root@Mysql1 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@Mysql1 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
[root@Mysql2 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@Mysql2 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
[root@Mysql3 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@Mysql3 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
五、在所有数据库节点上授权两个用户,一个是从库同步使用,另外一个是 manager 使用。(主、从服务器上都做授权)
mysql> grant replication slave on *.* to 'myslave'@'20.0.0.%' identified by '123';
mysql> grant all privileges on *.* to 'mha'@'20.0.0.%' identified by 'manager';
mysql> flush privileges; ###刷新生效
六、在 mysql1 上查看二进制文件和同步点,去 mysql2 和 mysql3 分别做日志同步,查看I/O、SQL线程是否同步正常
Mysql1:
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000004 | 855 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql> change master to master_host='20.0.0.105',master_user='myslave',master_password='123',master_log_file='master-bin.000004',master_log_pos=885; mysql> start slave; mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 20.0.0.105 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000004 Read_Master_Log_Pos: 855 Relay_Log_File: mysql1-relay-bin.000003 Relay_Log_Pos: 321 Relay_Master_Log_File: master-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes
七、设置 mysql2 和 mysql3 为只读模式
mysql> set global read_only=1;
八、验证
在 master 上创建一个库的同时,两台slave 上也同时创建了,证明主从同步了
一、将四台服务器上的yum本地源换成官网源
mv /etc/yum.repos.d/backup/CentOS-Base.repo /etc/yum.repos.d/
mv /etc/yum.repos.d/local.repo /etc/yum.repos.d/backup/
二、安装 epel 源
[root@MHA-manager ~]# yum install epel-release --nogpgcheck -y
yum install -y perl-DBD-MySQL \
perl-Config-Tiny \
perl-Log-Dispatch \
perl-Parallel-ForkManager \
perl-ExtUtils-CBuilder \
perl-ExtUtils-MakeMaker \
perl-CPAN
三、上传 mha4mysql-node-0.57.tar.gz 安装包在四台服务器上并安装 node 组件(四台都要装)
[root@Mysql1 ~]# tar zxvf mha4mysql-node-0.57.tar.gz
[root@Mysql1 ~]# cd mha4mysql-node-0.57
[root@Mysql1 mha4mysql-node-0.57]# perl Makefile.PL
[root@Mysql1 mha4mysql-node-0.57]# make
[root@Mysql1 mha4mysql-node-0.57]# make install
四、上传 mha4MHA-manager-0.57.tar.gz 安装包在 manager 服务器上,并安装 manager 组件
[root@MHA-manager ~]# tar zxvf mha4MHA-manager-0.57.tar.gz
[root@MHA-manager ~]# cd mha4MHA-manager-0.57
[root@MHA-manager mha4MHA-manager-0.57]# perl Makefile.PL
[root@MHA-manager mha4MHA-manager-0.57]# make
[root@MHA-manager mha4MHA-manager-0.57]# make install
五、在 manager 上配置无密码认证
1. 在 manager 上配置到所有数据库节点的无密码认证 [root@MHA-manager ~]# ssh-keygen -t rsa #####一路按回车键 [root@MHA-manager ~]# ssh-copy-id 20.0.0.105 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK [root@MHA-manager ~]# ssh-copy-id 20.0.0.106 [root@MHA-manager ~]# ssh-copy-id 20.0.0.107 2. 在 Mysql1 上配置到数据库节点Mysql2和Mysql3的无密码认证 [root@Mysql1 ~]# ssh-keygen -t rsa #####一路按回车 [root@Mysql1 ~]# ssh-copy-id 20.0.0.106 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK [root@Mysql1 ~]# ssh-copy-id 20.0.0.107 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK 3. 在 Mysql2 上配置到数据库节点Mysql1和Mysql3的无密码认证 [root@Mysql2 ~]# ssh-keygen -t rsa #####一路按回车 [root@Mysql2 ~]# ssh-copy-id 20.0.0.105 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK [root@Mysql2 ~]# ssh-copy-id 20.0.0.107 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK 4. 在 Mysql3 上配置到数据库节点Mysql1和Mysql2的无密码认证 [root@Mysql3 ~]# ssh-keygen -t rsa #####一路按回车 [root@Mysql3 ~]# ssh-copy-id 20.0.0.105 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK [root@Mysql3 ~]# ssh-copy-id 20.0.0.106 #### 输入 yes ; 输入进入虚拟机的密码 ;显示 added:1 为OK
六、配置 MHA(manager 服务器上)
1. 复制相关脚本到/usr/local/bin 目录。 [root@MHA-manager ~]# cp -ra /root/mha4mysql-manager-0.57/samples/scripts /usr/local/bin 2. 复制上述的自动切换时 VIP 管理的脚本到/usr/local/bin 目录,这里使用脚本管理 VIP, [root@MHA-manager ~]# cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin 3、修改配置文件(全文删除,添加以下内容) [root@MHA-manager ~]# vi /usr/local/bin/master_ip_failover #!/usr/bin/env perl use strict; use warnings FATAL => 'all'; use Getopt::Long; my ( $command, $ssh_user, $orig_master_host, $orig_master_ip, $orig_master_port, $new_master_host, $new_master_ip, $new_master_port ); #############################添加内容部分######################################### my $vip = '20.0.0.100'; my $brdc = '20.0.0.255'; my $ifdev = 'ens33'; my $key = '1'; my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down"; my $exit_code = 0; ################################################################################## GetOptions( 'command=s' => \$command, 'ssh_user=s' => \$ssh_user, 'orig_master_host=s' => \$orig_master_host, 'orig_master_ip=s' => \$orig_master_ip, 'orig_master_port=i' => \$orig_master_port, 'new_master_host=s' => \$new_master_host, 'new_master_ip=s' => \$new_master_ip, 'new_master_port=i' => \$new_master_port, ); exit &main(); sub main { print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n"; if ( $command eq "stop" || $command eq "stopssh" ) { my $exit_code = 1; eval { print "Disabling the VIP on old master: $orig_master_host \n"; &stop_vip(); $exit_code = 0; }; if ($@) { warn "Got Error: $@\n"; exit $exit_code; } exit $exit_code; } elsif ( $command eq "start" ) { my $exit_code = 10; eval { print "Enabling the VIP - $vip on the new master - $new_master_host \n"; &start_vip(); $exit_code = 0; }; if ($@) { warn $@; exit $exit_code; } exit $exit_code; } elsif ( $command eq "status" ) { print "Checking the Status of the script.. OK \n"; exit 0; } else { &usage(); exit 1; } } sub start_vip() { `ssh $ssh_user\@$new_master_host \" $ssh_start_vip \"`; } # A simple system call that disable the VIP on the old_master sub stop_vip() { `ssh $ssh_user\@$orig_master_host \" $ssh_stop_vip \"`; } sub usage { print "Usage: master_ip_failover --command=start|stop|stopssh|status --orig_master_host=host --orig_master_ip=ip --orig_master_port=port --new_master_host=host --new_master_ip=ip --new_master_port=port\n"; }
七、创建 MHA 软件目录并拷贝配置文件
[root@MHA-manager ~]# mkdir /etc/masterha [root@MHA-manager ~]# cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/ [root@MHA-manager ~]# vi /etc/masterha/app1.cnf #####删除原文,将下列内容全部复制粘贴 [server default] manager_log=/var/log/masterha/app1/manager.log manager_workdir=/var/log/masterha/app1 master_binlog_dir=/usr/local/mysql/data master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=manager ping_interval=1 remote_workdir=/tmp repl_password=123 repl_user=myslave secondary_check_script=/usr/local/bin/masterha_secondary_check -s 20.0.0.106 -s 20.0.0.107 shutdown_script="" ssh_user=root user=mha [server1] hostname=20.0.0.105 port=3306 [server2] candidate_master=1 check_repl_delay=0 hostname=20.0.0.106 port=3306 [server3] hostname=20.0.0.107 port=3306
八、测试 ssh 无密码认证,如果正常最后会输出 successfully
[root@MHA-manager ~]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
......省略内容
Thu Oct 22 01:45:39 2020 - [debug] Connecting via SSH from root@20.0.0.106(20.0.0.106:22) to root@20.0.0.105(20.0.0.105:22)..
Thu Oct 22 01:45:39 2020 - [debug] ok.
Thu Oct 22 01:45:39 2020 - [debug] Connecting via SSH from root@20.0.0.106(20.0.0.106:22) to root@20.0.0.107(20.0.0.107:22)..
Thu Oct 22 01:45:40 2020 - [debug] ok.
Thu Oct 22 01:45:41 2020 - [info] All SSH connection tests passed successfully.
九、测试主从连接,出现 is ok
[root@MHA-manager ~]# masterha_check_repl -conf=/etc/masterha/app1.cnf
..............省略内容
IN SCRIPT TEST====/sbin/ifconfig ens33:1 down==/sbin/ifconfig ens33:1 20.0.0.100===
Checking the Status of the script.. OK
Thu Oct 22 01:48:59 2020 - [info] OK.
Thu Oct 22 01:48:59 2020 - [warning] shutdown_script is not defined.
Thu Oct 22 01:48:59 2020 - [info] Got exit code 0 (Not master dead).
MySQL Replication Health is OK.
十、在主服务器上设置一个虚拟IP
[root@Mysql1 ~]# /sbin/ifconfig ens33:1 20.0.0.100/24
[root@Mysql1 ~]# ifconfig
ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 20.0.0.100 netmask 255.255.255.0 broadcast 20.0.0.255
ether 00:0c:29:00:62:91 txqueuelen 1000 (Ethernet)
十一、在 manager 服务器上启动 MHA
[root@MHA-manager ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
[1] 129929
(解释: nohup :是一种启动方式 ; masterha_manager:用manager来进行启动 ; /etc/masterha/app1.cnf :关联上的配置文件 ;--remove_dead_master_conf :移除挂掉的master ;--ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 :忽略宕机的主机并将信息导入到< /dev/null >文件中,并把日志记录下来)
十二、查看 MHA 状态,可以看到当前的 master 是 Mysql1 节点
[root@MHA-manager ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:107906) is running(0:PING_OK), master:20.0.0.105
1、在 manager 服务器上开启监控观察日志,并关闭 mysql1 数据库模拟 mysql1 宕机,再查看 mysql1中的 VIP地址是否还在 [root@MHA-manager ~]# tailf /var/log/masterha/app1/manager.log [root@Mysql1 ~]# systemctl stop mysqld [root@Mysql1 ~]# ifconfig vip地址不见了 2、会发现master上的ens33:1/接口不见了,manager上的监控日志发生了变化,等待一会就能看到 VIP地址漂移到了从服务器20.0.0.106上,去从服务器20.0.0.106上,输入 ifconfig 会先发 vip地址就在上面,如此就完成了地址漂移 [root@mysql2 ~]# ifconfig ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 20.0.0.106 netmask 255.255.255.0 broadcast 20.0.0.255 inet6 fe80::68ab:77b8:dfb0:9cf2 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:da:d4:93 txqueuelen 1000 (Ethernet) RX packets 87633 bytes 92667957 (88.3 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 40292 bytes 10435831 (9.9 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 20.0.0.100 netmask 255.0.0.0 broadcast 20.255.255.255 ether 00:0c:29:da:d4:93 txqueuelen 1000 (Ethernet)
1、在原先的master服务器上 systemctl start mysqld 启动数据库,然后进入 manager 中在配置文件 /etc/masterha/app1.con 中添加 [server1]段,由于manager中有移除挂掉的master的模块, 所以需要重新添加 [server1]段 ,添加如下: [server1] hostname=20.0.0.105 port=3306 2、在master数据库中添加一条重新定位的语句 show master status; ###查看20.0.0.106 新master的定位值;并在20.0.0.105插入下面内容。要和master 的定位置,日志文件名相同 +-------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+------------------+-------------------+ | master-bin.000003 | 1189 | | | | +-------------------+----------+--------------+------------------+-------------------+ change master to master_host='20.0.0.106',master_user='myslave',master_password='123',master_log_file='master-bin.000003',master_log_pos=1189; start slave; mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 20.0.0.106 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master-bin.000003 Read_Master_Log_Pos: 1189 Relay_Log_File: mysql1-relay-bin.000002 Relay_Log_Pos: 321 Relay_Master_Log_File: master-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes
以上关于 Mysql-- MHA高可用的部署到此结束,感谢浏览
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。