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
修改php配置的APP_URL
)。