mysql8.0配置双机热备及Haproxy负载均衡详细教程
作者:smice分类:Other
日期:2024-04-26 11:42:572024-04-26阅读:89

记录一下mysql8.0配置双机热备后使用Haproxy实现负载均衡,本文重点在mysql配置及Haproxy配置,忽略mysql安装等过程。

一、服务器A配置

配置my.cnf

假设有A、B两台服务器,A服务器ip地址为192.168.0.1,B服务器ip地址为192.168.0.2,数据库版本都为8.0。
A的my.cnf配置如下:

server-id=1 #mysql实例的唯一标识,不能重复
log-bin=mysql-bin #启用binlog,并将binlog日志前缀指定为mysql-bin,mysql双机热备数据同步依赖binlog记录数据更改的操作
binlog_format=ROW #binlog记录的格式,可选row(行)或者mixed(混合)
binlog-do-db=test #记录指定数据库的变更,有多个库就多行,每个库一行,如果binlog-do-db和bin-ignore-db都未配置则默认同步所有库
binlog-do-db=test1 
binlog-ignore-db=mysql #忽略指定数据库的变更,与binlog-do-db互斥,如过两个都填,只有binlog-do-db生效
auto-increment-increment=2 #自增列的增值量,用于避免自增列id重复,填服务器实例的数量
auto-increment-offset=1 #自增列的偏移量,A服务器为1,则B服务器为2
relay_log=mysql-relay-bin #开启中继日志
log_slave_updates=1 #将主服务器接收并应用的更改同时记录到本地的二进制日志中
查看数据库master信息

A服务器mysql执行:

show master status;

记录执行结果的File和Position,后面配置master要用:

File: mysql-bin.000001
Position: 157
创建用于主从复制的用户

用户名跟密码根据自己需求替换

create user 'copy'@'%' identified with mysql_native_password by 'copyuser#2024';
gran replication slave on *.* to 'copy'@'%';
flush privileges;

二、服务器B配置

配置my.cnf

B的my.cnf配置如下,区别只是server-id和auto-increment-offset不同:

server-id=1 #mysql实例的唯一标识,不能重复
log-bin=mysql-bin #启用binlog,并将binlog日志前缀指定为mysql-bin,mysql双机热备数据同步依赖binlog记录数据更改的操作
binlog_format=ROW #binlog记录的格式,可选row(行)或者mixed(混合)
binlog-do-db=test #记录指定数据库的变更,有多个库就多行,每个库一行,如果binlog-do-db和bin-ignore-db都未配置则默认同步所有库
binlog-do-db=test1 
binlog-ignore-db=mysql #忽略指定数据库的变更,与binlog-do-db互斥,如过两个都填,只有binlog-do-db生效
auto-increment-increment=2 #自增列的增值量,用于避免自增列id重复,填服务器实例的数量
auto-increment-offset=1 #自增列的偏移量,A服务器为1,则B服务器为2
relay_log=mysql-relay-bin #开启中继日志
log_slave_updates=1 #将主服务器接收并应用的更改同时记录到本地的二进制日志中

B的my.cnf配置如下:

server-id=2 #mysql实例的唯一标识,不能重复
log-bin=mysql-bin #启用binlog,并将binlog日志前缀指定为mysql-bin,mysql双机热备数据同步依赖binlog记录数据更改的操作
binlog_format=ROW #binlog记录的格式,可选row(行)或者mixed(混合)
binlog-do-db=test #记录指定数据库的变更,有多个库就多行,每个库一行,如果binlog-do-db和bin-ignore-db都未配置则默认同步所有库
binlog-do-db=test1 
binlog-ignore-db=mysql #忽略指定数据库的变更,与binlog-do-db互斥,如过两个都填,只有binlog-do-db生效
auto-increment-increment=2 #自增列的增值量,用于避免自增列id重复,填服务器实例的数量
auto-increment-offset=2 #自增列的偏移量,A服务器为1,则B服务器为2
relay_log=mysql-relay-bin #开启中继日志
log_slave_updates=1 #将主服务器接收并应用的更改同时记录到本地的二进制日志中
查看数据库master信息

B服务器mysql执行:

show master status;

记录执行结果的File和Position,后面配置master要用:

File: mysql-bin.000001
Position: 157
创建用于主从复制的用户

用户名跟密码根据自己需求替换

create user 'copy'@'%' identified with mysql_native_password by 'copyuser#2024';
gran replication slave on *.* to 'copy'@'%';
flush privileges;

三、配置主主复制

设置A同步B

master_host填A服务器ip
master_user填B服务之前设置的同步用的用户名
master_password填B服务之前设置的同步用的密码
master_log_file填上面查看A服务master信息的file
master_log_pos填上面查看A服务master信息的position

change master to
    master_host='192.168.0.2',
    master_user='copy',
    master_password='copyuser#2024',
    master_log_file='mysql-bin.000001',
    master_log_pos=157;
启动同步进程
start slave ;
查看同步进程状态

那个\G是用于美化输出格式的,不加也可以。

show slave status\G

Slave_IO_Running和Slave_SQL_Running都为Yes说明同步进程正常

设置B同步A

master_host填A服务器ip
master_user填B服务之前设置的同步用的用户名
master_password填B服务之前设置的同步用的密码
master_log_file填上面查看A服务master信息的file
master_log_pos填上面查看A服务master信息的position

change master to
    master_host='192.168.0.1',
    master_user='copy',
    master_password='copyuser#2024',
    master_log_file='mysql-bin.000001',
    master_log_pos=157;
启动同步进程
start slave ;
查看同步进程状态

那个\G是用于美化输出格式的,不加也可以。

show slave status\G

Slave_IO_Running和Slave_SQL_Running都为Yes说明同步进程正常

测试主主复制

在A服务的msyql中创建一个test库,正常在B服务的mysql中能看到该库。
在B服务的msyql中创建一个test1库,正常在A服务的mysql中也能看到该库。
如果都能同步,说明配置正常,到此双机热备配置完成。

四、配置Haproxy负载均衡

安装haproxy,这里使用的是centos7,直接yum install haproxy即可。
修改/etc/haproxy/haproxy.cfg ,如下:

global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     4000
    user        haproxy
    group       haproxy
    daemon
    stats socket /var/lib/haproxy/stats
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option http-server-close
    option forwardfor       except 127.0.0.0/8
    option                  redispatch
    retries                 3
    timeout http-request    10s
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout http-keep-alive 10s
    timeout check           10s
    maxconn                 3000

frontend mysql_frontend
    bind *:3307
    mode tcp
    default_backend mysql_backend

backend mysql_backend
    mode tcp
    balance  roundrobin
    server  mysql1 10.0.20.16:3306 check
    server  mysql2 10.0.8.12:3306 check

主要是修改 frontend mysql_frontend的bind端口和backend mysql_backend,有几个服务就加到backend mysql_backend的server。balance是负载均衡方式这里是轮训。
主要有以下几种,按需选择:
roundrobin:这是默认的算法,它按顺序轮流将请求分发给服务器。这种方法简单且公平,尤其适合没有持久连接的场景。
leastconn:选择当前活跃连接数最少的服务器。这个算法适合那些持有连接时间较长的应用,比如数据库连接。
source:根据客户端IP地址的散列值来选择服务器,确保来自同一IP的请求总是被分发到同一个服务器上,适用于需要会话保持的应用。
uri:根据请求的URI进行散列,可以用于实现URL路由。
url_param:根据请求中的URL参数进行散列,用于实现更复杂的会话保持。
hdr(name):根据HTTP请求头中的某个指定的头字段的值来进行选择。

弹幕评论