如何理解基于keepalived的MySQL主主复制

62次阅读
没有评论

共计 5949 个字符,预计需要花费 15 分钟才能阅读完成。

这篇文章将为大家详细讲解有关如何理解基于 keepalived 的 MySQL 主主复制,文章内容质量较高,因此丸趣 TV 小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

系统环境:Linux red hat 6.3
mysql 版本:mysql 5.6.34
mater1 节点 ip:192.168.140.222     主机名:red1
mater2 节点 ip:192.168.140.224     主机名:red2
一、分别在两个节点安装 mysql 数据库。

二、1 节点修改 /etc/my.cnf 参数
server_id =1        // 标志,节点之间不能重复
log-bin=/var/lib/mysql/xbinlog/binlog      // 开启 binlog,并保存在位置 /var/lib/mysql/xbinlog/ 下
binlog-format=ROW              //binlog 的模式是 row 模式  
log_slave_updates=1          // 开启 log-slave-updates 参数后,从库从主库复制的数据会写入 log-bin 日志文件里
sync_binlog=1          // 当每进行 1 次事务提交之后,MySQL 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
innodb_flush_log_at_trx_commit=1        // 代表每 1 次事务提交或事务外的指令都需要把日志写入(flush)硬盘
slave-parallel-workers=2        // 设定从服务器的 SQL 线程数位 2 个;0 表示关闭多线程复制功能
replicate-do-db=replicate          // 同步的数据库是 replicate

并且给 /var/lib/mysql/xbinlog/ 目录赋予 mysql:mysql 权限,否则会起不来  chown mysql:mysql /var/lib/mysql/xbinlog/
重启 mysql 服务

2 节点修改 /etc/my.cnf 参数
server_id =2                                     // 这个参数要保证 2 个节点不一致
log_bin=/opt/mysql/data/ybinlog/binlog
binlog-format=ROW
log_slave_updates=1
sync_binlog=1
innodb_flush_log_at_trx_commit=1
slave-parallel-workers=2
replicate-do-db=replicate

并且给 /var/lib/mysql/ybinlog/ 目录赋予 mysql:mysql 权限,否则会起不来  chown mysql:mysql /var/lib/mysql/ybinlog/
重启 mysql 服务

三、在 1 节点:
mysql grant replication slave on *.* to replicate @ 192.168.140.224 identified by replicate  
Query OK, 0 rows affected (0.00 sec)

mysql flush tables with read lock;  
Query OK, 0 rows affected (0.00 sec)

mysql show master status;
+—————+———-+————–+——————+——————-+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+——————-+
| binlog.000002 |      337 |              |                  |                   |
+—————+———-+————–+——————+——————-+
1 row in set (0.00 sec)

mysql unlock tables; 
Query OK, 0 rows affected (0.00 sec)

在 2 节点
mysql change master to master_host= 192.168.140.222 ,master_user= replicate ,master_password= replicate ,master_log_file= binlog.000002 ,master_log_pos=337;
Query OK, 0 rows affected, 2 warnings (0.00 sec)

mysql start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql show slave status\G                  // 查看 Slave_IO_Running 和 Slave_SQL_Running 两项是不是 yes 状态

mysql show master status; 
+—————+———-+————–+——————+——————-+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+—————+———-+————–+——————+——————-+
| binlog.000001 |      120 |              |                  |                   | 
+—————+———-+————–+——————+——————-+

在 1 节点
mysql change master to master_host= 192.168.140.224 ,master_user= replicate , master_password= replicate ,master_log_file= binlog.000001 ,master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

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

mysql show slave status\G                  // 查看 Slave_IO_Running 和 Slave_SQL_Running 两项是不是 yes 状态

四、测试,在 2 个节点都插入数据,然后 select 验证一下

五、下载 keepalived
http://www.keepalived.org/software/keepalived-1.2.13.tar.gz
解压:tar xvf keepalived-1.2.13.tar.gz
cd keepalived-1.2.13
初始化:./configure  –disable-fwmark
编译安装:make make install

keepalived 的配置前提
1、本机的主机名与 hosts 中定义的主机保持一致。
2、各节点要能互相解析主机名,也就是说 hosts 文件中要有本机的和对方的 ip 和对应的主机名
3、各个节点的时间必须同步

  关闭 selinux 并清空防火墙规则
[root@red1 ~]# setenforce 0
[root@red1 ~]# iptables -F

配置 keepalived
cp /usr/local/etc/sysconfig/keepalived  /etc/sysconfig/
cp /usr/local/sbin/keepalived  /usr/bin/
cp /software/keepalived/keepalived-1.2.13/keepalived/etc/init.d/keepalived.init   /etc/init.d
mkdir -p /etc/keepalived
cp /software/keepalived/keepalived-1.2.13/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

节点 1 上配置
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {                      // 全局配置段
   notification_email {            // 定义故障通知邮箱  
         root@localhost            // 邮箱地址,可以多个
   } 
   notification_email_from root@localhost          // 发件人地址
   smtp_server localhost                         // 邮件服务器地址
   smtp_connect_timeout 30                   // 联系邮件服务器的超时时长
   router_id red1                           // 当前物理设备在网络中的唯一 ID 标识  
}

vrrp_instance VI_1 {                      // 实例名在配置文件中不能重复
    state MASTER                           //MASTER 或 BACKUP,定义当前节点默认为主或从节点
    interface eth0
    virtual_router_id 51                  // 当前虚拟路由的标识符,必须全局唯一
    priority 100                        // 定义当前实例的优先级,备机要小于主机  
    advert_int 1                        // 状态通告周期(秒)— 用于主节点向 BACKUP 节点通告心跳信息  
    authentication {                      / 消息认证配置
        auth_type PASS                  // 认证方式(MD5 或 PASS 简单字符认证)
        auth_pass 1111                // 认证密码,所有同一虚拟实例节点的必须保持一致
    }
    virtual_ipaddress {              // 自动配置在 interface 上的(vip) 虚拟 IP 地址, 可以是多个
      192.168.140.66                // 虚拟 ip
    } 
}

virtual_server 192.168.140.66 {           // 虚拟 ip
    delay_loop 6                            //RealServer 的健康状态探查的时间间隔
    lb_algo rr                                  // 负载均衡的调度算法(Scheduler)
    lb_kind DR                                  //LVS 类型。支持 NAT/DR/TUN
    persistence_timeout 50                     // 持久连接超时时间
    protocol TCP                              // 只能适用 TCP,若适用 UDP 则使用 ops 参数
    real_server 192.168.140.222 {               // 1 节点 ip
        weight 1                                   权重
        TCP_CHECK {                             
            connect_timeout 3                       健康状态监测超时时间                
            nb_get_retry 3                        number of get retry 
            delay_before_retry 3                   每次重试之前延迟 3 秒  
           # connect_port 3306
      }
    }
}

节点 2 上配置
! Configuration File for keepalived
global_defs {
   notification_email {
         root@localhost
   }
   notification_email_from root@localhost
   smtp_server localhost
   smtp_connect_timeout 30
   router_id red2
}

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.140.66
    }
}

virtual_server 192.168.140.66 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.140.224{
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            #connect_port 3306
      }
    }
}

开启服务  service keepalived start
查看状态  service keepalived status
查看 VIP 是否在本节点  ip add                          //VIP:192.168.140.66 会在节点 1 上,因为 1 节点的优先级高。

六、测试 keepalived
此时在 1 节点和 2 节点上执行 ip add,会发现 VIP 192.168.140.66 会飘在 1 节点上。
然后在 1 节点上执行 service keepalived stop,然后在 2 节点上执行 ip add,会发现 vip 飘到了 2 节点。
然后在 1 节点 service keepalived start,会发现 vip 又回到了 1 节点。
到此,测试成功

关于如何理解基于 keepalived 的 MySQL 主主复制就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-19发表,共计5949字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)