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

版权声明: https://blog.csdn.net/Scirhh/article/details/87914583

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

    MySQL的安装

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


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


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

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

[root@scong mysql1 ] vim /etc/my.cnf
    server-id=1
    log-bin=Sc-mysql1-bin
    binlog_format=mixed

[root@scong mysql2 ] vim /etc/my.cnf

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


     在修改完配置文件后,需要进入到两台数据库进行主从的配置操作:

     注意: 具体操作对应哪台机器,切勿搞混

# Mysql1

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

# Mysql2
[root@scong 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;
    … …
[root@scong mysql1 ] yum -y install keepalived
[root@scong 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是否已经生效,效果如下图:

[root@scong mysql1 ] systemctl start keepalived.service
[root@scong mysql1 ] systemctl status keepalived.service
[root@scong mysql1 ] ip addr | grep 192.168.16.254


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


     感谢阅读,本文旨在提供参考,如有错误,欢迎大家指正。帮助编者不断的改进!

猜你喜欢

转载自blog.csdn.net/Scirhh/article/details/87914583