赞
踩
管理主机 | mha | ||
要将稳定运行的服务器设置为manager节点,也就是管理主机,否则后续会出现mha由于服务器不稳定而频繁自动关闭的现象。(本次设置41要比42稳定,但是最后设置成42为管理节点,就频频因为卡顿而自动关闭mha)
如果有VIP的话,可以将VIP也写入文件(本次配置VIP为11.146.212.43 VIP)
- vi /etc/hosts
-
- #进入文件
-
- 11.146.212.41 master
-
- 11.146.212.42 worker
- hostnamectl set-hostname master
-
- su
-
- hostnamectl set-hostname worker
-
- su
- systemctl stop firewalld #停止firewall
-
- systemctl disable firewalld #禁止firewall开机启动
安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统。
- setenforce 0
-
- sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
linux资源限制配置文件是/etc/security/limits.conf;限制用户进程的数量对于linux系统的稳定性非常重要。 limits.conf文件限制着用户可以使用的最大文件数,最大线程,最大内存等资源使用量。
(之前我都没设置过,本次是在查一些资料时候发现的,就设置了一下,但是没什么感觉)
- vi /etc/security/limits.conf
-
- #进入文件
-
- mysql soft nproc 65535
-
- mysql hard nproc 65535
-
- mysql soft nofile 65535
-
- mysql hard nofile 65535
集群环境ssh免密码登录设置_mq集群内部内服务器需要实现ssh免密认证码-CSDN博客
本次使用xftp连接到Linux服务器,将需要配置免密登录的服务器同时打开,以便同时发送命令。
(1)编辑每台服务器上的hosts文件:vi /etc/hosts,映射文件已经设置过,此处不再赘述。
- cd /root/.ssh/
-
- #如果是新装的服务器,需要自己先手动创建该目录:mkdir -p /root/.ssh/
- rm -rf id_rsa
-
- rm -rf id_rsa.pub
-
- #删除前确认是否有被其他服务器使用
(4)在每台服务器上都生成新的公钥私钥文件,输入命令后需要连续输入三次回车
此时要注意!配置免密的时候,大概率是需要互相通信主机的主机密码,这个主机密码我认为是xftp连接主机时候的密码(公司服务器需要找网络人员要主机密码),注意不是MySQL或者堡垒机的密码
ssh-keygen -t rsa
(5)拷贝id_rsa.pub文件内容到authorized_keys文件中
- cat id_rsa.pub >> authorized_keys
-
- #新服务器需要自己手动创建authorized_keys:touch authorized_keys
每台服务器公钥私钥生产完成后,就需要将各自的密钥拷贝到其他服务器上,以11.146.212.41主机为例子:
(1)登录11.146.212.41服务器,进入公钥私钥存放的路径
cd /root/.ssh/
(2)拷贝其他公钥文件(id_rsa.pub)内容至其他服务器上:
- ssh-copy-id -i 11.146.212.42 #拷贝公钥到11.146.212.42的authorized_keys中
-
- ssh-copy-id -i others #拷贝公钥到others的authorized_keys中
-
- #如果配置了hosts,也可以直接将IP替换成hostname。
-
- #比如ssh-copy-id -i 11.146.212.42 命令替换成 ssh-copy-id -i worker
(3)同理在其他几台服务器上也进行相同的操作,将本机的公钥拷贝至其他服务器上的authorized_keys文件中,最终authorized_keys文件内容如下:
-
- [root@master.ssh]# more authorized_keys
-
- ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp7jp4a1/deK4B/eZW8kdiCQvzpKe4Id0uP0DdONFW85r
-
- 20rpH4ZpNSB7JNYFiqjMUPQ/2EWLXh7xoa9UntKsMVVcZr3BTiXRZ0Gx7IDacwz8Cq0qYrwUCMTKt7QF
-
- xK5RwXyuZqDFjc2yC3/ZoqeyeLERFTll3ZLGeFsXhJjlkPTvtnvx0zX6lacPZL4VguoM5YHw3KaJg8bd
-
- qehJzbQoPS8sm00ES4iygbR+Ixz1cnGTrtNU1S3lh4/y0PC6spMs9Z2Mf097FTLQJXJDiGqU9Tq3MHvl
-
- srZFx92H4yeiJuYWJaZImuiq/feRIo30Dig6obEfuAn13vevdXozcXNlYQ== root@worker
- chmod 600 /root/.ssh/authorized_keys
-
- #效果如下,此时已经完成集群内免密的设置。
-
- [root@hadoop01 .ssh]# ls -al
-
- total 28
-
- drwx------. 2 root root 4096 Oct 24 12:27 .
-
- dr-xr-x---. 22 root root 4096 Oct 24 19:20 ..
-
- -rw-------. 1 root root 1975 Oct 24 12:27 authorized_keys
-
- -rw-------. 1 root root 1675 Oct 24 12:23 id_rsa
-
- -rw-r--r--. 1 root root 395 Oct 24 12:23 id_rsa.pub
-
- -rw-r--r--. 1 root root 2020 Oct 24 12:10 known_hosts
MySQL需要对某些文件拥有权限,才能自行建库,存放文件等的,所以要给其一个用户,并设置权限,深入的问题可以上网自行搜索
- useradd mysql
-
- passwd mysql #密码自行配置,这里用的密码是mysqlcode
这个安装目录可以自己设置,但是要记住,后续的文件配置需要这个目录
mkdir -p /data/{log,data,tmp,binlog,relaylog}
mariadb 是Linux 系统自带的数据库,可能会与MySQL 数据库的某些配置起冲突,在这里,我们需要先将其卸载。
- rpm -qa|grep mariadb #查看mariadb版本
-
- rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps
- tar -xzvf /root/mysql-5.7.32-el7-x86_64.tar.gz -C /
-
- mv /mysql-5.7.32-el7-x86_64 /mysql
-
- chown -R mysql:mysql /mysql /data
-
- #递归改变文件用户所有权(这样好像是给MySQL用户全委托,以便MySQL在创建或者删除文件时候有权限有目录)
echo >这个符号表示将命令的输出重定向到一个文件中。如果文件不存在,它会被创建;如果文件已经存在,它的内容会被覆盖。例如,echo “hello” > file.txt 会将字符串 “hello” 写入到 file.txt 文件中,覆盖原有内容。
- cp /mysql/support-files/mysql.server /etc/init.d/mysqld
-
- lfconfig
-
- echo "PATH=$PATH:/mysql/bin" > /etc/profile.d/mysql.sh #为了添加路径在任何地方都可以启动MySQL
-
- source /etc/profile.d/mysql.sh
-
- #设置的环境变量,并没有真正生效,只是使用source 命令让临时运行,只能在当前终端生效,重新开启一个终端后,该环境变量失效,重启即可
-
- chkconfig mysqld on
-
- #chkConfig的用法, mysqld开机自启动
- vi /etc/my.cnf
-
- #(master-1和slave-2只有server_id不同,这个我查是只作为一个标志,区分服务器,没有实际意义)
- [client]
-
- socket=/mysql/mysql.sock
-
- [mysqld]
-
- port=3306
-
- user=mysql
-
- basedir=/mysql #mysql路径
-
- socket=/mysql/mysql.sock
-
- #加载半同步复制主备插件
-
- plugin-load-add=semisync_master.so
-
- plugin-load-add=semisync_slave.so
-
- symbolic-links=0
-
- log-error=/data/log/mysqld.log
-
- slow_query_log_file=/data/log/slow.log
-
- slow_query_log=1
-
- long_query_time=0.3
-
- #server_id三台分别是1,2,3
-
- server_id=1
-
- #开启gtid模式
-
- gtid_mode=ON
-
- enforce_gtid_consistency=ON
-
- master_info_repository=TABLE
-
- relay_log_info_repository=TABLE
-
- relay_log_recovery=1
-
- binlog_checksum=NONE
-
- log_slave_updates=ON
-
- log_bin=/data/binlog/binlog
-
- relay_log=/data/relaylog/relaylog
-
- binlog_format=ROW
-
- transaction_write_set_extraction=XXHASH64
-
- datadir=/data/data
-
- slave_parallel_type=LOGICAL_CLOCK
-
- slave_preserve_commit_order=1
-
- slave_parallel_workers =4
-
- innodb_file_per_table
-
- sync_binlog = 1
-
- binlog-group-commit-sync-delay=20
-
- binlog_group_commit_sync_no_delay_count=5
-
- innodb_lock_wait_timeout = 50
-
- innodb_rollback_on_timeout = ON
-
- innodb_io_capacity = 5000
-
- innodb_io_capacity_max=15000
-
- innodb_thread_concurrency = 0
-
- innodb_sync_spin_loops = 200
-
- innodb_spin_wait_delay = 6
-
- innodb_status_file = 1
-
- innodb_purge_threads=4
-
- innodb_undo_log_truncate=1
-
- innodb_max_undo_log_size=4G
-
- innodb_use_native_aio = 1
-
- innodb_autoinc_lock_mode = 2
-
- log_slow_admin_statements=1
-
- expire_logs_days=7
-
- character-set-server=utf8mb4
-
- collation-server= utf8mb4_bin
-
- skip-name-resolve
-
- lower_case_table_names
-
- skip-external-locking
-
- max_allowed_packet = 1024M
-
- table_open_cache = 4000
-
- table_open_cache_instances=16
-
- max_connections = 4000
-
- query_cache_size = 0
-
- query_cache_type = 0
-
- tmp_table_size = 1024M
-
- max_heap_table_size = 1024M
-
- innodb_log_files_in_group = 3
-
- innodb_log_file_size = 1024M
-
- innodb_flush_method= O_DIRECT
-
- log_timestamps=SYSTEM
-
- #三个节点auto_increment_offset的值可以跟server_id相同
-
- auto_increment_offset=1
-
- auto_increment_increment=6
-
- explicit_defaults_for_timestamp
-
- log_bin_trust_function_creators = 1
-
- transaction-isolation = READ-COMMITTED
-
- innodb_buffer_pool_instances=8
-
- innodb_write_io_threads=4
-
- innodb_read_io_threads=4
-
- #生产环境增加
-
- innodb_buffer_pool_size=2G
-
- innodb_flush_log_at_trx_commit=1
-
- #设置从节点应用relaylog后产生binlog
-
- log_slave_updates=1
-
- #设置不自动删除relaylog
-
- #relay_log_purge=0
-
- #设置增强半同步复制参数
-
- rpl_semi_sync_master_wait_point= AFTER_SYNC
-
- rpl_semi_sync_master_enabled=1
-
- rpl_semi_sync_master_timeout=1000
-
- rpl_semi_sync_slave_enabled=1
-
- sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
此处为大家附上这两个文件的区别,用于理解区分
/mysql/bin/mysqld --user=mysql --basedir=/mysql --datadir=/data/data --initialize
- 启动前先创建mysql日志文件
-
- su - mysql
- #`su`命令(代表"switchuser")是用于切换用户的命令。 它允许当前登录的用户切换到另一个用户账户,并在该账户下执行命令。
-
- touch /data/log/mysqld.log
- #touch用来创建新的空文件
-
- exit
-
-
-
- systemctl start mysqld
-
- #确保启动没报错,ps -ef|grep mysql 可以看到进程
注意!此处强烈搭建小白将几台集群服务器的账号、密码设置为一样的,因为后续安装mha的时候会检查主机间的复制情况,这时会有三个用户需要填写到配置文件,此时搞不清哪个是哪个就会一直报错!所以设置为一致的,都一样也就间接避免了这个问题(大佬随意)
如果想在主库上执行一些操作,但不复制到slave库上,可以通过修改参数sql_log_bin来实现。0不复制,1复制。
USE语句可以通知MySQL把<数据库名>所指示的数据库作为当前数据库,只有使用USE语句来指定某个数据库作为当前数据库之后,才能对该数据库及其存储的数据对象执行操作。use命令可以让我们来使用数据库,其格式为:use <数据库名>。
- #(主从节点均需执行,注意root密码)
-
- root初始密码查找: grep password /data/log/mysqld.log
-
- mysql -uroot -p初始密码
-
- mysql>SET SQL_LOG_BIN=0;
-
- set password='master_41'; #worker_42worker_42
-
- FLUSH PRIVILEGES;
-
- use mysql;
-
- update user set host = '%' where user = 'R00T_12344';
-
- flush privileges;
-
- SET SQL_LOG_BIN=1;
- #select user,host from mysql.user 可以查看当前已开放
-
- #如查询后root没有开放权限,尝试使用
-
- GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' IDENTIFIED BY 'R00T_12344' WITH GRANT OPTION;
-
- flush privileges;
- systemctl status mysqld //查看MySQL运行状态
-
- systemctl start mysqld //启动MySQL服务
-
- systemctl restart mysqld //重启MySQL服务
2个从节点配置复制通道(worker2/worker3),本次搭建只有一个从节点worker
- mysql>change master to master_host='master',master_port=3306,master_user='root',master_password='master_41',MASTER_AUTO_POSITION=1;
-
- #配置前看好配置信息!新手后续更改比较费劲,会了就不费劲了
-
- #因为开启了gtid,可以设置MASTER_AUTO_POSITION=1使主从复制自动按照gtid的位置复制
-
- #此处的root用户可以改成自己的MySQL用户
- #启动slave
-
- mysql>START SLAVE;
-
- #查看从库的状态
-
- mysql>SHOW SLAVE STATUS\G;
-
-
-
- #确保 :
-
- #Slave_IO_Running: Yes
-
- #Slave_SQL_Running: Yes
- 从库
-
- stop slave;
-
- reset slave;
-
- change master to MASTER_AUTO_POSITION=0;
-
- flush privileges;
-
-
-
- 主库
-
- flush logs;
-
- show master status; #要重新查看内容更改
-
-
-
- 从库
-
- exit
-
- systemctl restart mysqld
-
-
-
- stop slave;
-
- reset slave;
-
- change master to
-
- master_host="11.146.212.41",
-
- master_user="root",
-
- master_password="master_41",
-
- master_log_file="binlog.000014",
-
- master_log_pos=230;
-
- #看主库新的内容后更改file
-
- change master to MASTER_AUTO_POSITION=1;
-
-
-
- start slave;
-
- show slave status \G
此时若是
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
开放端口,远程登录已经配置好了,可以Navicat 上试一下(已开通服务器到云桌面的网络权限),如果报错则查看端口,首先,退出sql 操作界面:
查看防火墙情况,正常来说是开启,但我们一开始就关闭了,此时应该是关闭状态:
systemctl status firewalld
配置端口对外开放,需要开启防火墙,
- systemctl start firewalld
-
- firewall-cmd --list-ports //查看开放的端口号,本次操作只有10050/tcp 端口开放
-
- firewall-cmd --zone=public --add-port=3306/tcp --permanent
-
- //开放3306端口
重新载入配置,使其生效:
- firewall-cmd --reload
- firewall-cmd --list-ports
此时再次在Navicat 进行连接,可以连接到数据库。
- GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' IDENTIFIED BY 'worker_42' WITH GRANT OPTION;
-
- GRANT ALL PRIVILEGES ON * . * TO 'root'@'%' IDENTIFIED BY 'master_41' WITH GRANT OPTION;
-
- FLUSH PRIVILEGES;
-
- GRANT ALL PRIVILEGES ON * . * TO 'repluser'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
出现这个问题也需要重新授权
此时若是
Slave_IO_Running: Yes
Slave_SQL_Running: No
出现如图所示的这种问题,其实错误原因有很多。这里遇到的问题是主从复制异常。主从复制异常的问题应该一般不会出现在刚搭建的集群上,因为该集群还未进行比较频繁的主从复制情况(个人判断,因为这个问题是我在高可用集群搭建完成后进行故障模拟时,反复关闭开启集群才遇到的)。
如果此时未开启GTID的集群则用以下命令:
set global sql_slave_skip_counter=1;
本次搭建使用GTID,所以用以上命令会报错
ERROR 1858 (HY000): sql_slave_skip_counter can not be set when the server is running with @@GLOBAL.GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction
这时可以通过查看当前worker节点的情况,查看报错的GTID点,跳过即可,如果有多个则重复执行,正如上面图片中框出的则是报错的点,将框中信息填入下面的命令后执行即可:
- stop slave ;
-
- set @@session.gtid_next='7661d18c-8e10-11e7-8e9c-6c0b84d5a868:298637'; #如有多个报错点,则重复执行该命令
-
- begin; #如有多个报错点,则重复执行该命令
-
- commit; #如有多个报错点,则重复执行该命令
-
- set @@session.gtid_next=automatic;
-
- start slave;
set global super_read_only=1;
上面完成设置同步,下面进行测试,新手上面安装没问题就先往后走,要不会卡住,不过确实建议试试。
- 主库
-
- mysql>
-
- show databases;
-
- create database test;
-
- use test;
-
- create table test (id int primary key);
-
- insert into test values(1);
-
-
-
- select * from test;
-
- 主库
-
- DROP DATABASE [ IF EXISTS ] <数据库名>;
- 主节点从master节点切换成worker节点
-
- #从节点worker:(新主节点)
-
- mysql>
-
- stop slave;
-
- set global read_only=0; #关闭只读,可以读写
-
-
-
- #原主节点master:
-
- mysql>
-
- set global super_read_only=1;
-
- stop slave;
-
- reset slave;
-
- change master to master_host='worker',master_port=3306,master_user='root',master_password='worker_42',master_log_file="binlog.000005",master_log_pos=230;
-
- change master to MASTER_AUTO_POSITION=1;
-
- start slave;
-
- show slave status \G
-
-
-
-
-
- 主节点从worker节点切换成master节点
-
- #从节点master:(新主节点)
-
- mysql>
-
- stop slave;
-
- set global read_only=0;
-
-
-
- #原主节点worker:
-
- mysql>
-
- set global super_read_only=1;
-
- stop slave;
-
- reset slave;
-
- change master to master_host='master',master_port=3306,master_user='root',master_password='master_41',master_log_file="binlog.000009",master_log_pos=2091;
-
- change master to MASTER_AUTO_POSITION=1;
-
- start slave;
-
- show slave status \G
- tar zxf mha-node-dep.tar.gz #node依赖
-
- rpm -ivh node/*
- #管理节点安装Manager软件
-
- #需要安装依赖
-
- tar zxf mha-manager-dep.tar.gz #manager依赖
-
- rpm -ivh manager/*
masterha_manager -v #注意此时就会报错,大概是安装依赖有问题什么的
此时报错证明没有安装好mha的manager,证明node也没有安装好,所以要先把需要的依赖先安装好
- #打开外网权限
-
- 41和42都开了外网的权限
-
- #先备份,后删除,再下载阿里云文件,清除缓存
-
- rm -f /etc/yum.repos.d/*
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
- rpm -ivh epel-release-latest-7.noarch.rpm
- yum install perl-DBD-MySQL
- yum install perl-Config-Tiny
- yum install perl-Log-Dispatch
- yum install perl-Parallel-ForkManager
用which is masterha_check_ssh,来看masterha_check_ssh命令的路径
mkdir -p /etc/mha/{conf,log,scripts}
- vi /etc/mha/conf/mha.cnf
-
- #注意修改里面的ip,路径,用户,密码等(password与repl_password均为mysql密码)
-
- #进入
-
-
- [server default]
-
- manager_log=/etc/mha/log/manager.log
-
- manager_workdir=/etc/mha/log
-
- master_binlog_dir=/data/binlog
-
- #failover和switchover脚本
-
- master_ip_failover_script=/etc/mha/scripts/master_ip_failover
-
- master_ip_online_change_script=/etc/mha/scripts/master_ip_online_change
-
- user=root
-
- password=worker_42
-
- #配置检查主节点的次数
-
- ping_interval=3
-
- repl_password=123456
-
- repl_user=repluser
-
- ssh_user=root
-
- ssh_port=22
-
-
-
- # masters
-
- [server1]
-
- hostname=11.146.212.41
-
- port=3306
-
- #cadidate_master为1表示优先考虑此节点转为主节点
-
- candidate_master=1
-
- master_binlog_dir=/data/binlog
-
- remote_workdir=/etc/mha/log
-
-
-
- [server2]
-
- hostname=11.146.212.42
-
- port=3306
-
- candidate_master=1
-
- check_repl_delay=0
-
- master_binlog_dir=/data/binlog
-
- remote_workdir=/etc/mha/log
注意:
配置中引用的脚本在附件里面,需要修改脚本master_ip_failover/master_ip_online_change中的my $vip和my $ifdev,代表vip和网卡名称,并上传到db3目录/etc/mha/scripts/
- #将脚本文件移到./etc/mha/scripts/中
-
- chmod +x /etc/mha/scripts/*
- 脚本中记着修改vip地址以及用户密码,均为后续需要登录的数据库密码,方便切换主从。
- masterha_check_ssh --conf=/etc/mha/conf/mha.cnf
-
- #输出如下
-
- . . .
-
- [info] All SSH connection tests passed successfully.
- masterha_check_repl --conf=/etc/mha/conf/mha.cnf
-
- #Result:Checking the Status of the script.. OK
-
- # MySQL Replication Health is OK.
-
-
-
- #not ok的话是出了一些问题
-
- ln -s /usr/share/perl5/vendor_perl/MHA /usr/lib64/perl5/vendor_perl/
- [root@worker usr]# masterha_check_repl --conf=/etc/mha/conf/mha.cnf
-
- Wed Apr 17 14:49:10 2024 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
-
- Wed Apr 17 14:49:10 2024 - [info] Reading application default configuration from /etc/mha/conf/mha.cnf..
-
- Wed Apr 17 14:49:10 2024 - [info] Reading server configuration from /etc/mha/conf/mha.cnf..
-
- Wed Apr 17 14:49:10 2024 - [info] MHA::MasterMonitor version 0.58.
-
- Wed Apr 17 14:49:10 2024 - [error][/usr/share/perl5/vendor_perl/MHA/Server.pm, ln180] Got MySQL error when connecting 11.146.212.42(11.146.212.42:3306) :1045:Access denied for user 'root'@'11.146.212.42' (using password: YES), but this is not a MySQL crash. Check MySQL server settings.
-
- Wed Apr 17 14:49:10 2024 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln301] at /usr/share/perl5/vendor_perl/MHA/ServerManager.pm line 297.
-
- Wed Apr 17 14:49:10 2024 - [error][/usr/share/perl5/vendor_perl/MHA/Server.pm, ln180] Got MySQL error when connecting 11.146.212.41(11.146.212.41:3306) :1045:Access denied for user 'root'@'11.146.212.42' (using password: YES), but this is not a MySQL crash. Check MySQL server settings.
-
- Wed Apr 17 14:49:10 2024 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln301] at /usr/share/perl5/vendor_perl/MHA/ServerManager.pm line 297.
-
- Wed Apr 17 14:49:11 2024 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln309] Got fatal error, stopping operations
-
- Wed Apr 17 14:49:11 2024 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations. at /usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm line 329.
-
- Wed Apr 17 14:49:11 2024 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
-
- Wed Apr 17 14:49:11 2024 - [info] Got exit code 1 (Not master dead).
-
- MySQL Replication Health is NOT OK!
- [root@worker ~]# masterha_check_repl --conf=/etc/mha/conf/mha.cnf
-
- Fri Apr 19 08:48:39 2024 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
-
- Fri Apr 19 08:48:39 2024 - [info] Reading application default configuration from /etc/mha/conf/mha.cnf..
-
- Fri Apr 19 08:48:39 2024 - [info] Reading server configuration from /etc/mha/conf/mha.cnf..
-
- Fri Apr 19 08:48:39 2024 - [info] MHA::MasterMonitor version 0.58.
-
- Fri Apr 19 08:48:40 2024 - [error][/usr/lib64/perl5/vendor_perl/MHA/Server.pm, ln265] Checking slave status failed on 11.146.212.41(11.146.212.41:3306). err=Got error when executing SHOW SLAVE STATUS. Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation
-
- Fri Apr 19 08:48:40 2024 - [error][/usr/lib64/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations. at /usr/lib64/perl5/vendor_perl/MHA/ServerManager.pm line 315.
-
- Fri Apr 19 08:48:40 2024 - [error][/usr/lib64/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
-
- Fri Apr 19 08:48:40 2024 - [info] Got exit code 1 (Not master dead).
-
- MySQL Replication Health is NOT OK!
- mysql> set global read_only=1;
-
- Query OK, 0 rows affected (0.00 sec)
-
- mysql>
- masterha_check_status --conf=/etc/mha/conf/mha.cnf
-
- # mha is stopped(2:NOT_RUNNING).
-
- 此处还未启动,停止状态为正常结果。
- # 虚拟ip与之前在脚本中配置的保持一直,选用未占用的地址
-
- # 用于切换主从时ip指向最新的主库
-
- /sbin/ip addr add 11.146.212.43/24 dev ens160 label ens160:1(添加)
-
- /sbin/ip addr del 11.146.212.43/24 dev ens160 label ens160:1(删除)(需要时再用,后续故障模拟时候会用到)
-
- # 可参考/etc/mha/scripts/master_ip_failover 中的命令,虚拟ip详细地址参选主机同网段空心地址,ens从ifconfig配置中查看本机网卡再填入
- nohup masterha_manager --conf=/etc/mha/conf/mha.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/log/manager.log 2>&1 &
-
- --remove_dead_master_conf 删除宕机主机配置
-
- --ignore_last_failover 任何时间出现错误都会进行切换
-
-
-
- # 检查日志
-
- tail -f /etc/mha/log/manager.log
-
- ...
-
- Ping(SELECT) succeeded, waiting until MySQL doesn't respond..
- ...
检查日志这时候可能会比较卡,可能是我服务器本身就比较卡,而且会报错VIP的问题
- USE of uninitialized value $ssh_user in concatenation (.) or string at /etc/mha/scripts/master_ip_failover ;ine 77.
-
- Failed to deactivate master IP eith return code 1:0
-
- GOT ERROE: at /usr/bin/masterha_manager line 65.
-
- got error so couldn't continue failover from here
这时检查复制状态,如果显示IO:NO,重启MySQL,再设置read_only为1
- masterha_check_status --conf=/etc/mha/conf/mha.cnf
-
- #mha (pid:20102) is running(0:PING_OK), master:192.168.253.100
masterha_stop --conf=/etc/mha/conf/mha.cnf
在进行MHA文件配置的时候,scripts文件夹下面的两个文件都需要配置VIP的信息,VIP是由自己设置的虚拟IP,可以根据自己集群的ip来设计,比如我这里是11.146.212.41、11.146.212.42,所以VIP就定为11.146.212.43,而且要确保43不与其他ip冲突,是一个无人使用的状态。VIP使用的网卡是配置VIP的主机网卡。而且在云桌面或者其他平台连接VIP时,要确保该平台到VIP的网络是通的。
当连接VIP进行写入的操作时,因为配置不当可能会报错,具体可查看:The MySQL server is running with the –read-only option so it cannot execute this statement_the mysql server is running with the --read-only o-CSDN博客
ERROR:The MySQL server is running with the –read-only option so it cannot execute this statement
这样一般有两种情况,我目前也只碰到这两种情况:
1.连到从库了,主库设置了只读,所以无法读写。大概率是像我一开始那样,设置manager节点在从库42上,所以VIP的配置也在从库42上面,之后再将41作为manager节点后,没有删除从库42上面的网卡等信息,导致连接VIP连接从库无法写入。
2.主库不小心之下也设置了只读。这种情况就比较少了,设置可写入即可。
链接: https://pan.baidu.com/s/1AU-gQ9lLeOxMXKexEqK4lQ
提取码: 6k3x
至此,恭喜你已经完成MySQL高可用集群(一主一从)的搭建,一路以来我们一起解决了很多问题,放松一下吧!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。