MHA+maxscale实现数据库集群的高可用和读写分离-简易版

服务器:
manager—MHA的管理节点,负责监控主从集群状态并进行故障迁移
Master–主节点
Slave1
Slave2
准备软件:mysql5.7、mha-manager、mha-node(最好rpm包)、低版本maxscale
提前做好ssh互信
1.所有服务器安装依赖包:防止报错都安装

Yum  -y install epel-*  安装扩展源(防止自带的yum源不足)
yum install -y perl perl-DBI perl-DBD-MySQL perl-IO-Socket-SSL perl-Time-HiRes perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager 

2.所有服务器安装mysql5.7到/usr/local/mysql下
mysql5.7安装注意事项:需要初始化生成原始密码,备份并删除原始my.cnf文件防止后期soket和pid报错

  groupadd mysql
  useradd -r -g mysql mysql
  mkdir /usr/local/mysql/data -p
  chown -R mysql:mysql /usr/local/mysql/
  chmod -R 755 /usr/local/mysql/

某个版本之后这个步骤是下面这样,以前是mysql_install_db,datadir就是安装路径,basedir就是根目录

/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld 复制启动脚本到资源目录
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld  检查是否加入mysql服务
ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/local/mysql/bin/mysql/mysqlbinlog /usr/bin
service mysqld start

使用随机密码登陆mysql后更改密码为123456后重启
mysql> SET PASSWORD = PASSWORD(‘123456’);

3.搭建主从同步
m和两个s节点配置/etc/my.cnf主配置:

[mysqld]
datadir=/usr/local/mysql/data
#socket=/var/lib/mysql/mysql.sock    #一定要注释掉,不然启动的时候会去找sock文件很麻烦
symbolic-links=0
log-bin=mysql-log     二进制名
server-id=1  
binlog-do-db=alan     #同步的库 
relay-log = relay-log    #中继日志名
relay_log_purge = 0    //是否自动清空不再需要中继日志
log_slave_updates = 1               #随时更新从的数据
binlog-ignore-db=mysql              #不同步的库
sync-binlog=1
binlog-format=row
read_only = ON
#[mysqld_safe]                         #避免麻烦都注释
#log-error=/var/log/mariadb/mariadb.log
#pid-file=/var/run/mariadb/mariadb.pid

注意:三个服务器出了serverid外其余配置一样(因为谁都可能会变成主) 其余配置可以根据生产环境自行更改
保持三个mysql的库表结构完全一致
主库授权用户:grant replication slave on *.* to slave@'%' identified by "xxx";
三台重启mysqld
主库show master status看一下状态
两台从库配置授权用户信息:change master to master_host='192.168.37.128',master_user='slave',master_password='123456';
注意:如果报错需要reset slave再stop slave,停止slave的时候才能执行配置授权操作
启动slave并查看状态show slave status\G;

4.搭建MHA
四台服务器都yum一下mha-node
Manager:yum一下mha-manager(如果报错查看是否缺少依赖包)
四台服务器都登陆mysql创建一下mha的管理用户

grant all on *.* to mhaadmin@'%'  identified by "xxx";

创建mha的管理目录:/etc/mha
创建mha主配置:/etc/mha/app1.cnf:

[server default]            //适用于server1,2,3个server的配置
user=mhaadmin               //mha管理用户
password=mhapass            //mha管理密码
manager_workdir=/etc/mha/app1        //mha_master自己的工作路径
manager_log=/etc/mha/manager.log     // mha_master自己的日志文件
remote_workdir=/usr/local/mysql/data      //主从服务器的工作目录
master_binlog_dir=/usr/local/mysql/data    //二进制目录
ssh_user=root               // 基于ssh的密钥认证
repl_user=slave             //数据库用户名
repl_password=magedu        //数据库密码
ping_interval=1             //ping间隔时长
[server1]                   //节点2
hostname=192.168.37.133     //节点2主机地址
ssh_port=22                 //节点2的ssh端口
candidate_master=1          //将来可不可以成为master候选节点/主节点
[server2]
hostname=192.168.37.133
ssh_port=22
candidate_master=1
[server3]
hostname=192.168.37.144
ssh_port=22
candidate_master=1

检测ssh状态:manager-check-ssh --conf=/etc/mha/app1.cnf
出现成功就成功了
问题现象:
[root@DBproxy app1]# masterha_check_ssh --conf=/data/masterha/app1/app1.cnf

Can't locate MHA/SSHCheck.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/bin/masterha_check_ssh line 25.
BEGIN failed--compilation aborted at /usr/bin/masterha_check_ssh line 25.

[root@DBproxy app1]#
问题定位:应该是环境变量的问题

[root@DBproxy app1]# find / -name SSHCheck.pm
/usr/lib/perl5/vendor_perl/MHA/SSHCheck.pm

将相关路径加入PERL5LIB后,问题解决(根本原因是MHA和OS版本不匹配)。

export PERL5LIB=$PERL5LIB:/usr/lib/perl5/vendor_perl/

检测主从状态:mahager-check-repl --conf=/etc/mha/app1.cnf
出现ok则正常
启动mha监控:nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/manager.log 2>&1 &

5.测试MHA可用性
开启/etc/mha/manager.log及时查看日志状态
检查下主从同步状态正常
关闭主库:systemctl stop mysqld 同时可以看到日志显示主库飘逸到了其中一台s
进入另外两台s,show slave status\G; 可以看到主库已经变更从一主两从变成一主一从且mha监控已自动关闭
需要手动恢复集群状态:启动已宕机的原主库并添加授权主库信息:

change master to master_host='192.168.37.128',master_user='slave',master_password='123456';

启动从库:start slave并查看三台主从集群状态
编辑mha主配置文件app1.cnf(经过m迁移默认删除了一个server需要手动添加)
启动mha监控:nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /etc/mha/manager.log 2>&1 &
查看集群状态:manager-check-status --conf=/etc/mha/app1.cnf 显示running
测试成功

6.在MHA的基础上搭建maxscale(实验把maxscale装到manager上)
依赖包安装yum install libaio libaio-devel novacom-server libedit -y
使用mysql集群时注意安装低版本的maxscale不然会出现很多冲突报错,可能因为这是mariadb开发的产品
使用yum安装maxscale
三台mysql服务器创建监控用户,目的是监控集群的状态,当有机器宕了就不传送请求给他

grant replication slave, replication client on *.* to scalemon@'%' identified by '123456';

三台mysql服务器创建路由用户,目的是检测读写分离的分发请求(应该分发到哪一台机上)

grant select on mysql.* to maxscale@'%' identified by '123456';

编辑maxscale的主配置文件:
注意添加三台mysql的server信息;注意注释掉只读参数选项;注意修改监控用户和路由用户的参数;注意在maxscale模块下添加info日志路径方便测试查看日志log_info=1
logdir=/tmp
启动:maxscale -f /etc/maxscale.cnf
查看maxscale集群状态:maxadmin --user=admin --password=mariadb(默认用户名和密码)
>list sercers #查看集群状态

7.测试maxscale读写分离
客户端登陆并执行读写操作:mysql -umhaadmin -ppassword -h maxscaleIP -P4006
在maxscale服务端tailf-info日志观察记录:
当执行select时,maxscale将请求转发给了slave的IP
当执行insert时,maxscale将请求转发给了master的IP
关闭其中一台slave的mysqld,登陆maxadmin查看集群状态
测试MHA+maxscale:
开启mha的日志并关闭master的mysqld,查看m的迁移并show slave status查看是否迁移成功
现在就是一主一从的状态
登陆maxadmin查看集群状态是否对应
开启maxscale日志并客户端登陆授权用户执行读写操作查看日志分离记录
手动恢复mha集群,测试完成

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值