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;查看状态信息是否正常 新建数据查看是否同步正常,在其中一台操作，都会同步到另外一台， 配置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负载转发，为了看效果我把负载方法改成了轮询
需要访问的服务没有一个合适的访问地址(例如云服务没有公网地址的)，就可以使用nginx的tcp反向代理来实现访问 前提：nginx需启用ngx_stream_core_module模块，在编译时加上此参数 --with-stream 即代表启用 redis反向代理示例(修改nginx配置文件)： #stream 要写http模块之前 # so_keepalive=on 配置是否在监听的端口启用“TCP keepalive”机制 # proxy_connect_timeout 定义用于与代理服务器建立连接的超时。请注意，此超时通常不能超过75秒 # max_fails=2 fail_timeout=20s; 连接失败2次，10秒内不再次尝试此连接 ······ events { worker_connections 65532; multi_accept on; use epoll; } #tcp反向代理 stream { # 定义负载均衡组 upstream redis{ hash $remote_addr consistent; server 10.12.12.12:6379 max_fails=2 fail_timeout=10s; } # 设置反向代理 server { listen 30010 so_keepalive=on; proxy_connect_timeout 60s; proxy_pass redis; } } http { ······ server { ······ } }