LNMP+HAProxy+Keepalived負載均衡(三)- 配置文件彙總

  • Nginx的操做命令javascript

    vim /usr/local/nginx/conf/nginx.conf
    # 將端口由80修改成10001,修改內容以下:
    listen 10001 default_server;
    # 具體配置可參考下面的nginx配置文件
    
    # 重啓Nginx,並查看其狀態;
    service nginx restart & service nginx status
  • Nginx的配置文件(Web服務器須要修改的配置,僅用參考)php

    user  www www;
    worker_processes auto;
    error_log  /home/wwwlogs/nginx_error.log  crit;
    pid        /usr/local/nginx/logs/nginx.pid;
    
    #Specifies the value for maximum file descriptors that can be opened by this process.
    worker_rlimit_nofile 51200;
    events
    {
       use epoll;
       worker_connections 51200;
       multi_accept on;
    }
    http
    {
       include       mime.types;
       default_type  application/octet-stream;
       server_names_hash_bucket_size 128;
       client_header_buffer_size 32k;
       large_client_header_buffers 4 32k;
       client_max_body_size 50m;
    
       sendfile   on;
       tcp_nopush on;
       keepalive_timeout 60;
       tcp_nodelay on;
    
       fastcgi_connect_timeout 300;
       fastcgi_send_timeout 300;
       fastcgi_read_timeout 300;
       fastcgi_buffer_size 64k;
       fastcgi_buffers 4 64k;
       fastcgi_busy_buffers_size 128k;
       fastcgi_temp_file_write_size 256k;
    
       gzip on;
       gzip_min_length  1k;
       gzip_buffers     4 16k;
       gzip_http_version 1.1;
       gzip_comp_level 2;
       gzip_types     text/plain application/javascript application/x-javascript text/javascript text/css application/xml application/xml+rss;
       gzip_vary on;
       gzip_proxied   expired no-cache no-store private auth;
       gzip_disable   "MSIE [1-6]\.";
       #limit_conn_zone $binary_remote_addr zone=perip:10m;
       ##If enable limit_conn_zone,add "limit_conn perip 10;" to server section.
    
       server_tokens off;
       access_log off;
    
       server
       {
           # 端口根據本身的狀況修改
           listen 10001 default_server;
           server_name _;
           index index.html index.htm index.php default.html default.htm default.php;
           # 站點根目錄
           root  /home/wwwroot/publishPath;
    
           include rewrite/laravel.conf;
           #error_page   404   /404.html;
    
           # Deny access to PHP files in specific directory
           #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
    
           include enable-php.conf;
    
           location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
           {
               expires      30d;
           }
           location ~ .*\.(js|css)?$
           {
               expires      12h;
           }
           location ~ /.well-known {
               allow all;
           }
           location ~ /\.
           {
               deny all;
           }
           access_log off;
       }
        # 能夠加載本身的配置文件,這裏我把配置文件中的內容直接替換了本來的server節點配置;
       # include vhost/*.conf;
    }
  • MySQL的操做命令css

    vim /etc/my.cnf
    service mysql restart & service mysql status
    lnmp restart
  • MySQL的配置文件(DB服務器須要修改的配置,僅用參考)html

    [client]
    port        = 10002
    socket      = /tmp/mysql.sock
    
    [mysqld]
    port        = 10002
    socket      = /tmp/mysql.sock
    # 數據庫文件存放位置
    datadir = /home/lnmp/mysql/data
    skip-external-locking
    key_buffer_size = 128M
    max_allowed_packet = 1M
    table_open_cache = 512
    sort_buffer_size = 2M
    net_buffer_length = 8K
    read_buffer_size = 2M
    read_rnd_buffer_size = 512K
    myisam_sort_buffer_size = 32M
    thread_cache_size = 64
    query_cache_size = 64M
    tmp_table_size = 64M
    performance_schema_max_table_instances = 4000
    
    explicit_defaults_for_timestamp = true
    #skip-networking
    max_connections = 500
    max_connect_errors = 100
    open_files_limit = 65535
    
    log-bin=mysql-bin
    binlog_format=mixed
    server-id = 51
    lower_case_table_names = 1
    expire_logs_days = 10
    replicate_wild_do_table=lgd_system.%
    # relay_log=mysqld-relay-bin
    log-slave-updates=YES
    
    default_storage_engine = InnoDB
    innodb_file_per_table = 1
    innodb_data_home_dir = /home/lnmp/mysql/data
    innodb_data_file_path = ibdata1:10M:autoextend
    innodb_log_group_home_dir = /home/lnmp/mysql/data
    innodb_buffer_pool_size = 512M
    innodb_log_file_size = 128M
    innodb_log_buffer_size = 8M
    innodb_flush_log_at_trx_commit = 1
    innodb_lock_wait_timeout = 50
    
    [mysqldump]
    # 數據庫備份帳戶,自行建立並分配相應的權限
    user=bakuser
    password=ZXdfty^&
    quick
    max_allowed_packet = 16M
    
    [mysql]
    no-auto-rehash
    
    [myisamchk]
    key_buffer_size = 128M
    sort_buffer_size = 2M
    read_buffer = 2M
    write_buffer = 2M
    
    [mysqlhotcopy]
    interactive-timeout
  • HAProxy的操做命令前端

    # 負載狀態監測:
    # Web服務器HAProxy - http://192.168.6.111:8080/web
    # DB服務器HAProxy - http://192.168.6.211:8080/db
    # 若是須要經過外網訪問,須要把8080端口映射到外網端口便可。
    # 經常使用命令:
    vim /etc/haproxy/haproxy.cfg
    service haproxy restart & service haproxy status
  • HAProxy的配置文件(Web服務器)java

    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
       # 全局的日誌配置,使用log關鍵字,指定使用127.0.0.1上的syslog服務中的local0日誌設備,記錄日誌等級爲info的日誌
       log         127.0.0.1 local3
       # 軟件工做目錄
       chroot      /var/lib/haproxy
       # haproxy的pid存放路徑,啓動進程的用戶必須有權限訪問此文件
       pidfile     /usr/local/haproxy/haproxy.pid
       # 最大鏈接數,默認4000
       maxconn     30000
       # 所屬用戶
       user        haproxy
       # 所屬組
       group       haproxy
       # 以守護進程方式運行haproxy
       daemon
       # turn on stats unix socket
       # stats socket /var/lib/haproxy/stats    # socket路徑
    
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
       mode                    http    # 默認的模式mode { tcp|http|health },tcp是4層,http是7層,health只會返回OK
       log                     global    # 採用全局定義的日誌
       option                  httplog    # 啓用日誌記錄HTTP請求,默認haproxy日誌記錄是不記錄HTTP請求日誌
       option                  dontlognull    # 不記錄健康檢查的日誌信息
       option http-server-close    # 每次請求完畢後主動關閉http通道
       
       # 若是後端服務器須要得到客戶端真實ip須要配置的參數,能夠從Http Header中得到客戶端ip
       option forwardfor       except 127.0.0.0/8
       option                  redispatch    # serverId對應的服務器掛掉後,強制定向到其餘健康的服務器
       retries                 3    # 3次鏈接失敗就認爲服務不可用,也能夠經過後面設置 
       timeout http-request    10s      # http請求超時時間
       timeout queue           1m       # 一個請求在隊列裏的超時時間
       timeout connect         10s      # 鏈接超時
       timeout client          1m       # 客戶端鏈接超時
       timeout server          1m       # 服務器鏈接超時
       timeout http-keep-alive 10s      # 設置http-keep-alive的超時時間
       timeout check           10s      # 檢測超時
       maxconn                 3000    # 最大鏈接數
    
    #---------------------------------------------------------------------
    # main frontend which proxys to the backends
    #---------------------------------------------------------------------
    # 前端配置
    frontend  main *:80
       acl url_static       path_beg       -i /static /images /javascript /stylesheets
       acl url_static       path_end       -i .jpg .gif .png .css .js
    
       use_backend static          if url_static
       default_backend             servers
    
    #---------------------------------------------------------------------
    # static backend for serving up images, stylesheets and such
    #---------------------------------------------------------------------
    # 後臺靜態文件服務配置
    backend static
       balance     roundrobin
       server    static1 192.168.6.100:10001 check inter 2000 fall 3 weight 50
       server    static2 192.168.6.110:10001 check inter 2000 fall 3 weight 50
    
    #---------------------------------------------------------------------
    # round robin balancing between the various backends
    #---------------------------------------------------------------------
    # 後臺服務配置
    backend servers
       balance     roundrobin
       # 添加cookie配置,將某客戶端引導到以前爲其服務過的後端服務器上,即和後端某服務器保持聯繫,防止登陸驗證失效
       cookie app_cook    insert nocache
       server    app1 192.168.6.100:10001 check inter 2000 fall 3 weight 50 cookie server1
       server    app2 192.168.6.110:10001 check inter 2000 fall 3 weight 50 cookie server2
    
    # HAProxy狀態監控服務配置
    listen stats
       # 綁定端口
       bind *:8080
       mode http
       # stats enable
       # 訪問地址:192.168.6.100:8080/web 和 192.168.6.110:8080/web
       stats uri /web
       stats realm Global\ statistics
       # 管理員帳戶
       stats auth hapadmin:1qazse$#2
  • HAProxy的配置文件(DB服務器)node

    #---------------------------------------------------------------------
    # Global settings
    #---------------------------------------------------------------------
    global
       pidfile     /var/run/haproxy.pid
       maxconn     30000
       user        haproxy
       group       haproxy
       daemon
       nbproc    1
    
    #---------------------------------------------------------------------
    # common defaults that all the 'listen' and 'backend' sections will
    # use if not designated in their block
    #---------------------------------------------------------------------
    defaults
       mode                    tcp
       option                  redispatch
       retries                 3
       timeout queue           1m
       timeout connect         10s
       timeout client          1m
       timeout server          1m
       timeout check           10s
       maxconn                 4096
       option        abortonclose
    
    frontend main
        bind *:3306
         default_backend servers
    
    backend servers
       server    mysql1 192.168.6.200:10002 check inter 3000 fall 3 weight 50
       server    mysql2 192.168.6.210:10002 check inter 3000 fall 3 weight 50
    
    # 監控訪問地址:192.168.6.210:8080/db 和 192.168.6.200:8080/db
    listen stats
       mode http
       bind 0.0.0.0:8080
       stats enable
       stats uri /db
       stats realm Global\ statistics
       stats auth dbadmin:1qazse$#2
  • Keeplived的操做命令mysql

    # 查看已安裝的Keepalived的版本:
    keepalived -v
    # 查看配置:
    cat /etc/keepalived/keepalived.conf
    # 編輯配置文件:
    vim /etc/keepalived/keepalived.conf
    # 測試高可用的遠程訪問:
    mysql -h 遠程數據庫ip地址 -P 端口 -u 用戶名 -p
    mysql -h 192.168.6.200 -P 3306 -u dbuser -p
    
    # 開通服務器間的 vrrp 協議通訊,用於Keepalived通訊:
    firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface 網卡名稱 --destination 224.0.0.18 --protocol vrrp -j ACCEPT;
    firewall-cmd --reload;
    # 服務器的網卡名稱請根據本身的狀況修改,
    # INPUT表明接收224.0.0.18的報文。
    # 在VIP服務器上測試VIP漂移:
    ip addr | grep 網卡名稱
    # 中止VIP所在服務器的keepalived服務,並查看VIP是否移除,並查看備用服務器是否獲取到VIP:
    service keepalived stop && service keepalived status
    ip addr | grep 網卡名稱
    # 在以前中止keepalived服務的服務器上開啓keepalived服務,查看VIP是否已取回:
    service keepalived start && service keepalived status
    ip addr | grep 網卡名稱
  • Keeplived的配置(Web服務器)nginx

    • Web主服務器的配置:laravel

      # Master的配置內容:
      ! Configuration File for keepalived
      global_defs {
        notification_email {
            example@domain.com    # 收郵件人,能夠定義多個
        }
        notification_email_from HaproxyMaster@web.haproxy    # 發件人,可假裝
        smtp_server 127.0.0.1    # 發送郵件的服務器地址
        smtp_connect_timeout 30    # 鏈接超時時間
        no_email_faults
        router_id WebMaster
        vrrp_skip_check_adv_addr
        vrrp_strict
        vrrp_garp_interval 0
        vrrp_gna_interval 0
      }
      vrrp_script chk_haproxy { # HAProxy服務監測腳本
        script '/etc/keepalived/check_haproxy.sh'
        interval 2
        weight 2
      }
      vrrp_instance VI_1 {    # 每個vrrp_instance就是定義一個虛擬路由器
        state MASTER    # 由初始狀態狀態轉換爲master狀態
        interface 網卡名稱    # 網卡名稱,如eth0,根據本身的狀況修改
        virtual_router_id 100    # 虛擬路由的id號,通常不能大於255的
        priority 100    # 優先級,數字越大,優先級越高,主比次大
        advert_int 1    # 初始化通告
        authentication {    # 認證機制
            auth_type PASS
            auth_pass 666    # 密碼,自行更改,主備一致便可
        }    
        track_script {
            chk_haproxy
        }
        virtual_ipaddress {    # Web服務的虛擬ip地址:vip,前面提到的備用的虛擬IP。
            #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
            #192.168.200.18/24 dev eth2 label eth2:1
            192.168.6.111
        }
          notify_master '/etc/keepalived/clean_arp.sh 192.168.6.111'
      }
    • Web備服務器的配置:

      # Backup的配置內容:
      ! Configuration File for keepalived
      global_defs {
        notification_email {
            example@domain.com    # 收郵件人,能夠定義多個
        }
        notification_email_from HaproxyBackup@web.haproxy    # 發件人,可假裝
        smtp_server 127.0.0.1    # 發送郵件的服務器地址
        smtp_connect_timeout 30    # 鏈接超時時間
        no_email_faults
        router_id WebBackup
        vrrp_skip_check_adv_addr
        vrrp_strict
        vrrp_garp_interval 0
        vrrp_gna_interval 0
      }
      vrrp_script chk_haproxy { # HAProxy服務監測腳本
        script '/etc/keepalived/check_haproxy.sh'
        interval 2
        weight 2
      }
      vrrp_instance VI_1 {    # 每個vrrp_instance就是定義一個虛擬路由器
        state BACKUP    # 由初始狀態狀態轉換爲backup狀態
        interface 網卡名稱    # 網卡名稱,如eth0,根據本身的狀況修改
        virtual_router_id 100    # 虛擬路由的id號,通常不能大於255的
        priority 90    # 優先級,數字越大,優先級越高,主比次大
        advert_int 1    # 初始化通告
        authentication {    # 認證機制
            auth_type PASS
            auth_pass 666    # 密碼,自行更改,主備一致便可
        }    
        track_script {
            chk_haproxy
        }
        virtual_ipaddress {    # Web服務的虛擬ip地址:vip,前面提到的備用的虛擬IP。
            #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
            #192.168.200.18/24 dev eth2 label eth2:1
            192.168.6.111
        }
          notify_master '/etc/keepalived/clean_arp.sh 192.168.6.111'
      }
  • Keeplived的配置(DB服務器)

    • DB主服務器的配置:

      # Master的配置內容:
      ! Configuration File for keepalived
      global_defs {
        notification_email {
            example@domain.com    # 收郵件人,能夠定義多個
        }
        notification_email_from HaproxyMaster@db.haproxy    # 發件人,可假裝
        smtp_server 127.0.0.1    # 發送郵件的服務器地址
        smtp_connect_timeout 30    # 鏈接超時時間
        no_email_faults
        router_id DBMaster
        vrrp_skip_check_adv_addr
        vrrp_strict
        vrrp_garp_interval 0
        vrrp_gna_interval 0
      }
      vrrp_script chk_haproxy { # HAProxy服務監測腳本
        script '/etc/keepalived/check_haproxy.sh'
        interval 2
        weight 2
      }
      vrrp_instance VI_1 {    # 每個vrrp_instance就是定義一個虛擬路由器
        state MASTER    # 由初始狀態狀態轉換爲master狀態
        interface 網卡名稱    # 網卡名稱,如eth0,根據本身的狀況修改
        virtual_router_id 99    # 虛擬路由的id號,通常不能大於255的
        priority 100    # 優先級,數字越大,優先級越高,主比次大
        advert_int 1    # 初始化通告
        authentication {    # 認證機制
            auth_type PASS
            auth_pass 666    # 密碼,自行更改,主備一致便可
        }    
        track_script {
            chk_haproxy    
        }    
        virtual_ipaddress {    # DB服務的虛擬ip地址:vip,前面提到的備用的虛擬IP。
            #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
            #192.168.200.18/24 dev eth2 label eth2:1
            192.168.6.211
        }
        notify_master '/etc/keepalived/clean_arp.sh 192.168.6.211'
      }
    • DB備服務器的配置:

      # Backup的配置內容:
      ! Configuration File for keepalived
      global_defs {
        notification_email {
            example@domain.com    # 收郵件人,能夠定義多個
        }
        notification_email_from HaproxyBackup@db.haproxy    # 發件人,可假裝
        smtp_server 127.0.0.1        # 發送郵件的服務器地址
        smtp_connect_timeout 30    # 鏈接超時時間
        no_email_faults
        router_id DBBackup
        vrrp_skip_check_adv_addr
        vrrp_strict
        vrrp_garp_interval 0
        vrrp_gna_interval 0
      }
      vrrp_script chk_haproxy { # HAProxy服務監測腳本
        script '/etc/keepalived/check_haproxy.sh'
        interval 2
        weight 2
      }
      vrrp_instance VI_1 {    # 每個vrrp_instance就是定義一個虛擬路由器
        state BACKUP        # 由初始狀態狀態轉換爲master狀態
        interface 網卡名稱 # 網卡名稱,如eth0,根據本身的狀況修改
        virtual_router_id 99    # 虛擬路由的id號,通常不能大於255的
        priority 90        # 優先級,數字越大,優先級越高,主比次大
        advert_int 1        # 初始化通告
        authentication {        # 認證機制
            auth_type PASS
            auth_pass 666    # 密碼,自行更改,主備一致便可
        }    
        track_script {
            chk_haproxy    
        }    
        virtual_ipaddress {    # DB服務的虛擬ip地址:vip,前面提到的備用的虛擬IP。
            #<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPT> label <LABEL>
            #192.168.200.18/24 dev eth2 label eth2:1
            192.168.6.211
        }
        notify_master '/etc/keepalived/clean_arp.sh 192.168.6.211'
      }
  • 建立Keepalived調用的腳本

    • 操做命令

      mkdir /etc/keepalived/
      echo '' > /etc/keepalived/check_haproxy.sh
      echo '' > /etc/keepalived/clean_arp.sh
      chmod +x /etc/keepalived/*.sh
      # 而後編輯兩個腳本的內容,以下
    • /etc/keepalived/check_haproxy.sh

      #!/bin/bash
      # 判斷haproxy是否已經啓動
      if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
        # 若是沒有啓動,則啓動haproxy程序
        haproxy -f /etc/haproxy/haproxy.cfg
      fi
      # 睡眠兩秒鐘,等待haproxy徹底啓動
      sleep 2
      # 判斷haproxy是否已經啓動
      if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
        # 若是haproxy沒有啓動起來,則將keepalived停掉,則VIP自動漂移到另一臺haproxy機器,實現了對haproxy的高可用
        service keepalived stop
    • /etc/keepalived/clean_arp.sh

      #!/bin/sh
      VIP=$1
      GATEWAY=192.168.6.255 # 本機的網卡網關地址
      /sbin/arping -I ens160 -c 5 -s $VIP $GATEWAY &>/dev/null
  • 發佈文件的配置

    # 站點根目錄賦權
    chmod -R 777 /home/wwwroot/publishPath
    # PHP環境配置
    vim /home/wwwroot/publishPath/.env
    
    # 編輯配置內容:
    APP_DEBUG=false
    # Web的內網VIP,如需外網訪問,則須要將192.168.6.111映射到外網,而後將該處的IP改爲外網IP
    APP_URL=http://192.168.6.111
    DB_CONNECTION=mysql
    # DB的內網VIP
    DB_HOST=192.168.6.211
    # DB的內網端口
    DB_PORT=3306
    # 數據庫名稱
    DB_DATABASE=dbName
    # 數據庫用戶名
    DB_USERNAME=dbuser
    # 數據庫密碼
    DB_PASSWORD=dbpwd
    # 其餘配置選項使用默認設置,這裏省略。
    
    # 配置保存退出後重啓php服務:
    service php-fpm restart
  • 關於IP的說明
    以上說到的IP都是內網IP,全部的配置都使用內網IP便可。如需外網訪問,只須要把兩個虛擬IP和端口映射到外網便可(注意修改php配置的APP_URL)。
相關文章
相關標籤/搜索