MySqlMysql数据库

虚拟机linux搭建MySql集群(以及自己踩的坑)

2022-01-25  本文已影响0人  柠檬小猪

MHA高可用搭建

虚拟机固定ip设置最少要3台机子,一主两从,最好再加一个机子部署MHA(或者在从库部署MHA)。

linux安装mysql,MHA插件只能在linux环境下用,不用费力去弄windows版了。

MySql主从搭建

Master节点

使用vi /etc/my.cnf命令修改Master配置文件,嫌麻烦的可以直接用WinSCP去找到文件,直接复制信息。

#bin_log配置

log_bin=mysql-bin

server-id=1

sync-binlog=1

binlog-ignore-db=information_schema

binlog-ignore-db=mysql

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

#relay_log配置

relay_log=mysql-relay-bin

log_slave_updates=1

relay_log_purge=0

修改配置文件都需要重启服务器

systemctl restart mysqld

登陆mysql执行命令,授权访问

mysql> grant replication slave on *.* to root@'%' identified by '密码';

mysql> grant all privileges on *.* to root@'%' identified by '密码';

mysql> flush privileges;//一定要刷新

//查看主库状态信息,例如master_log_file='mysql-bin.000007',master_log_pos=154

mysql> show master status;

position应该是日志写入位置,所以每次修改主库,都会发生变化。

Slave节点

修改Slave的MySQL配置文件my.cnf,两台Slave的server-id分别设置为2和3

#bin_log配置

log_bin=mysql-bin

#服务器ID,从库1是2,从库2是3

server-id=2

sync-binlog=1

binlog-ignore-db=information_schema

binlog-ignore-db=mysql

binlog-ignore-db=performance_schema

binlog-ignore-db=sys

#relay_log配置

relay_log=mysql-relay-bin

log_slave_updates=1

relay_log_purge=0

read_only=1

修改配置文件都需要重启服务器

systemctl restart mysqld

开启同步

登录MySQL,在Slave节点的MySQL命令行执行同步操作,例如下面命令(注意参数与上面show master status操作显示的参数一致):

change master to master_host='192.168.31.199',master_port=3306,master_user='root',master_password ='123456',master_log_file='mysql-bin.000007',master_log_pos=154;

start slave; //开启同步

修改主库时需要先关闭同步

stop slave;

主库查询,可以查看现在同步是哪台主机。

show slave status;

配置半同步复制

Master节点

登录MySQL,在MySQL命令行执行下面命令安装插件

linux:install plugin rpl_semi_sync_master soname 'semisync_master.so';

windows:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll';//MHA插件不支持windows,最好还是用linux

show variables like '%semi%';//查看开启状态

# 自动开启半同步复制

rpl_semi_sync_master_enabled=ON

rpl_semi_sync_master_timeout=1000

Slave节点

linux:install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

windows:install plugin rpl_semi_sync_slave soname 'semisync_slave.dll';

# 自动开启半同步复制

rpl_semi_sync_slave_enabled=ON

都需要重启服务器才会生效

systemctl restart mysqld

SSH互通

生成公钥私钥

ssh-keygen -t rsa

在三台MySQL服务器分别执行下面命令,密码输入系统密码,将公钥拷到MHA Manager服务器上(192.168.31.126MHA服务器IP)

ssh-copy-id 192.168.31.126

在MHA查看密钥

cat /root/.ssh/authorized_keys

如果找不到!可能不是用的root创建;用户不同,生成密钥的文件夹也不同

/home/xxx/.ssh/id_rsa.pub

cat /home/xxx/.ssh/authorized_keys

一般用root

将MHA Manager的公钥添加到authorized_keys文件中(此时应该包含4个公钥)

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

从MHA Manager服务器执行下面命令,向其他三台MySQL服务器分发公钥信息。

scp /root/.ssh/authorized_keys root@192.168.31.(对应ip):/root/.ssh/authorized_keys

MHA Manager执行下面命令,检测下与三台MySQL是否实现ssh互通。

ssh 192.168.31.(对应ip)

exit

MHA安装

manager只需要在MHA主机上安装

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

node所有主机都需要安装

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

node安装

MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。

yum install perl-DBD-MySQL -y

没有可用软件包 perl-DQL。

全称为 Extra Packages for Enterprise Linux  企业版 Linux 额外包,需要我们更新下 epel 这个第三方库。

yum install -y epel-release

再执行之前命令

实际问题的粘贴到虚拟机的命令被截断了,这也是经常发生的问题,要检查一下复制内容。

安装node,命令需要在该文件的文件夹下执行

rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm

manager安装

MHA的manager又依赖了perl-Config-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别进行安装。

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm//下载

rpm -ivh epel-release-latest-7.noarch.rpm//安装

yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y

rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm//安装manager

MHA 配置文件

在MHA主机上操作

mkdir -p /var/log/mha/app1//创建文件夹

touch /var/log/mha/app1/manager.log//创建日志文件

配置监控全局配置文件,vim是创建文件并输入内容

vim /etc/masterha_default.cnf

[server default]

user=mha

password=123123

port=3306

#ssh登录账号

ssh_user=root

#从库复制账号和密码

repl_user=root

repl_password=123456

port=3306

#ping次数

ping_interval=1

#二次检查的主机

secondary_check_script=masterha_secondary_check -s 192.168.31.199 -s 192.168.31.165 -s 192.168.31.142

配置监控实例配置文件

先使用 mkdir -p /etc/mha 命令创建目录,然后使用 vim /etc/mha/app1.cnf 命令编辑文件

[server default]

#MHA监控实例根目录

manager_workdir=/var/log/mha/app1

#MHA监控实例日志文件

manager_log=/var/log/mha/app1/manager.log

#[serverx] 服务器编号

#hostname 主机名

#candidate_master 可以做主库

#master_binlog_dir binlog日志文件目录

[server1]

hostname=192.168.31.199

candidate_master=1

master_binlog_dir="/var/lib/mysql"

[server2]

hostname=192.168.31.165

candidate_master=1

master_binlog_dir="/var/lib/mysql"

[server3]

hostname=192.168.31.142

candidate_master=1

master_binlog_dir="/var/lib/mysql"

MHA 配置检测

masterha_check_ssh --conf=/etc/mha/app1.cnf

显示ALL SSH connection tests passed successfully.

检测MySQL主从复制

masterha_check_repl --conf=/etc/mha/app1.cnf

出现“MySQL Replication Health is OK.”证明MySQL复制集群没有问题。

主从检查报错

There is no alive server. We can't do failover

#主库用户名,在master mysql的主库执行下列命令建一个新用户

#create user 'mha'@'%' identified by '123123';

#grant all on *.* to mha@'%' identified by '123123';//这段从库也要执行

#flush privileges;

MHA Manager启动

MHA服务器上执行

nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &

跟踪日志

tail -f /var/log/mha/app1/manager.log

ctrl+c 退出跟踪

然后可以用systemctl stop mysqld关掉master主机的MySql来测试效果。

重新上线的服务器怎么连入MHA?

很明显server1被移除了,想要重新连入就要在配置文件中重新添加。

然后server1并没有同步;还是需要去mysql数据库作为从库重新配置。

上一篇下一篇

猜你喜欢

热点阅读