《Nginx核心技术》第11章:实现MySQL数据库的负载均衡

作者:冰河

星球:m6z.cn/6aeFbs

博客:binghe.gitcode.host

文章汇总:binghe.gitcode.host/md/all/all....

星球项目地址:binghe.gitcode.host/md/zsxq/int...

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:用最简短的篇幅介绍Nginx最核心的知识,掌握Nginx实现MySQL数据库的负载均衡,并能够灵活运用到实际项目中,维护高可用系统。

大家好,我是冰河~~

今天给大家介绍《Nginx核心技术》的第11章:实现MySQL数据库的负载均衡,多一句没有,少一句不行,用最简短的篇幅讲述Nginx最核心的知识,好了,开始今天的内容。

11.1 本章概述

Nginx能够实现HTTP、HTTPS协议的负载均衡,也能够实现TCP协议的负载均衡。那么,问题来了,可不可以通过Nginx实现MySQL数据库的负载均衡呢?答案是:可以。接下来,就让我们一起探讨下如何使用Nginx实现MySQL的负载均衡。

11.2 前提条件

注意:使用Nginx实现MySQL数据库的负载均衡,前提是要搭建MySQL的主主复制环境,关于MySQL主主复制环境的搭建,后续会在MySQL专题为大家详细阐述。这里,我们假设已经搭建好MySQL的主主复制环境,MySQL服务器的IP和端口分别如下所示。

  • 192.168.1.101 3306
  • 192.168.1.102 3306

通过Nginx访问MySQL的IP和端口如下所示。

  • 192.168.1.100 3306

11.3 Nginx实现MySQL负载均衡

nginx在版本1.9.0以后支持tcp的负载均衡,具体可以参照官网关于模块ngx_stream_core_module的叙述,链接地址为:nginx.org/en/docs/str...

nginx从1.9.0后引入模块ngx_stream_core_module,模块是没有编译的,需要用到编译,编译时需添加--with-stream配置参数,stream负载均衡官方配置样例如下所示。

bash 复制代码
worker_processes auto;
error_log /var/log/nginx/error.log info;

events {
    worker_connections  1024;
}

stream {
    upstream backend {
        hash $remote_addr consistent;

        server backend1.example.com:12345 weight=5;
        server 127.0.0.1:12345            max_fails=3 fail_timeout=30s;
        server unix:/tmp/backend3;
    }

    upstream dns {
       server 192.168.0.1:53535;
       server dns.example.com:53;
    }

    server {
        listen 12345;
        proxy_connect_timeout 1s;
        proxy_timeout 3s;
        proxy_pass backend;
    }

    server {
        listen 127.0.0.1:53 udp;
        proxy_responses 1;
        proxy_timeout 20s;
        proxy_pass dns;
    }
    
    server {
        listen [::1]:12345;
        proxy_pass unix:/tmp/stream.socket;
    }
}

说到这里,使用Nginx实现MySQL的负载均衡就比较简单了。我们可以参照上面官方的配置示例来配置MySQL的负载均衡。这里,我们可以将Nginx配置成如下所示。

bash 复制代码
user  nginx;
#user root;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

stream{
	upstream mysql{
		server 192.168.1.101:3306 weight=1;
		server 192.168.1.102:3306 weight=1;
	}
        
	server{
		listen 3306;
		server_name 192.168.1.100;
		proxy_pass mysql;
	}
}

配置完成后,我们就可以通过如下方式来访问MySQL数据库。

bash 复制代码
jdbc:mysql://192.168.1.100:3306/数据库名称

此时,Nginx会将访问MySQL的请求路由到IP地址为192.168.1.101和192.168.1.102的MySQL上。

好了,相信各位小伙伴们对Nginx如何实现MySQL数据库的负载均衡,有了进一步的了解,我是冰河,我们下期见~~

相关推荐
leoZ2319 小时前
Vue3 还原一个企业级后台-14-项目总结
开发语言·人工智能·后端·opencv·计算机视觉·数据挖掘·rust
刘立军9 小时前
依赖注入:禁止 AI 硬编码实例化,提升可测试性与扩展性
架构·ai编程
坤岭9 小时前
企业级Agent从0到1
后端
用户69371750013849 小时前
DeepSeek 调价正式生效:一夜涨 11 倍,靠低价薅羊毛的日子结束了
前端·人工智能·后端
用户2986985301410 小时前
从入门到自动化:TXT 转 Word 的在线工具与代码实战方案
人工智能·后端·python
Dr.kangder10 小时前
嵌入式面试总结(二十一)——C语言关键字
c语言·开发语言·面试·职场和发展·架构·虚拟化
RainCityLucky10 小时前
Java Swing 自定义组件库分享(十六)
java·笔记·后端
贰先生10 小时前
Xiuno BBS 审计之问题16:get_magic_quotes在 PHP 8.0 被移除
后端
IT_陈寒10 小时前
Vite的热更新突然失效,原来我忽略了这个配置
前端·人工智能·后端
云浪10 小时前
Milvus + RAG 实战:《红楼梦》问答助手
前端·人工智能·后端