Vesta 2.0 is coming soon! See our progress update: https://vestacp.com/docs/vesta-2-update
MySQL падает
Re: MySQL падает
limit_req_zone
директива отвечает за количество обращений с одного ip адреса за секунду.
директива относится к nginx
Соответственно указывается в конфигурационном файле nginx в секции http
директива отвечает за количество обращений с одного ip адреса за секунду.
директива относится к nginx
Соответственно указывается в конфигурационном файле nginx в секции http
-
- Posts: 172
- Joined: Tue Jan 28, 2014 10:11 am
Re: MySQL падает
Ткните палкой админы если чтото нарушаю, но для себя и Вас шпаргалкой объединил информацию собранную с нескольких тем Вашего сайта и парочки других по оптимизации.
Шпаргалка на моём сайте http://hooked-hands.ru/2014/02/142/ - для проверки можете потыкать F5 хоть минуту (кстати был бы благодарен описанному результату, он же послужит поводом доработки конфигов.)
Собственно Шпаргалка.
------------------------------------------------------------------------------------------------------------------------------
Решение проблем с падением Apache + MySQL на VPS с 512 Мб.
nano /etc/my.cnf
nano /home/USER-NAME/conf/web/nginx.conf
Заменить на своё:
1. USER_NAME
2. YOU_DOMAIN_NAME.COM
3. YOU_IP_ADRESS_SERVER
chkconfig iptables
nano /etc/sysconfig/iptables
И в завершении применяем все нововведения перезагрузкой сервисов.
service iptables restart
service nginx restart
service mysqld restart
service httpd restart
Шпаргалка на моём сайте http://hooked-hands.ru/2014/02/142/ - для проверки можете потыкать F5 хоть минуту (кстати был бы благодарен описанному результату, он же послужит поводом доработки конфигов.)
Собственно Шпаргалка.
------------------------------------------------------------------------------------------------------------------------------
Решение проблем с падением Apache + MySQL на VPS с 512 Мб.
nano /etc/my.cnf
Code: Select all
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
#max_connections=40
#max_user_connections=20
wait_timeout=10
interactive_timeout=50
long_query_time=5
#log-queries-not-using-indexes
#log-slow-queries=/var/log/mysql/log-slow-queries.log
key_buffer_size = 64M
myisam_sort_buffer_size = 32M
join_buffer_size=1M
read_buffer_size=1M
sort_buffer_size=2M
table_cache=512
thread_cache_size=8
interactive_timeout=25
connect_timeout=5
max_allowed_packet=1M
max_connect_errors=1000
query_cache_limit=2M
query_cache_size=128M
query_cache_type=1
tmp_table_size=16M
#innodb_use_native_aio = 0
innodb_file_per_table
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Заменить на своё:
1. USER_NAME
2. YOU_DOMAIN_NAME.COM
3. YOU_IP_ADRESS_SERVER
Code: Select all
server {
listen YOU_IP_ADRESS_SERVER:80;
server_name YOU_DOMAIN_NAME.COM www.YOU_DOMAIN_NAME.COM;
error_log /var/log/httpd/domains/YOU_DOMAIN_NAME.COM.error.log error;
location / {
limit_req zone=dyn burst=10;
proxy_pass http://YOU_IP_ADRESS_SERVER:8080;
}
location ~* ^.+\.(jpg|jpeg|gif|png|ico|svg|css|zip|tgz|gz|rar|bz2|exe|pdf|doc|xls|ppt|txt|odt|ods|odp|odf|tar|bmp|rtf|js|mp3|avi|mpeg|flv|html|htm)$ {
root /home/USER_NAME/web/YOU_DOMAIN_NAME.COM/public_html;
access_log /var/log/httpd/domains/YOU_DOMAIN_NAME.COM.log combined;
access_log /var/log/httpd/domains/YOU_DOMAIN_NAME.COM.bytes bytes;
expires max;
try_files $uri @fallback;
}
location /error/ {
alias /home/USER_NAME/web/YOU_DOMAIN_NAME.COM/document_errors/;
}
location @fallback {
proxy_pass http://YOU_IP_ADRESS_SERVER:8080;
}
location ~ /\.ht {return 404;}
location ~ /\.svn/ {return 404;}
location ~ /\.git/ {return 404;}
location ~ /\.hg/ {return 404;}
location ~ /\.bzr/ {return 404;}
include /home/USER_NAME/conf/web/nginx.YOU_DOMAIN_NAME.COM.conf*;
}
chkconfig iptables
nano /etc/sysconfig/iptables
Code: Select all
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16807:31509796]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
service iptables restart
service nginx restart
service mysqld restart
service httpd restart
-
- Posts: 172
- Joined: Tue Jan 28, 2014 10:11 am
Re: MySQL падает
Полный поход в душ с зажатой спичкой F5 вылетела страница 500, ещё одно нажатие F5 и отобразился сайт.
Сайт - CMS WordPress
Плагин - WP Super Cache - Кэширование выключено.
Кстати если не ошибаюсь без шаманства этот плагин 1 раз генерирует страницу, и в последствии по запросу хоть сотни человек отдаёт её в формате html через Ngnix, пока Apache релаксирует от отсутствия запросов.
Сайт - CMS WordPress
Плагин - WP Super Cache - Кэширование выключено.
Кстати если не ошибаюсь без шаманства этот плагин 1 раз генерирует страницу, и в последствии по запросу хоть сотни человек отдаёт её в формате html через Ngnix, пока Apache релаксирует от отсутствия запросов.
Re: MySQL падает
Можно на странице ошибки сделать редирект на основную страницу.
Ну или в конфиге @fallback сразу сделать куда надо.
Тогда наверное и 500 страница не выскочит.
Тестируйте сайт на устойчивость к нагрузке:
Loaddy
Loadimpact
Perfload
Если их несколько на VPS то можно вообще параллельно все три сервиса каждый на свой сайт натравить и из под консоли (top) смотреть на загрузку памяти, проца и т.д.
Ну или в конфиге @fallback сразу сделать куда надо.
Тогда наверное и 500 страница не выскочит.
Тестируйте сайт на устойчивость к нагрузке:
Loaddy
Loadimpact
Perfload
Если их несколько на VPS то можно вообще параллельно все три сервиса каждый на свой сайт натравить и из под консоли (top) смотреть на загрузку памяти, проца и т.д.
Re: MySQL падает
1. не совсем внимательно очевидно смотрели... my.cnf неправильный для дефолной установки панели, т.е. для mysql 5.5:Metallurg.IT wrote: Шпаргалка на моём сайте http://hooked-hands.ru/2014/02/142/ - для проверки можете потыкать F5 хоть минуту (кстати был бы благодарен описанному результату, он же послужит поводом доработки конфигов.)
Собственно Шпаргалка.
------------------------------------------------------------------------------------------------------------------------------
Решение проблем с падением Apache + MySQL на VPS с 512 Мб.
nano /etc/my.cnf
nano /home/USER-NAME/conf/web/nginx.confCode: Select all
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 #max_connections=40 #max_user_connections=20 wait_timeout=10 interactive_timeout=50 long_query_time=5 #log-queries-not-using-indexes #log-slow-queries=/var/log/mysql/log-slow-queries.log key_buffer_size = 64M myisam_sort_buffer_size = 32M join_buffer_size=1M read_buffer_size=1M sort_buffer_size=2M table_cache=512 thread_cache_size=8 interactive_timeout=25 connect_timeout=5 max_allowed_packet=1M max_connect_errors=1000 query_cache_limit=2M query_cache_size=128M query_cache_type=1 tmp_table_size=16M #innodb_use_native_aio = 0 innodb_file_per_table [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
nano /etc/sysconfig/iptablesCode: Select all
location / { limit_req zone=dyn burst=10; proxy_pass http://YOU_IP_ADRESS_SERVER:8080; }
Code: Select all
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
я приводил правильный конфиг для 512М:
1.1 строчки max_connections не советую копентировать, будет выставлено дефолтное 151 конект это лишняя оперативка которая нужна будет для других целей.
1.2 отсутствует директива innodb_buffer_pool = 8M по умолчанию он 128M
1.3 sort_buffer_size=2M слишком жирно для wordpress... 265k достаточно - 2M*151= 302M, вместо 40M
итог: только mysql с такими параметрами будет отжирать 500+ оперативки.
2. директива nginx
Code: Select all
limit_req zone=dyn burst=10;
Code: Select all
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
ЗЫ: результат сваливание сервера в swap или ddos
ЗЫЫ: самое главное nano /home/USER-NAME/conf/web/nginx.conf ни в коем случае так не делать.
-
- Posts: 172
- Joined: Tue Jan 28, 2014 10:11 am
Re: MySQL падает
Забыл дописать в инструкции выше:
В файл добавить пару строчек в блок http
За коментарии спасибо, попозже внимательно перечитаю и внесу корректировки в общий гайд настроек.
В файл добавить пару строчек в блок http
Code: Select all
nano /etc/nginx/nginx.conf
Code: Select all
http {
#Эта директива ограничивает количество запросов от одного клиента до 10 запросов в секунду
#!!! Попробовать проставить 5 запросов.
limit_req_zone $binary_remote_addr zone=dyn:10m rate=10r/s;
-
- Posts: 172
- Joined: Tue Jan 28, 2014 10:11 am
Re: MySQL падает
Можно поподробнее что тут не так?demian wrote:Metallurg.IT wrote: ЗЫЫ: самое главное nano /home/USER-NAME/conf/web/nginx.conf ни в коем случае так не делать.
И нашёл ваш старый пост, его использовать как основу?
Code: Select all
#####
# From mysql 5.5 low memory use 231M
#####
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0
max_connections=70
max_user_connections=30
wait_timeout=10
interactive_timeout=50
slow_query_log = 0
long_query_time= 5
log-queries-not-using-indexes
slow_query_log_file=/var/log/mysql/log-slow-queries.log
key_buffer_size = 8M
myisam_sort_buffer_size = 4M
join_buffer_size = 512K
read_buffer_size = 512K
sort_buffer_size = 1M
table_cache = 2048
thread_cache_size = 128
max_allowed_packet = 16M
query_cache_limit = 2M
query_cache_size = 8M
tmp_table_size = 16M
#innodb_use_native_aio = 0
innodb_file_per_table
innodb_buffer_pool_size = 8M
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Re: MySQL падает
да этот конфиг
slow_query_log_file = /var/log/mysql/log-slow-queries.log - можно поменять под себя... и файл по этому пути должен присутствовать иначе будет ругаться с лог
slow_query_log_file = /var/log/mysql/log-slow-queries.log - можно поменять под себя... и файл по этому пути должен присутствовать иначе будет ругаться с лог
Code: Select all
mkdir /var/log/mysql/
touch /var/log/mysql/log-slow-queries.log
chown mysql.mysql /var/log/mysql/log-slow-queries.log
Last edited by demian on Thu Feb 20, 2014 8:17 am, edited 1 time in total.
Re: MySQL падает
nano /home/USER-NAME/conf/web/nginx.conf - редактировать подобные файлы не стоит... т.к. манипуляции с сайтом через панель может вызвать перезапись конфига в соответствии с шаблоном.
лучше создать шаблон с необходимыми параметрами и применить его к сайту
лучше создать шаблон с необходимыми параметрами и применить его к сайту
-
- Posts: 172
- Joined: Tue Jan 28, 2014 10:11 am
Re: MySQL падает
Ошибочка орфографии.demian wrote:да этот конфиг
slow_query_log_file = /var/log/mysql/log-slow-queries.log - можно поменять под себя... и файл по этому пути должен присутствовать иначе будет ругаться с лог
Code: Select all
mkdir /var/log/mysql/ toucn /var/log/mysql/log-slow-queries.log chown mysql.mysql /var/log/mysql/log-slow-queries.log
Code: Select all
touch /var/log/mysql/log-slow-queries.log