Keepalived实现HA

本文介绍如何通过 Keepalived 实现 MySQL 的高可用性集群。内容包括安装配置 Keepalived、设置 MySQL 主从复制、配置 Keepalived 监控 MySQL 服务状态等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Keepalived实现HA


Storage  <-->  Mysql Keepalived       <-------
                                              |
  R                  V                        |
  e                  r                        |
  p                  r                        |
  l                  p                        |
  i                                          VIP   --->  Aplication
  c                  c                        |
  a                  h                        |
  t                  e                        |
  i                  c                        |
  o                  k                        |
  n                                           |
                                              |
Storage           Mysql Keepalived     <------




下载keepalived
www.keepalived.org
两种方式安装  rpm和源码


源码安装   最简单
./configure
./make
./make install


源码生成rpm文件
cd /var/scr/
cp keepalived-1.2.12.tar.gz  /var/scr/
tar zxvf keepalived-1.2.12.tar.gz 
./configure
rpmbuild ~


cd
mkdir -p rpmbuild/BUILD
mkdir -p rpmbuild/BUILDROOT
mkdir -p rpmbuild/RPMS/i386
mkdir -p rpmbuild/RPMS/noarch
mkdir -p rpmbuild/SOURCES
mkdir -p rpmbuild/SPECS
mkdir -p rpmbuild/SRPMS
mkdir -p rpmbuild/tmp


cd /var/scr/keepalived-1.2.12


cp keepalived.spec ~/rpmbuild/SPECS
cp keepalived-1.2.12.tar.gz  ~/rpmbuild/SOURCES


cd ~/rpmbuild/SPECS
rpmbuild -bb keepalived.spec


修改主机密码
192.168.75.23上修改主机名
vi /etc/hosts
127.0.0.1 host1
192.168.75.23 host1
192.168.75.51 host2
192.168.74.52 host3


vi /etc/sysconfig/network
HOSTNAME=host1


192.168.75.51 上修改主机名
vi /etc/hosts
127.0.0.1 host2
192.168.75.23 host1
192.168.75.51 host2
192.168.74.52 host3


vi /etc/sysconfig/network
HOSTNAME=host2


192.168.75.52 上修改主机名
vi /etc/hosts
127.0.0.1 host3
192.168.75.23 host1
192.168.75.51 host2
192.168.74.52 host3


vi /etc/sysconfig/network
HOSTNAME=host3


配置replication
编写host1上的my.cnf
[mysqld]
server-id=1
log-bin
service mysql restart


编写host3上的my.cnf
[mysqld]
server-id=2
log-bin
service mysql restart


检测所有的防火墙是否关闭
iptables -F
iptables -L
getenforce


在host1上登陆mysql
grant replication slave on *.* to slave@192.168.75.52 identified by '123';
flush priveleges;


在host3上登陆mysql
grant replication slave on *.* to slave@192.168.75.23 identified by '123';
flush privileges;




在host3上操作
change master to
master_host='192.168.75.23',
master_user='slave',
master_password='123',
master_log_file='host1-bin.000001',
master_log_pos=120;
start slave;
show slave status \G;


在host1上操作
change master to 
master_host='192.168.75.52',
master_user='slave',
master_password='123';
start slave;
show slave status \G;


在host1上创建测试数据
create database world;
use word
create table t1(id int);
insert into t1 values(1),(2),(3);


在host3上检查是否复制正确
show databases;
use world
select * from t1;


在host3上的world.t1上插入数据测试是否会复制到host1
insert into t1 values (4);


检查是否复制到host1上
select * from t1;


keepalived配置
配置文件放置的位置/usr/local/etc/keepalived
注意priority设置要不一样 越大优先级越高 谁当主设置高点
修改host1下的keepalived.cnf
! Configuration File for keepalived


global_defs {
   notification_email {
     root@localhost.localdomain   --邮箱地址例如875381900@qq.com
   }
   notification_email_from root@localhost.localdomain
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id xc-mysql-ha   --起个名字
}
vrrp_instance VI_1 {
    state BACKUP   --这个keepalived扮演的角色 最好两边都配置为BACKUP
    interface eth0   --网卡名字
    virtual_router_id 51
    priority 100
    nopreempt   --确定出问题时切到host3后,host1又好后不会再切换回来到host1,知道host3出问题时才进行切换,只在这一侧加这个参数
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.75.55      --随便写个
    }
}
virtual_server 192.168.75.55 3306 {
    delay_loop 1
    lb_algo wrr   --算法
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.75.23 3306 {   --host1的实际ip
        weight 1
notify_down /usr/local/etc/keepalived/mysql.sh
        TCP_CHECK {
            connect_timeout 10
   bingto 192.168.75.55   --虚拟ip
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }


mysql.sh
#!/bin/bash
pkill keepalived


chmod 755 mysql.sh
 


修改host3下的keepalived.cnf
! Configuration File for keepalived


global_defs {
   notification_email {
     root@localhost.localdomain
   }
   notification_email_from root@localhost.localdomain
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id xc-mysql-ha
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.75.55
    }
}
virtual_server 192.168.75.55 3306 {
    delay_loop 1
    lb_algo wrr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.75.52 3306 {
        weight 1
        notify_down /usr/local/etc/keepalived/mysql.sh
        TCP_CHECK {
            connect_timeout 10
            bingto 192.168.75.55
            nb_get_retry 3
            delay_before_retry 3
            connect_port 3306
        }
    }
    
mysql.sh
#!/bin/bash
pkill keepalived


chmod 755 mysql.sh


测试keepalived
host1启动keepalived
/etc/init.d/keepalived start


host3启动keepalived
/etc/init.d/keepalived start


最终检测
ps -ef|grep keepalived
ps -ef|grep mysql
less /var/log/messages


测试方法
1.使用ping命令持续检测VIP的连通情况
2.关闭主节点上的mysql服务
3.观察主节点上的keepalived进程
4.观察VIP的ping结果
5.观察在切换后能否正常访问数据库




在host1上执行,host3也会复制
grant all on waorld.* to xc@192.168.75.51 identified by '123';
flush privileges;


用host2专门做检测
在host2上,检测虚拟ip地址
ping 192.168.75.55


mysql -h 192.168.75.55 -uxc -p123  --使用虚拟ip连接数据库


在host1上模拟数据库故障
service mysql stop
ps -ef|grep keepalived
发现host1没有服务了,切换到了host3,host2的ping是一直通的,因为主有问题立即切换到备,所有ping是一直通的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值