MHA高可用环境部署以及故障测试

环境准备

准备四台机器

角色

虚机IP

服务类型

资源规格

manager

88.4.34.63

manager

2C / 4GiB / 200GiB

master

88.4.34.60

node

4C / 8GiB / 200GiB

slave

88.4.34.61

node

4C / 8GiB / 200GiB

slave

88.4.34.62

node

4C / 8GiB / 200GiB

 

配置数据库(一台master、两台slave)

1. 在/usr/local/mysql中解压mysql的数据库包( 注:/usr/loacl下无mysql文件夹,自己创建,mkdir -p mysql,数据库tar包自备)

#: tar -xvf mysql-XXX.tar

2. 解压完成后,会生成多个rpm包,需要安装以下rpm包即可

#: yum remove mysql-libs

 

#: rpm -ivh mysql-community-common-xxx.el7.x86_64.rpm

#: rpm -ivh mysql-community-libs-xxx.el7.x86_64.rpm

#: rpm -ivh mysql-community-client-xxx.el7.x86_64.rpm

#: rpm -ivh mysql-community-server-xxx.el7.x86_64.rpm

#: rpm -ivh mysql-community-devel-xxx.el7.x86_64.rpm

#: rpm -ivh mysql-community-libs-compat-xxx.el7.x86_64.rpm

 

3. 启动数据库:

#: systemctl start mysqld

#: systemctl enable mysqld

4. 查看状态

#: systemctl status mysqld

5. 查看mysql默认密码

#: cat /var/log/mysqld.log | grep password

查看到密码后,复制默认密码

6. 登录mysql

#: mysql -u root -p

这时,需要将复制的密码粘贴即可进入mysql数据库

7. 修改密码

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('password');

8. 修改安全级别

mysql>  set global validate_password_policy=0;//0最低,1中级,2最强验证级别

9. 授权远程登录MHA必须配置项目

//root、password即为数据库root角色登陆用户名及密码

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY   'password' WITH GRANT OPTION;

//授权*(主库授权指定从库)

mysql> grant replication slave on *.* to root@'%' identified by 'password' with grant option;

//刷新权限

mysql> FLUSH PRIVILEGES;

10. 建立数据库fit2cloud、keycloak

据APP应用中/opt/fit2cloud/bin/mysql中init.sql中的数据库,进入mysql中直接粘贴复制即可。(注:这里APP指的是安装云管的虚机)

11. 修改/etc/my.cnf,新增如下配置

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO

lower_case_table_names=1

依次将一台master、两台slave均按以上步骤搭建mysql数据库。

 

数据库主从配置

数据一致化

此处注意,若是新的机器未和云管APP建立联系,也即是数据库中没有数据时,可忽略数据一致化步骤。

 

#: ssh 88.4.34.60

 

1. 登陆主服务器mysql

#: mysql -u root -p

2. 切换到需要执行主从的数据库

mysql> use fit2cloud

3. 给数据库表加上只读锁

mysql> flush tables with read lock

4. 将主服务器数据库中数据导出(以下命令是退出数据库执行,)

#: mysqldump -u root -p fit2cloud> fit2cloud.sql

 

#: ssh 88.4.34.61

1. 登录从服务器mysql

#: mysql -u root -p

2. 创建数据库

mysql> create database fit2cloud;

3. 将主服务器数据导入

mysql> use fit2cloud;

#: source fit2cloud.sql;

 

#: ssh 88.4.34.62

1. 登录从服务器mysql

#: mysql -u root -p

2. 创建数据库

mysql> create database fit2cloud;

3. 将主服务器数据导入

mysql> use fit2cloud;

#: source fit2cloud.sql;

 

注:有多少库就得同步多少库,例如云管的fit2cloud、keycloak都得同步以下,以确保主从数据库数据一致性。

 

 

主数据库配置

1. 修改mysql配置

#: vi /etc/my.cnf

2. 往配置文件中添加以下内容

#主数据库端ID号,每个数据库机器的配置文件数据库端ID不同

server_id = 1          

#开启二进制日志                 

log-bin = mysql-bin   

#需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可        

binlog-do-db = fit2cloud

binlog-do-db = keycloak

#指定slave要复制哪个库

replicate-do-db = fit2cloud

replicate-do-db = keycloak

#以上标红是MHA搭建必须配置的

#将从服务器从主服务器收到的更新记入到从服务器自己的二进制日志文件中  

log-slave-updates                       

#控制binlog的写入频率。每执行多少次事务写入一次(这个参数性能消耗很大,但可减小MySQL崩溃造成的损失)

sync_binlog = 1                   

#这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突

auto_increment_offset = 1          

#这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突

auto_increment_increment = 1           

#二进制日志自动删除的天数,默认值为0,表示“没有自动删除”,启动时和二进制日志循环时可能删除

expire_logs_days = 7                           

#将函数复制到slave

log_bin_trust_function_creators = 1

 

3. 重启mysql使配置文件生效

#: systemctl  restart mysqld

 

 

4. 查看主数据库

 

记下File 以及 Position 字段的值 ,后续会用到该值

 

从数据库配置(有几台配几台)

1. 修改mysql配置

#: vi /etc/my.cnf

2. 往配置文件中添加以下内容

#两台slave,所以另一台slave的server_id可以设置为3,类推

server_id = 2

log-bin = mysql-bin

log-slave-updates

sync_binlog = 0

#log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作

innodb_flush_log_at_trx_commit = 0       

#需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可        

binlog-do-db = fit2cloud

binlog-do-db = keycloak

#指定slave要复制哪个库

replicate-do-db = fit2cloud

replicate-do-db = keycloak

#以上标红是MHA搭建必须配置的     

#MySQL主从复制的时候,当Master和Slave之间的网络中断,但是Master和Slave无法察觉的情况下(比如防火墙或者路由问题)。Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,然后才会重连并且追赶这段时间主库的数据

slave-net-timeout = 60    

expire_logs_days = 7                

log_bin_trust_function_creators = 1   

 

3. 重启mysql使得配置文件生效

#: systemctl restart mysql

 

 

4. 执行同步命令

mysql> change master to master_host='88.4.34.60',master_user='root',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=1062; (最后两个参数的值同主服务器状态中的File及Position值)

5. 开启同步功能

mysql> start slave ;(若是报错则先reset slave,再执行同步命令,再start slave即可)

 

6. 查看从服务器状态

 

Slave_IO_Running及Slave_SQL_Running进程必须正常运行,即Yes状态,否则说明同步失败

到此,主从配置完成。

 

安装包准备

 

1. MHA下载网址(node、manager包)

https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58

https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58

注:下面依赖包中也有这两个包。

2. 相关依赖包

https://pan.baidu.com/s/1ZmUIOK1BReEQ6-s5eBnapQ 提取码:43z1

 

配置node

在三台机器(一台master,两台slave)上统一配置如下rpm包,安装步骤必须按以下顺序来:

#: rpm -ivh /mnt/Packages/perl-Net-Daemon-0.48-5.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-PlRPC-0.2020-14.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-DBI-1.627-4.el7.x86_64.rpm

#: rpm -ivh /mnt/Packages/perl-DBD-MySQL-4.023-6.el7.x86_64.rpm前提是必须安装rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm

#: rpm -ivh /opt/mha_node/mha4mysql-node-0.58-0.el7.centos.noarch.rpm(node包)

除了mha4mysql-node-0.58-0.el7.centos.noarch.rpm包是node包以外,其他rpm包均是node包所需依赖包。

配置manager

在manager机器上配置如下rpm包,安装步骤必须按以下顺序来:

#: rpm -ivh /mnt/Packages/perl-Net-Daemon-0.48-5.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-PlRPC-0.2020-14.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-DBI-1.627-4.el7.x86_64.rpm

#: rpm -ivh /mnt/Packages/perl-DBD-MySQL-4.023-6.el7.x86_64.rpm(前提是必须安装rpm -ivh mysql-community-libs-compat-5.7.26-1.el7.x86_64.rpm)

#: rpm -ivh /opt/mha_node/mha4mysql-node-0.58-0.el7.centos.noarch.rpm

#: rpm -ivh /opt/mha_manager/perl-Config-Tiny-2.14-7.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Module-Runtime-0.013-4.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Try-Tiny-0.12-2.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Module-Implementation-0.06-6.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Params-Validate-1.08-4.el7.x86_64.rpm

#: rpm -ivh /opt/mha_manager/perl-Log-Dispatch-2.41-1.of.el7.noarch.rpm

#: rpm -ivh /opt/mha_manager/perl-Parallel-ForkManager-1.18-2.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Params-Util-1.07-6.el7.x86_64.rpm

#: rpm -ivh /mnt/Packages/perl-Sub-Install-0.926-6.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Data-OptList-0.107-9.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-List-MoreUtils-0.33-9.el7.x86_64.rpm

#: rpm -ivh /mnt/Packages/perl-Package-DeprecationManager-0.13-7.el7.noarch.rpm

#: rpm -ivh /mnt/Packages/perl-Package-Stash-XS-0.26-3.el7.x86_64.rpm

#: rpm -ivh /mnt/Packages/perl-Package-Stash-0.34-2.el7.noarch.rpm

#: rpm -ivh /opt/mha_manager/perl-Class-Load-0.20-3.el7.noarch.rpm

#: rpm -ivh /opt/mha_manager/mha4mysql-manager-0.58-0.el7.centos.noarch.rpm(manager包)

 

除了mha4mysql-manager-0.58-0.el7.centos.noarch.rpm包是manager包以外,其他rpm包均是manager包所需依赖包。

 

另外推荐各版本依赖包下载网址:

https://centos.pkgs.org/7/openfusion-x86_64/perl-Log-Dispatch-2.41-1.of.el7.noarch.rpm.html

注:若机器提供yum源也可直接yum源下载安装以上依赖包,或者通过光盘亦可。

 

免登陆验证

1. 生成秘钥对

#: ssh-keygen

 

步骤:回车、回车、回车。结果如下:

 

2. 秘钥拷贝

使用ssh-copy-id将秘钥拷贝到各个机器上,包括当前(自己)器,每个机器器都要拷贝三次 我这里拿mah服务举例。上述生成秘钥的是manager机器如下,则需如下配置:

#: ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@88.4.34.60

#: ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@88.4.34.61

#: ssh-copy-id -i /root/.ssh/id_rsa.pub -p 22 root@88.4.34.62

另外三台node机器也如上配置,将自己的秘钥拷贝到其他机器上。

配置MHA

1. 创建工作目录

集群中各个机器建立一个mha工作目录,这里是四台(配置文件需要用)

#: mkdir -p /opt/mysql_mha/

2. (manager机器)创建配置文件目录

#: mkdir -p /opt/mhaconfig/

创建mysql_mha.cnf文件,并放置/opt/mhaconfig中,内容如下:

[server default]

#用户,这里我们用的是数据库root角色,也可自己创建角色

user=root  

password=password

#工作目录

manager_workdir=/opt/mysql_mha

manager_log=/opt/mysql_mha/manager.log

remote_workdir=/opt/mysql_mha

#SSH

ssh_user=root

#复制用户

repl_user=root

repl_password=password

 

ping_interval=1

#binlog地址

master_binlog_dir=/var/lib/mysql

[server1]

hostname=88.4.34.60

#表示可成为主库

candidate_master=1

[server2]

hostname=88.4.34.61

#表示不可成为主库

no_master=1

[server3]

hostname=88.4.34.62

candidate_master=1              

 

MHA检查

1. ssh检测免密配置

#: masterha_check_ssh --conf=/opt/mhaconfig/mysql_mha.cnf

 

如上图所示即为成功。

 

2. 检测主从复制环境

#: masterha_check_repl --conf=/opt/mhaconfig/mysql_mha.cnf

 

如上图所示即为成功。

3. 后台启动

#: nohup masterha_manager -conf=/opt/mhaconfig/mysql_mha.cnf &> /opt/mysql_mha/log/manager.log &

 

4. 查看状态

#: masterha_check_status --conf=/opt/mhaconfig/mysql_mha.cnf

 

这里的master我经过故障演示,所以转为62那台了,本身应为60那台。

 

故障演示

  1. 模拟主库故障

可直接关闭主库的mysql服务来模拟故障。

#: systemctl stop mysqld

2. 开启manager机器实施MHA日志

关闭主库的mysql服务之前操作。

#: tail -f /opt/mysql_mha/manager.log

随即可看到相关log日志打印,例如这里便会提示60机器down掉,并且62机器成为master,成为主库。这里日志较多,只展示new master和report部分。(提示:下面展示的是62机器down,60机器转为master,原因是我之前转过60机器了,不用纠结)

 

 

日志如上述所示即为集群master自动转换,到这就是模拟故障成功了。

故障恢复

如上述所示60机器数据库停止服务后,master转为62机器,那么后面故障机器60恢复了,重新集群。

1. 模拟故障修复

#: systemctl start mysqld

2. 获取新master的file和position

#: grep -i "change master to" /opt/mysql_mha/manager.log | tail -1

如下图所示:

 

3. 恢复机器执行同步命令

mysql> change master to master_host='88.4.34.62',master_user='root',master_password='password',master_log_file='mysql-bin.000008',master_log_pos=154; (最后两个参数的值同主服务器状态中的File及Position值)

mysql> start slave;

mysql> show slave status \G;

 

如上图所示即同步成功。

 

4. 重复MHA检查流程

按照MHA检查流程走一遍即可,可省略第一步ssh检查。

IP漂移

待定。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值