欢迎光临,赤鹿小组
记录过程,分享经验

CentOS下搭建MySQL+Keepalived主从高可用

在生产环境下,为防止数据库单点故障,编者在生产环境下采用了 Mysql + Keepalived 的方式部署了数据库主从同步。
当然,也可以采用 failover 的方法,也是可以做到一个故障的切换。具体采用什么方式解决问题,还得根据个人的实际情况进行选择。

MySQL 的安装

[[email protected] ] wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
[[email protected] ] yum -y localinstall mysql57-community-release-el7-8.noarch.rpm
[[email protected] ] yum repolist enabled | grep "mysql.*-community.*"
[[email protected] ] yum -y install mysql-community-server
[[email protected] ] systemctl start mysqld
[[email protected] ] grep 'temporary password' /var/log/mysqld.log
[[email protected] ] mysql -uroot -p

当启动 MySQL 的服务后,就可以查询的 MySQL 的初始化密码了,然后进行登录查看是否可行如下图所示。
如果不想那么麻烦,可以直接在 my.cnf 文件下添加 skip-grant-tables 参数 直接跳过密码进行登录,然后使用 update 语句修改 root 的密码也是可以的:

mysql

Mysql 数据库到这里就已经部署完成了,那么接下来就是部署 Mysql 的主从同步,编者这里将 Mysql1 作为主库,Mysql2 作为从库进行主从同步的部署。
注意:两台数据库的数据必须保持一致

均在 Mysql1 以及 Mysql2 的 MySQL 配置文件上添加以下语句

[[email protected]  mysql1 ] vim /etc/my.cnf
    server-id=1
    log-bin=Sc-mysql1-bin
    binlog_format=mixed
[[email protected]  mysql2 ] vim /etc/my.cnf
    server-id=2
    log-bin=Sc-mysql2-bin
    binlog_format=mixed
    sys-binlog=1
    log_slave_updates=1    # 允许链式复制,在配置为互为主从时必须开启,编者在此次中只简单的做一主一从。

在修改完配置文件后,需要进入到两台数据库进行主从的配置操作:
注意: 具体操作对应哪台机器,切勿搞混
Mysql1

[[email protected]  mysql1 ] mysql -uroot -p
mysql> show master status;
mysql> grant all on *.* to 'replicate'@'%' identified by '123456';    # 授权一个主从复制用户

Mysql2

[[email protected]  mysql2 ] mysql -uroot -p
mysql> change master to master_host='192.168.16.31',
    -> master_user='replicate',
    -> master_password='123456',
    -> master_log_file='Sc-mysql1-bin.000001',
    -> master_log_pos=154;

mysql> start slave status\G;

# 如果以下都为 yes,那么说明主从以及部署成功了
     Slave_IO_Running: Yes
     Slave_SQL_Running: Yes

MySQL 的主从同步已经搭建完成,那么接下来就是部署 Keepalived。

Keepalived 部署

Keepalived 需要在两台主机上都进行安装,这样才能实现故障的切换。
在这里需要注意的几个点:
1. router_id 是唯一的;
2. interface 必须是跟主机绑定的IP网卡名称一致;
3. virtual_router_id 两台主机必须一致;
4. virtual_ipaddress 两台主机的真实IP是不一样的;
5. real_server 段的IP应该是主机对应的真是IP;
… …

[[email protected]@seichung  mysql1 ] yum -y install keepalived
[[email protected]@seichung  mysql1 ] vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {
   router_id Scon-keepalive1
}

# 检查数据库健康状态
vrrp_script monitor_mysql
{
       script "/data/sh/check_mysql.sh"
       interval 1
       weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736    # 配置网卡名称
    virtual_router_id 51
    priority 150
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.16.254
    }
}

virtual_server 192.168.16.254 3306 {
    delay_loop 2
    lb_algo rr
    lb_kind DR
#    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.16.31 3306 {
        weight 2
        inhibit_on_failure
        notify_down /data/sh/check_mysql.sh
        TCP_CHECK {
          connect_timeout 3
          nb_get_retry 3
          delay_before_retry 3
          connect_port 3306
        }
    }
}

配置好 keepalived 后,启动 keepalived 并查看虚拟 IP 是否已经生效,效果如下图:

[[email protected]@seichung  mysql1 ] systemctl start keepalived.service
[[email protected]@seichung  mysql1 ] systemctl status keepalived.service
[[email protected]@seichung  mysql1 ] ip addr | grep 192.168.16.254

keepalived

最后,借助 检验数据库存活脚本 https://github.com/Scirh/Shell-Script/blob/master/check_mysql.sh 来判断数据库是否存活来做一个故障切换。可以将虚拟IP所在的主机数据库服务停止掉,看虚拟IP是否会漂移到从库的主机,如果主从同步部署成功。没有则需要查看下出错提示并解决!

赞(0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址