当前位置:  首页>> 技术小册>> Nginx典型应用场景

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

  1. 192.168.1.101 3306
  2. 192.168.1.102 3306

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

  1. 192.168.1.100 3306

Nginx实现MySQL负载均衡

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

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

  1. worker_processes auto;
  2. error_log /var/log/nginx/error.log info;
  3. events {
  4. worker_connections 1024;
  5. }
  6. stream {
  7. upstream backend {
  8. hash $remote_addr consistent;
  9. server backend1.example.com:12345 weight=5;
  10. server 127.0.0.1:12345 max_fails=3 fail_timeout=30s;
  11. server unix:/tmp/backend3;
  12. }
  13. upstream dns {
  14. server 192.168.0.1:53535;
  15. server dns.example.com:53;
  16. }
  17. server {
  18. listen 12345;
  19. proxy_connect_timeout 1s;
  20. proxy_timeout 3s;
  21. proxy_pass backend;
  22. }
  23. server {
  24. listen 127.0.0.1:53 udp;
  25. proxy_responses 1;
  26. proxy_timeout 20s;
  27. proxy_pass dns;
  28. }
  29. server {
  30. listen [::1]:12345;
  31. proxy_pass unix:/tmp/stream.socket;
  32. }
  33. }

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

  1. user nginx;
  2. #user root;
  3. worker_processes 1;
  4. error_log /var/log/nginx/error.log warn;
  5. pid /var/run/nginx.pid;
  6. events {
  7. worker_connections 1024;
  8. }
  9. http {
  10. include /etc/nginx/mime.types;
  11. default_type application/octet-stream;
  12. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  13. '$status $body_bytes_sent "$http_referer" '
  14. '"$http_user_agent" "$http_x_forwarded_for"';
  15. access_log /var/log/nginx/access.log main;
  16. sendfile on;
  17. #tcp_nopush on;
  18. keepalive_timeout 65;
  19. #gzip on;
  20. include /etc/nginx/conf.d/*.conf;
  21. }
  22. stream{
  23. upstream mysql{
  24. server 192.168.1.101:3306 weight=1;
  25. server 192.168.1.102:3306 weight=1;
  26. }
  27. server{
  28. listen 3306;
  29. server_name 192.168.1.100;
  30. proxy_pass mysql;
  31. }
  32. }

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

  1. jdbc:mysql://192.168.1.100:3306/数据库名称

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


该分类下的相关小册推荐: