资讯专栏INFORMATION COLUMN

LNMP+HAProxy+Keepalived负载均衡(三)- 配置文件汇总

894974231 / 4046人阅读

摘要:的操作命令将端口由修改为,修改内容如下具体配置可参考下面的配置文件重启,并查看其状态的配置文件服务器需要修改的配置,仅用参考端口根据自己的情况修改站点根目录可以加载自己的配置文件,这里我把配置文件中的内容直接替换了原本的节

Nginx的操作命令

</>复制代码

  1. vim /usr/local/nginx/conf/nginx.conf
  2. # 将端口由80修改为10001,修改内容如下:
  3. listen 10001 default_server;
  4. # 具体配置可参考下面的nginx配置文件
  5. # 重启Nginx,并查看其状态;
  6. service nginx restart & service nginx status

Nginx的配置文件(Web服务器需要修改的配置,仅用参考)

</>复制代码

  1. user www www;
  2. worker_processes auto;
  3. error_log /home/wwwlogs/nginx_error.log crit;
  4. pid /usr/local/nginx/logs/nginx.pid;
  5. #Specifies the value for maximum file descriptors that can be opened by this process.
  6. worker_rlimit_nofile 51200;
  7. events
  8. {
  9. use epoll;
  10. worker_connections 51200;
  11. multi_accept on;
  12. }
  13. http
  14. {
  15. include mime.types;
  16. default_type application/octet-stream;
  17. server_names_hash_bucket_size 128;
  18. client_header_buffer_size 32k;
  19. large_client_header_buffers 4 32k;
  20. client_max_body_size 50m;
  21. sendfile on;
  22. tcp_nopush on;
  23. keepalive_timeout 60;
  24. tcp_nodelay on;
  25. fastcgi_connect_timeout 300;
  26. fastcgi_send_timeout 300;
  27. fastcgi_read_timeout 300;
  28. fastcgi_buffer_size 64k;
  29. fastcgi_buffers 4 64k;
  30. fastcgi_busy_buffers_size 128k;
  31. fastcgi_temp_file_write_size 256k;
  32. gzip on;
  33. gzip_min_length 1k;
  34. gzip_buffers 4 16k;
  35. gzip_http_version 1.1;
  36. gzip_comp_level 2;
  37. gzip_types text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
  38. gzip_vary on;
  39. gzip_proxied expired no-cache no-store private auth;
  40. gzip_disable "MSIE [1-6].";
  41. #limit_conn_zone $binary_remote_addr zone=perip:10m;
  42. ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
  43. server_tokens off;
  44. access_log off;
  45. server
  46. {
  47. # 端口根据自己的情况修改
  48. listen 10001 default_server;
  49. server_name _;
  50. index index.html index.htm index.php default.html default.htm default.php;
  51. # 站点根目录
  52. root /home/wwwroot/publishPath;
  53. include rewrite/laravel.conf;
  54. #error_page 404 /404.html;
  55. # Deny access to PHP files in specific directory
  56. #location ~ /(wp-content|uploads|wp-includes|images)/.*.php$ { deny all; }
  57. include enable-php.conf;
  58. location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
  59. {
  60. expires 30d;
  61. }
  62. location ~ .*.(js|css)?$
  63. {
  64. expires 12h;
  65. }
  66. location ~ /.well-known {
  67. allow all;
  68. }
  69. location ~ /.
  70. {
  71. deny all;
  72. }
  73. access_log off;
  74. }
  75.     # 可以加载自己的配置文件,这里我把配置文件中的内容直接替换了原本的server节点配置;
  76. # include vhost/*.conf;
  77. }

MySQL的操作命令

</>复制代码

  1. vim /etc/my.cnf
  2. service mysql restart & service mysql status
  3. lnmp restart

MySQL的配置文件(DB服务器需要修改的配置,仅用参考)

</>复制代码

  1. [client]
  2. port = 10002
  3. socket = /tmp/mysql.sock
  4. [mysqld]
  5. port = 10002
  6. socket = /tmp/mysql.sock
  7. # 数据库文件存放位置
  8. datadir = /home/lnmp/mysql/data
  9. skip-external-locking
  10. key_buffer_size = 128M
  11. max_allowed_packet = 1M
  12. table_open_cache = 512
  13. sort_buffer_size = 2M
  14. net_buffer_length = 8K
  15. read_buffer_size = 2M
  16. read_rnd_buffer_size = 512K
  17. myisam_sort_buffer_size = 32M
  18. thread_cache_size = 64
  19. query_cache_size = 64M
  20. tmp_table_size = 64M
  21. performance_schema_max_table_instances = 4000
  22. explicit_defaults_for_timestamp = true
  23. #skip-networking
  24. max_connections = 500
  25. max_connect_errors = 100
  26. open_files_limit = 65535
  27. log-bin=mysql-bin
  28. binlog_format=mixed
  29. server-id = 51
  30. lower_case_table_names = 1
  31. expire_logs_days = 10
  32. replicate_wild_do_table=lgd_system.%
  33. # relay_log=mysqld-relay-bin
  34. log-slave-updates=YES
  35. default_storage_engine = InnoDB
  36. innodb_file_per_table = 1
  37. innodb_data_home_dir = /home/lnmp/mysql/data
  38. innodb_data_file_path = ibdata1:10M:autoextend
  39. innodb_log_group_home_dir = /home/lnmp/mysql/data
  40. innodb_buffer_pool_size = 512M
  41. innodb_log_file_size = 128M
  42. innodb_log_buffer_size = 8M
  43. innodb_flush_log_at_trx_commit = 1
  44. innodb_lock_wait_timeout = 50
  45. [mysqldump]
  46. # 数据库备份账户,自行创建并分配相应的权限
  47. user=bakuser
  48. password=ZXdfty^&
  49. quick
  50. max_allowed_packet = 16M
  51. [mysql]
  52. no-auto-rehash
  53. [myisamchk]
  54. key_buffer_size = 128M
  55. sort_buffer_size = 2M
  56. read_buffer = 2M
  57. write_buffer = 2M
  58. [mysqlhotcopy]
  59. interactive-timeout

HAProxy的操作命令

</>复制代码

  1. # 负载状态监测:
  2. # Web服务器HAProxy - http://192.168.6.111:8080/web
  3. # DB服务器HAProxy - http://192.168.6.211:8080/db
  4. # 如果需要通过外网访问,需要把8080端口映射到外网端口即可。
  5. # 常用命令:
  6. vim /etc/haproxy/haproxy.cfg
  7. service haproxy restart & service haproxy status

HAProxy的配置文件(Web服务器)

</>复制代码

  1. #---------------------------------------------------------------------
  2. # Global settings
  3. #---------------------------------------------------------------------
  4. global
  5. # 全局的日志配置,使用log关键字,指定使用127.0.0.1上的syslog服务中的local0日志设备,记录日志等级为info的日志
  6. log 127.0.0.1 local3
  7. # 软件工作目录
  8. chroot /var/lib/haproxy
  9. # haproxy的pid存放路径,启动进程的用户必须有权限访问此文件
  10. pidfile /usr/local/haproxy/haproxy.pid
  11. # 最大连接数,默认4000
  12. maxconn 30000
  13. # 所属用户
  14. user haproxy
  15. # 所属组
  16. group haproxy
  17. # 以守护进程方式运行haproxy
  18. daemon
  19. # turn on stats unix socket
  20. # stats socket /var/lib/haproxy/stats    # socket路径
  21. #---------------------------------------------------------------------
  22. # common defaults that all the "listen" and "backend" sections will
  23. # use if not designated in their block
  24. #---------------------------------------------------------------------
  25. defaults
  26. mode http    # 默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
  27. log global    # 采用全局定义的日志
  28. option httplog    # 启用日志记录HTTP请求,默认haproxy日志记录是不记录HTTP请求日志
  29. option dontlognull    # 不记录健康检查的日志信息
  30. option http-server-close # 每次请求完毕后主动关闭http通道
  31. # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
  32. option forwardfor except 127.0.0.0/8
  33. option redispatch    # serverId对应的服务器挂掉后,强制定向到其他健康的服务器
  34. retries 3 # 3次连接失败就认为服务不可用,也可以通过后面设置
  35. timeout http-request 10s      # http请求超时时间
  36. timeout queue 1m       # 一个请求在队列里的超时时间
  37. timeout connect 10s      # 连接超时
  38. timeout client 1m       # 客户端连接超时
  39. timeout server 1m       # 服务器连接超时
  40. timeout http-keep-alive 10s      # 设置http-keep-alive的超时时间
  41. timeout check 10s      # 检测超时
  42. maxconn 3000    # 最大连接数
  43. #---------------------------------------------------------------------
  44. # main frontend which proxys to the backends
  45. #---------------------------------------------------------------------
  46. # 前端配置
  47. frontend main *:80
  48. acl url_static path_beg -i /static /images /javascript /stylesheets
  49. acl url_static path_end -i .jpg .gif .png .css .js
  50. use_backend static if url_static
  51. default_backend servers
  52. #---------------------------------------------------------------------
  53. # static backend for serving up images, stylesheets and such
  54. #---------------------------------------------------------------------
  55. # 后台静态文件服务配置
  56. backend static
  57. balance roundrobin
  58. server    static1 192.168.6.100:10001 check inter 2000 fall 3 weight 50
  59. server    static2 192.168.6.110:10001 check inter 2000 fall 3 weight 50
  60. #---------------------------------------------------------------------
  61. # round robin balancing between the various backends
  62. #---------------------------------------------------------------------
  63. # 后台服务配置
  64. backend servers
  65. balance roundrobin
  66. # 添加cookie配置,将某客户端引导到之前为其服务过的后端服务器上,即和后端某服务器保持联系,防止登录验证失效
  67. cookie app_cook insert nocache
  68. server    app1 192.168.6.100:10001 check inter 2000 fall 3 weight 50 cookie server1
  69. server    app2 192.168.6.110:10001 check inter 2000 fall 3 weight 50 cookie server2
  70. # HAProxy状态监控服务配置
  71. listen stats
  72. # 绑定端口
  73. bind *:8080
  74. mode http
  75. # stats enable
  76. # 访问地址:192.168.6.100:8080/web 和 192.168.6.110:8080/web
  77. stats uri /web
  78. stats realm Global statistics
  79. # 管理员账户
  80. stats auth hapadmin:1qazse$#2

HAProxy的配置文件(DB服务器)

</>复制代码

  1. #---------------------------------------------------------------------
  2. # Global settings
  3. #---------------------------------------------------------------------
  4. global
  5. pidfile /var/run/haproxy.pid
  6. maxconn 30000
  7. user haproxy
  8. group haproxy
  9. daemon
  10. nbproc    1
  11. #---------------------------------------------------------------------
  12. # common defaults that all the "listen" and "backend" sections will
  13. # use if not designated in their block
  14. #---------------------------------------------------------------------
  15. defaults
  16. mode tcp
  17. option redispatch
  18. retries 3
  19. timeout queue 1m
  20. timeout connect 10s
  21. timeout client 1m
  22. timeout server 1m
  23. timeout check 10s
  24. maxconn 4096
  25. option abortonclose
  26. frontend main
  27. bind *:3306
  28.   default_backend servers
  29. backend servers
  30. server    mysql1 192.168.6.200:10002 check inter 3000 fall 3 weight 50
  31. server    mysql2 192.168.6.210:10002 check inter 3000 fall 3 weight 50
  32. # 监控访问地址:192.168.6.210:8080/db 和 192.168.6.200:8080/db
  33. listen stats
  34. mode http
  35. bind 0.0.0.0:8080
  36. stats enable
  37. stats uri /db
  38. stats realm Global statistics
  39. stats auth dbadmin:1qazse$#2

Keeplived的操作命令

</>复制代码

  1. # 查看已安装的Keepalived的版本:
  2. keepalived -v
  3. # 查看配置:
  4. cat /etc/keepalived/keepalived.conf
  5. # 编辑配置文件:
  6. vim /etc/keepalived/keepalived.conf
  7. # 测试高可用的远程访问:
  8. mysql -h 远程数据库ip地址 -P 端口 -u 用户名 -p
  9. mysql -h 192.168.6.200 -P 3306 -u dbuser -p
  10. # 开通服务器间的 vrrp 协议通信,用于Keepalived通信:
  11. firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface 网卡名称 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;
  12. firewall-cmd --reload;
  13. # 服务器的网卡名称请根据自己的情况修改,
  14. # INPUT代表接收224.0.0.18的报文。
  15. # 在VIP服务器上测试VIP漂移:
  16. ip addr | grep 网卡名称
  17. # 停止VIP所在服务器的keepalived服务,并查看VIP是否移除,并查看备用服务器是否获取到VIP:
  18. service keepalived stop && service keepalived status
  19. ip addr | grep 网卡名称
  20. # 在之前停止keepalived服务的服务器上开启keepalived服务,查看VIP是否已取回:
  21. service keepalived start && service keepalived status
  22. ip addr | grep 网卡名称

Keeplived的配置(Web服务器)

Web主服务器的配置:

</>复制代码

  1. # Master的配置内容:
  2. ! Configuration File for keepalived
  3. global_defs {
  4. notification_email {
  5. example@domain.com    # 收邮件人,可以定义多个
  6. }
  7. notification_email_from HaproxyMaster@web.haproxy    # 发件人,可伪装
  8. smtp_server 127.0.0.1    # 发送邮件的服务器地址
  9. smtp_connect_timeout 30    # 连接超时时间
  10. no_email_faults
  11. router_id WebMaster
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_haproxy { # HAProxy服务监测脚本
  18. script "/etc/keepalived/check_haproxy.sh"
  19. interval 2
  20. weight 2
  21. }
  22. vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器
  23. state MASTER # 由初始状态状态转换为master状态
  24. interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改
  25. virtual_router_id 100    # 虚拟路由的id号,一般不能大于255的
  26. priority 100 # 优先级,数字越大,优先级越高,主比次大
  27. advert_int 1 # 初始化通告
  28. authentication { # 认证机制
  29. auth_type PASS
  30. auth_pass 666 # 密码,自行更改,主备一致即可
  31. }
  32. track_script {
  33. chk_haproxy
  34. }
  35. virtual_ipaddress { # Web服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。
  36. #/ brd dev scope label
  37. #192.168.200.18/24 dev eth2 label eth2:1
  38. 192.168.6.111
  39. }
  40.     notify_master "/etc/keepalived/clean_arp.sh 192.168.6.111"
  41. }

Web备服务器的配置:

</>复制代码

  1. # Backup的配置内容:
  2. ! Configuration File for keepalived
  3. global_defs {
  4. notification_email {
  5. example@domain.com    # 收邮件人,可以定义多个
  6. }
  7. notification_email_from HaproxyBackup@web.haproxy    # 发件人,可伪装
  8. smtp_server 127.0.0.1    # 发送邮件的服务器地址
  9. smtp_connect_timeout 30    # 连接超时时间
  10. no_email_faults
  11. router_id WebBackup
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_haproxy { # HAProxy服务监测脚本
  18. script "/etc/keepalived/check_haproxy.sh"
  19. interval 2
  20. weight 2
  21. }
  22. vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器
  23. state BACKUP # 由初始状态状态转换为backup状态
  24. interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改
  25. virtual_router_id 100    # 虚拟路由的id号,一般不能大于255的
  26. priority 90 # 优先级,数字越大,优先级越高,主比次大
  27. advert_int 1 # 初始化通告
  28. authentication { # 认证机制
  29. auth_type PASS
  30. auth_pass 666 # 密码,自行更改,主备一致即可
  31. }
  32. track_script {
  33. chk_haproxy
  34. }
  35. virtual_ipaddress { # Web服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。
  36. #/ brd dev scope label
  37. #192.168.200.18/24 dev eth2 label eth2:1
  38. 192.168.6.111
  39. }
  40.     notify_master "/etc/keepalived/clean_arp.sh 192.168.6.111"
  41. }

Keeplived的配置(DB服务器)

DB主服务器的配置:

</>复制代码

  1. # Master的配置内容:
  2. ! Configuration File for keepalived
  3. global_defs {
  4. notification_email {
  5. example@domain.com    # 收邮件人,可以定义多个
  6. }
  7. notification_email_from HaproxyMaster@db.haproxy    # 发件人,可伪装
  8. smtp_server 127.0.0.1    # 发送邮件的服务器地址
  9. smtp_connect_timeout 30    # 连接超时时间
  10. no_email_faults
  11. router_id DBMaster
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_haproxy { # HAProxy服务监测脚本
  18. script "/etc/keepalived/check_haproxy.sh"
  19. interval 2
  20. weight 2
  21. }
  22. vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器
  23. state MASTER # 由初始状态状态转换为master状态
  24. interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改
  25. virtual_router_id 99    # 虚拟路由的id号,一般不能大于255的
  26. priority 100 # 优先级,数字越大,优先级越高,主比次大
  27. advert_int 1 # 初始化通告
  28. authentication { # 认证机制
  29. auth_type PASS
  30. auth_pass 666 # 密码,自行更改,主备一致即可
  31. }
  32. track_script {
  33. chk_haproxy
  34. }    
  35. virtual_ipaddress { # DB服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。
  36. #/ brd dev scope label
  37. #192.168.200.18/24 dev eth2 label eth2:1
  38. 192.168.6.211
  39. }
  40. notify_master "/etc/keepalived/clean_arp.sh 192.168.6.211"
  41. }

DB备服务器的配置:

</>复制代码

  1. # Backup的配置内容:
  2. ! Configuration File for keepalived
  3. global_defs {
  4. notification_email {
  5. example@domain.com    # 收邮件人,可以定义多个
  6. }
  7. notification_email_from HaproxyBackup@db.haproxy    # 发件人,可伪装
  8. smtp_server 127.0.0.1     # 发送邮件的服务器地址
  9. smtp_connect_timeout 30    # 连接超时时间
  10. no_email_faults
  11. router_id DBBackup
  12. vrrp_skip_check_adv_addr
  13. vrrp_strict
  14. vrrp_garp_interval 0
  15. vrrp_gna_interval 0
  16. }
  17. vrrp_script chk_haproxy { # HAProxy服务监测脚本
  18. script "/etc/keepalived/check_haproxy.sh"
  19. interval 2
  20. weight 2
  21. }
  22. vrrp_instance VI_1 { # 每一个vrrp_instance就是定义一个虚拟路由器
  23. state BACKUP     # 由初始状态状态转换为master状态
  24. interface 网卡名称 # 网卡名称,如eth0,根据自己的情况修改
  25. virtual_router_id 99    # 虚拟路由的id号,一般不能大于255的
  26. priority 90 # 优先级,数字越大,优先级越高,主比次大
  27. advert_int 1 # 初始化通告
  28. authentication {     # 认证机制
  29. auth_type PASS
  30. auth_pass 666 # 密码,自行更改,主备一致即可
  31. }
  32. track_script {
  33. chk_haproxy
  34. }    
  35. virtual_ipaddress { # DB服务的虚拟ip地址:vip,前面提到的备用的虚拟IP。
  36. #/ brd dev scope label
  37. #192.168.200.18/24 dev eth2 label eth2:1
  38. 192.168.6.211
  39. }
  40. notify_master "/etc/keepalived/clean_arp.sh 192.168.6.211"
  41. }

创建Keepalived调用的脚本

操作命令

</>复制代码

  1. mkdir /etc/keepalived/
  2. echo "" > /etc/keepalived/check_haproxy.sh
  3. echo "" > /etc/keepalived/clean_arp.sh
  4. chmod +x /etc/keepalived/*.sh
  5. # 然后编辑两个脚本的内容,如下

/etc/keepalived/check_haproxy.sh

</>复制代码

  1. #!/bin/bash
  2. # 判断haproxy是否已经启动
  3. if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  4. # 如果没有启动,则启动haproxy程序
  5. haproxy -f /etc/haproxy/haproxy.cfg
  6. fi
  7. # 睡眠两秒钟,等待haproxy完全启动
  8. sleep 2
  9. # 判断haproxy是否已经启动
  10. if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
  11. # 如果haproxy没有启动起来,则将keepalived停掉,则VIP自动漂移到另外一台haproxy机器,实现了对haproxy的高可用
  12. service keepalived stop

/etc/keepalived/clean_arp.sh

</>复制代码

  1. #!/bin/sh
  2. VIP=$1
  3. GATEWAY=192.168.6.255 # 本机的网卡网关地址
  4. /sbin/arping -I ens160 -c 5 -s $VIP $GATEWAY &>/dev/null

发布文件的配置

</>复制代码

  1. # 站点根目录赋权
  2. chmod -R 777 /home/wwwroot/publishPath
  3. # PHP环境配置
  4. vim /home/wwwroot/publishPath/.env
  5. # 编辑配置内容:
  6. APP_DEBUG=false
  7. # Web的内网VIP,如需外网访问,则需要将192.168.6.111映射到外网,然后将该处的IP改成外网IP
  8. APP_URL=http://192.168.6.111
  9. DB_CONNECTION=mysql
  10. # DB的内网VIP
  11. DB_HOST=192.168.6.211
  12. # DB的内网端口
  13. DB_PORT=3306
  14. # 数据库名称
  15. DB_DATABASE=dbName
  16. # 数据库用户名
  17. DB_USERNAME=dbuser
  18. # 数据库密码
  19. DB_PASSWORD=dbpwd
  20. # 其他配置选项使用默认设置,这里省略。
  21. # 配置保存退出后重启php服务:
  22. service php-fpm restart

关于IP的说明
以上说到的IP都是内网IP,所有的配置都使用内网IP即可。如需外网访问,只需要把两个虚拟IP和端口映射到外网即可(注意修改php配置的APP_URL)。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40282.html

相关文章

  • LNMP+HAProxy+Keepalived负载均衡(二)- 基础服务准备

    摘要:日志服务修改日志服务配置并重启日志服务编辑系统日志配置,指定包含的配置文件路径和规则为创建一个独立的配置文件编辑配置文件的内容如下取消注释取消注释与中的配置对应如果不加,则除了在中写入日志外,也会写入文件配置的主配置文件,开启远程日志修改配 日志服务 修改日志服务配置并重启日志服务; vim /etc/rsyslog.conf 编辑系统日志配置,指定包含的配置文件路径和规则: ...

    zhangke3016 评论0 收藏0

发表评论

0条评论

894974231

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<