前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Keeplived+mysql双master高可用如何实现?

Keeplived+mysql双master高可用如何实现?

作者头像
网络技术联盟站
发布2020-11-03 15:05:37
3700
发布2020-11-03 15:05:37
举报

作者:墨篱弦

简易拓扑

https://oscimg.oschina.net/oscnet/up-18b70e55451e4e69d0f449e6329034bdcfa.png

实验环境

代码语言:javascript
复制
 Mysql40.11(master-1)    192.168.40.11/24 
 Mysql40.12(master-2)    192.168.40.12/24  
 Keepalived    192.168.40.18/24

安装依赖环境和mysql(过程略)

配置master-1和master-2互为主从关系

修改master-1的mysql配置

代码语言:javascript
复制
vim /etc/my.cnf
代码语言:javascript
复制
#log config
log-bin=mysql-bin
relay-log=relay-log
relay-log-index=relay-log.index
server-id=11
innodb-file-per-table=ON
skip_name_resolve=ON

重启数据库

代码语言:javascript
复制
systemctl restart mysqld

连接数据库

代码语言:javascript
复制
mysql -uroot -p******

查看日志信息

代码语言:javascript
复制
show global variables like '%log%';

https://oscimg.oschina.net/oscnet/up-64a20398db3d3663300345fe3fea58549b4.png

https://oscimg.oschina.net/oscnet/up-52bdc44bcc14d0b72aefc988ae4093ca146.png

在master-1创建有复制权限的用户

代码语言:javascript
复制
grant replication slave on *.* to 'backup'@'%' identified by 'Backup123!@#';
代码语言:javascript
复制
flush privileges;

修改master-2的mysql配置

代码语言:javascript
复制
vim /etc/my.cnf
代码语言:javascript
复制
#log config
log-bin=log-bin
relay-log=relay-log
relay-log-index=relay-log.index
server-id=12
innodb_file_per_table=ON
skip_name_resolve=ON

在master-2创建有复制权限的用户

代码语言:javascript
复制
grant replication slave on *.* to 'backup'@'%' identified by 'Backup123!@#';
代码语言:javascript
复制
flush privileges;

重启数据库

代码语言:javascript
复制
systemctl restart mysqld

连接数据库

代码语言:javascript
复制
mysql -uroot -p123456

查看日志信息

代码语言:javascript
复制
show global variables like '%log%';

在master-1上查看log-bin文件名和pos值

代码语言:javascript
复制
show master status;

在master-2上开启主从

代码语言:javascript
复制
mysql> change master to
    -> master_host='192.168.40.11', 
    -> master_user='backup', 
    -> master_password='Backup123!@#', 
    -> master_log_file='mysql-bin.000001',
    -> master_log_pos=591;
代码语言:javascript
复制
start slave;

查看主从状态

代码语言:javascript
复制
show slave status\G

master-1与master-2主从关系建立成功

同理现在创建master-2与master-1的主从关系

在master-2上查看log-bin文件名和pos值

代码语言:javascript
复制
show master status;

在master-1上开启主从

代码语言:javascript
复制
mysql> change master to
    -> master_host='192.168.40.12', 
    -> master_user='backup', 
    -> master_password='Backup123!@#', 
    -> master_log_file=' log-bin.000003',
    -> master_log_pos=591;
代码语言:javascript
复制
start slave;

查看主从状态

验证master-1和master-2是否互为主从

创建远程访问账号

代码语言:javascript
复制
grant all privileges on *.*to 'test'@'%'  identified by '123qwe!@#QWE' with grant option;

端口为默认端口号

代码语言:javascript
复制
show global variables like '%port%';

在master-1创建新库 123

在master-2上查看数据库是否同步过来

img

在master-2上的数据库123上创建新表321

在master-1上的数据库123查看是否同步过来了新表

img

验证通过,master-1和master-2互为主从关系

在两台服务器上分别安装keepalived(过程略)

给master-1和master-2分别安装keepalived

Master-1安装keepalived

安装依赖坏境

代码语言:javascript
复制
yum -y install curl gcc openssl-devel libnl3-devel net-snmp-devel libnfnetlink-devel

创建/data/keepalived,创建/software

代码语言:javascript
复制
mkdir –p /data/keepalived
mkdir –p /software

上传安装包到/software, 解压安装包, 进入keepalived-2.1.5目录

代码语言:javascript
复制
tar -zxvf keepalived-2.1.5.tar.gz
cd keepalived-2.1.5

编译安装

代码语言:javascript
复制
./configure --prefix=/data/keepalived --sysconf=/etc
make & manke install

进入安装后的路径

代码语言:javascript
复制
cd /data/keepalived/

创建软连接,覆盖软连接

代码语言:javascript
复制
ln -s sbin/keepalived /sbin/
ln -snf sbin/keepalived /sbin

复制运行命令

代码语言:javascript
复制
cp /software/keepalived-2.1.5/keepalived/etc/init.d/keepalived /etc/init.d
chkconfig --add keepalived

添加到系统服务(开机启动),启动服务

代码语言:javascript
复制
chkconfig keepalived on
service keepalived start

Master-2安装和master-1相同

在master-1上创建chk_mysqld检测mysql是否运行的脚本,添加脚本执行权限

代码语言:javascript
复制
vim chk_mysqld.sh
代码语言:javascript
复制
#!/bin/bash
A=`ps -C mysqld --no-header|wc -l`
  if [ $A -eq 0 ];then
     systemctl start mysqld
  sleep 2
   if [ `ps -C mysqld --no-header|wc -l` -eq 0 ];then
       killall keepalived
   fi
 fi
代码语言:javascript
复制
chmod 775 chk_mysqld.sh

配置master-1的keepalived

代码语言:javascript
复制
vim /etc/keepalived/keepalived.conf
代码语言:javascript
复制
! Configuration File for keepalived

global_defs {

   router_id MYSQL

   }

 

vrrp_script chk_mysqld {

       script "/root/chk_mysqld.sh"

       interval 10

       weight -5

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface ens33

    virtual_router_id 18

    priority 100

    advert_int 1

    nopreempt

    authentication {

        auth_type PASS

        auth_pass 1111

        }

    virtual_ipaddress {

        192.168.40.18/24

        }

        track_script {

           chk_mysqld

        }

}

重启keepalived,查看是否拿到虚拟IP

代码语言:javascript
复制
service keepalived restart
ip add

在master-2上创建chk_mysqld检测mysql是否运行的脚本,添加脚本执行权限

代码语言:javascript
复制
vim chk_mysqld.sh
代码语言:javascript
复制
#!/bin/bash
A=`ps -C mysqld --no-header|wc -l`
  if [ $A -eq 0 ];then
     systemctl start mysqld
  sleep 2
   if [ `ps -C mysqld --no-header|wc -l` -eq 0 ];then
       killall keepalived
   fi
 fi
代码语言:javascript
复制
chmod 775 chk_mysqld.sh

配置master-2的keepalived

代码语言:javascript
复制
vim /etc/keepalived/keepalived.conf
代码语言:javascript
复制
! Configuration File for keepalived
global_defs {
   router_id MYSQL
   }

vrrp_script chk_mysqld {
       script "/root/chk_mysqld.sh"
       interval 10
   }

vrrp_instance VI_1 {
    state BACKUP
    interface ens33
    virtual_router_id 18
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
        }

virtual_ipaddress {
        192.168.40.18/24
        }

 track_script {
           chk_mysqld
        }

}

重启keepalived,查看是否拿到虚拟IP

代码语言:javascript
复制
service keepalived restart
ip add    #因为设置了非抢占,默认谁优先开机启动完成,谁为主库,谁拿到vip

验证keepalived的非抢占

重启master-1并查看master网络信息

在查看master-1网络信息

验证数据库

目前主库在40.12

重启master-2看数据库是否会自动切换到master-1上

数据库发生了切换期间出现过一次丢包

对数据的影响还未验证。。

还可以测试下,如果直接down网口的情况下 服务器以及数据库是否能实现自动切换?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络技术联盟站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简易拓扑
  • 实验环境
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档