Mysql5.7基于GTID部署数据库主主模式,并配置nginx负载均衡转发访问

技术积累

centos7系统下 mysql5.7使用gtid复制,搭建主主模式(互指为主从),也就是双主,同时读写


服务器2台:第一台192.168.16.200 (主从) | 第二台192.168.16.201 (主从)
mysql版本:mysql-5.7.34-linux-glibc2.12


准备:2台服务器上都安装好mysql


修改(第一台)mysql配置文件,然后重启下服务

##第一台

·······
# gtid
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
server-id=200

auto_increment_offset = 1
auto_increment_increment = 2
relay_log_recovery=ON
relay_log_info_repository=TABLE
master_info_repository=TABLE
sync_master_info=1
master_verify_checksum=1
slave_sql_verify_checksum=1
slave_parallel_workers=2
slave_parallel_type=logical_clock

#binlog
log-bin = master-bin
log-slave-updates=1
binlog_format=Row
log_bin_trust_function_creators=1

# 不同步的数据库
binlog-ignore-db=mysql,sys,performance_schema,information_schema

# 不复制的数据库
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=sys.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=information_schema.%
·······

修改(第二台)mysql配置文件,然后重启下服务

##第二台

·······
# gtid
gtid-mode=on
enforce-gtid-consistency=on
log-slave-updates=1
server-id=201

auto_increment_offset = 2
auto_increment_increment = 2
relay_log_recovery=ON
relay_log_info_repository=TABLE
master_info_repository=TABLE
sync_master_info=1
master_verify_checksum=1
slave_sql_verify_checksum=1
slave_parallel_workers=2
slave_parallel_type=logical_clock

#binlog
log-bin = master-bin
log-slave-updates=1
binlog_format=Row
log_bin_trust_function_creators=1

# 不同步的数据库
binlog-ignore-db=mysql,sys,performance_schema,information_schema

# 不复制的数据库
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=sys.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=information_schema.%
.%
·······

登录2台mysql,创建用于同步的用户

##第一台
mysql> grant replication slave on *.* to 'master'@'%' identified by "1q2w3e4r";

##第二台
mysql> grant replication slave on *.* to 'master'@'%' identified by "1q2w3e4r";

登录2台mysql,分别配置同步用户连接到对方mysql

##第一台

mysql> stop slave;
mysql> change master to master_host='192.168.16.201' ,master_user='master',master_password='1q2w3e4r',master_auto_position=1;
mysql> start slave;
mysql> show slave status \G;

##第二台
mysql> stop slave;
mysql> change master to master_host='192.168.16.200' ,master_user='master',master_password='1q2w3e4r',master_auto_position=1;
mysql> start slave;
mysql> show slave status \G;

查看状态信息是否正常

mysql-mm.png


新建数据查看是否同步正常,在其中一台操作,都会同步到另外一台,

mysql-mm1.png


配置nginx mysql的tcp转发

## 修改nginx配置文件,在http段外面加上
······
stream{
    upstream mysql {
       # 负载方法自定义
       hash $remote_addr consistent;
       server 192.168.16.200:3306 weight=5 max_fails=3 fail_timeout=30s;
       server 192.168.16.201:3306 weight=5 max_fails=3 fail_timeout=30s;
    }
    server {
       listen 3333;
       proxy_connect_timeout 1s;
       proxy_timeout 900s;
       proxy_pass mysql;
    }
}

http{
  ······
}

连接测试,在201上面配置nginx负载转发,为了看效果我把负载方法改成了轮询

mysql-mm2.png

相关文章

留言