ubuntu16.04安装keepalived+Mysql主从切换

文章目录

  • 一、keepalived安装与配置
    • 1、安装组件
    • 2、压缩包方式安装
    • 3、检测脚本
    • 4、配置文件转移到系统下
    • 5、配置文件修改
    • 6、启动
    • 7、华为云虚拟ip
      • 1、申请虚拟ip
    • 8、ip漂移测试
  • 二、MySql5.7.27 互为主从配置
    • 1、双主互备注意事项
    • 2、A主B从
      • 1、主数据库修改mysql配置
      • 2、从数据库修改
        • **1.修改mysql配置**
        • **2.重启mysql,打开mysql会话,执行同步SQL语句**(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
        • 3.启动slave进程
        • 4.查看slave状态
    • 3、B主A从

一、keepalived安装与配置

1、安装组件

1. apt-get install libssl-dev 
2. apt-get install openssl 
3. apt-get install libpopt-dev
4、apt-get install nmap
4、apt-get install keepalived

libssl-dev、openssl、libpopt-dev为安装keepalived的必备组件。首先安装它,不然后面会报错。namp检测端口开放情况,用于后面mysql检测脚本。

2、压缩包方式安装

1、官网下载安装包(以keepalived-2.0.18.tar.gz为例)
2、tar -zxvf keepalived-2.0.18.tar.gz
3、cd ./keepalived-2.0.18
4 ./configure --prefix=/usr/local/keepalived
5、make && make install

3、检测脚本

/opt目录下新建检测脚本,任意目录下都行,你自己决定

#!/bin/sh
# check mysql server status
PORT=3306
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
    service mysql stop
    service mysql start
    sleep 5
    nmap localhost -p $PORT | grep "$PORT/tcp open"
    if [ $? -ne 0 ];then
        pkill -f keepalived
    fi

fi

给脚本赋予执行权限

chmod +x /opt/chk_mysql.sh

注意点:检测脚本不要再windows环境下编写,Windows下为dos格式,需要转成unix格式即可。如果你在windows下面编写的,脚本写完以后可以以下方法检查一下格式。

vim chk_mysql.sh
:set ff # 显示 filefomate=dos
:set ff=unix
:set ff # 显示 filefomate=unix
# 再退出编辑就可以执行脚本了

4、配置文件转移到系统下

接下来将配置文件复制到系统的etc目录下面,不进行这一步的话,keepzlived就无法启动。系统默认读取/etc/keepalived下的keepalived.conf文件。

 cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

5、配置文件修改

vim /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
     [email protected]
     [email protected]
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

# 检测mysql是否正常运行
vrrp_script check_mysql {
    script "/opt/chk_mysql.sh"
    interval 2
    weirht 2
}

vrrp_instance VI_1 {
    state BACKUP # MASTER或者BACKUP,我们选择两台都为BACKUP
    interface eth0 # 网卡名称,可使用 ip addr在系统里查看
    virtual_router_id 51
    priority 100 # 优先级,两台均为BACKUP的话,优先级设置成一样。
    advert_int 1
    track_script  # 加上这个检测上面编写的脚本
    {
       check_mysql
    }
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.200.16 # 虚拟ip
    }
}
  • state:实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。
  • interface:对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。
  • virtual_router_id:虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。
  • priority:节点优先级,取值范围0~254,MASTER要比BACKUP高
  • advert_int:MASTER与BACKUP节点间同步检查的时间间隔,单位为秒
  • authentication:验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp 实例MASTER与BACKUP使用相同的密码才能正常通信。
  • nopreempt:禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。
  • virtual_ipaddress:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。

6、启动

然后就可以使用service命令启动

service keepalived start   #启动服务
service keepalived stop    #停止服务
service keepalived status    #查看状态

7、华为云虚拟ip

阿里云上面不支持keepalived,你就别想在这个上面用了。目前使用的是华为云的服务器。

1、申请虚拟ip

  1. 登陆虚拟私有云,进入vpc-default

    ubuntu16.04安装keepalived+Mysql主从切换_第1张图片

  2. 进入子网

    ubuntu16.04安装keepalived+Mysql主从切换_第2张图片

  3. 申请虚拟ip

    ubuntu16.04安装keepalived+Mysql主从切换_第3张图片

  4. 绑定服务器

    只能绑定同一个子网下的服务器。一个个的绑定,官方建议最多可绑定10台服务器。

  5. 申请弹性公网ip绑定虚拟ip

    将刚刚申请的虚拟ip与弹性公网ip绑定,提供对外连接属性。

8、ip漂移测试

服务器里输入ip addr可查看虚拟ip

ubuntu16.04安装keepalived+Mysql主从切换_第4张图片

  • 当停掉mysql时,会切换到另一台服务器,此处无法观看到虚拟ip。
  • 但是检测脚本里有启动mysql:service mysql start的步骤,手动验证时最好删除这个,不然无法观察到ip漂移现象。

二、MySql5.7.27 互为主从配置

1、双主互备注意事项

当你想要两个数据库互为主备的时候,需要在mysql.cnf中加上下面这个配置,本篇中就需要加入这个。

log-slave-updates=true

2、A主B从

  • 以下是在ubuntu系统下进行的对mysql5.27修改配置文件
  • A:主数据库:139.9.7.204
  • B:从数据库:138.159.140.61

1、主数据库修改mysql配置

  • 找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]部分插入如下两行:
[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id,主从的不一样
log-slave-updates=true # 双主互备
  • 修改完后重启mysql。
service mysql stop
service mysql start
  • 创建同步账号
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'slaveMysql'; #创建用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'138.159.140.61' idedtified by '密码'; #分配权限
mysql> flush privileges;   #刷新权限
  • 查看master状态,记录二进制文件名(mysql-bin.000006)和位置(154):

    mysql> SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000006 |      154 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
    

2、从数据库修改

1.修改mysql配置

找到从数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]部分插入如下行:

[mysqld]
server-id=2 #设置server-id,必须唯一

2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

mysql> CHANGE MASTER TO MASTER_HOST='139.9.7.204 ',MASTER_USER='repl',MASTER_PASSWORD='密码', MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=154;

3.启动slave进程

start slave;

4.查看slave状态

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 139.9.7.204
                  Master_User: mysql
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: ecs-t6-large-2-linux-20190918162959-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes # 这两个同时为yes代表成功了
            Slave_SQL_Running: Yes # 这两个同时为yes代表成功了
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154

3、B主A从

  • A:从数据库:139.9.7.204

  • B:主数据库:138.159.140.61

    按照上面的步骤角色相反进行同样的操作就行了。

    建议:同步账号设置成与“A主B从”的一样的,便于后面使用弹性公网连接查看数据库。

主从配置参考博客

     Last_Error:
             Skip_Counter: 0
      Exec_Master_Log_Pos: 154



## 3、B主A从

- A:从数据库:139.9.7.204 

- B:主数据库:138.159.140.61 

  按照上面的步骤角色相反进行同样的操作就行了。
  
  建议:同步账号设置成与“A主B从”的一样的,便于后面使用弹性公网连接查看数据库。

[主从配置参考博客](https://www.cnblogs.com/gl-developer/p/6170423.html)



你可能感兴趣的:(ubuntu16.04安装keepalived+Mysql主从切换)