- PVSM.RU - https://www.pvsm.ru -

Производительность Bitrix Старт на Proxmox и Virtuozzo 7 & Virtuozzo Storage

Производительность Bitrix Старт на Proxmox и Virtuozzo 7 & Virtuozzo Storage - 1

Тестирование производительности Bitrix Старт на двух принципиально разных платформах.
Замерять будем при помощи встроенной панели производительности Bitrix.

C одной стороны, бесплатная версия Proxmox 4.4, LXC контейнеры с использованием файловой системы ZFS на SSD дисках.

С другой стороны, лицензионная Virtuozzo 7 CT + Virtuozzo Storage. В этом варианте мы используем обычные SATA диски + SSD для кеша записи и чтения.

Мы учитываем, что Virtuozzo 7 является коммерческой системой, требующей обязательного лицензирования, а Proxmox 4 можно использовать бесплатно, но без технической поддержки.

По этой причине, полноценно сравнивать две платформы конечно не корректно, но если
интересно узнать как можно увеличить производительность сайта используя одно и тоже железо, одинаковую конфигурацию виртуальных машин и ее сервисов, то данная статья может быть вам полезна.


Цель данного тестирования — измерить производительность сайта Bitrix Старт 16.5.4, установленного внутри контейнеров Proxmox LXC и Virtuozzo 7.

Предыстория

Наша команда занимаемся сопровождением различных web-проектов.

Основная задача — проектирование и внедрение окружений для web-систем. Мы следим за их высокой производительностью и доступностью, осуществляем их мониторинг и бекап.

Одной из важных проблем при сопровождении проектов является качество работы хостинга [9], на котором размещены проекты наших клиентов. Возникают ситуации, когда VPS [9] падает или работает медленно. Бывает, что сервер без видимой причины недоступен или внезапно перезагружен.
В эти моменты мы становимся заложниками службы технической поддержки хостинговой компании и нам приходится тратить время на диагностику проблемы, подготовку статистики и предоставление информации технической поддержке хостинга [9]. Решение подобных проблем иногда длится сутками.

Что бы решить для себя эту проблему, мы приняли решение построить небольшой хостинг [9] для наших клиентов. Для этого мы купили сервера и приступили к поиску подходящего дата-центра для их размещения. В качестве площадки мы остановились на Selectel [10] — сервера в их Московском дата-центре работают без перебоев. Техническая поддержка отвечает очень быстро и решает все возникающие вопросы.

Изначально, мы выбрали самое просто решение — поднимать сервера на базе Proxmox 3 с контейнерами OpenVZ и рейдом из SSD дисков. Это решение было очень быстрым и достаточно надежным.
Время шло, появился Proxmox 4 и мы постепенно перешли на его использование в сочетании с ZFS. Сразу столкнулись с массой проблем связанных с LXC. Например, в контейнерах не работал screen и multitail без предварительного запуска

exec </dev/tty

в контейнере, в Centos 6 без выполнения команды

sed -i -e 's/start_udev/false/g' /etc/rc.d/rc.sysinit

не работал ssh, не работал pure-ftpd итд. Хорошо все изучив и доработав конфигурацию, мы наладили у себя работу Proxmox и были довольны.

Из плюсов, мы использовали сжатие на уровне ZFS:

  • Это позволяло экономить много дискового пространства для наших пользователей
  • Решало проблему переполнения файловых систем, например из-за логов,
  • Исключало проблему, когда база данных mysql с движком innodb не уменьшалась на диске при удалении из нее, а просто заполнялась пустыми блоками
  • Мы могли перемещать VPS [9] клиентов в режиме реального времени с сервера на сервер, используя pve-zsync.

В общем, переход был успешным, но проходил сложно. Все проверялось на тестовых серверах и в конечно итоге, мы благополучно переехали на новую архитектуру.

В какой то момент, стало необходимым задуматься об увеличении производительности виртуальных машин и сайтов наших клиентов.
Мы начали пробовать различные альтернативные варианты. Для тестов мы купили лицензии на Virtuozzo 7 и Cloud Storage. Собрали тестовый кластер Virtuozzo Storage, настроили кеширование и запустили первые тестовые виртуальные машины. На всех этапах нам помогала техническая поддержка Virtuozzo [11]
В итоге, результатом оказались очень довольны и перевели клиентов на новую архитектуру.
В одной из следующих статей я расскажу основные моменты внедрения и о тех подводных камнях, с которыми мы столкнулись.

В качестве первого испытуемого используется Proxmox 4.4-5/c43015a5

Сайты расположены на пуле zfs из 2 SSD дисков в режиме зеркала, через драйвер Proxmox:

zpool create -f -o ashift=12 zroot raidz /dev/sdb3 /dev/sda3                                                                                                                               
zfs set atime=off zroot
zfs set compression=lz4 zroot
zfs set dedup=off zroot
zfs set snapdir=visible zroot
zfs set primarycache=all zroot
zfs set aclinherit=passthrough zroot
zfs inherit acltype zroot

Все остальное для варианта Proxmox полностью стандартно.

Вариант с Virtuozzo 7:

в качестве гипервизора у нас Virtuozzo release 7.0.3 (550), в качестве дискового массива используется Virtuozzo 7 Storage.
В качестве MDS используются 3 сервера:

      2 avail      0.0%       1/s   0.0%   100m  17d  6h msk-01:2510
      3 avail      0.0%       0/s   0.0%   102m   5d  1h msk-03:2510
M     1 avail      0.0%       1/s   1.8%    99m  17d  5h msk-06:2510

На тестовом стенде, чанки расположены на 2-ух простых SATA дисках

1025 active     869.2G 486.2G     1187        0    29%  1.15/485    1.0 msk-06
1026 active     796.6G 418.8G     1243        0    17%  1.18/440    0.4 msk-06

При этом, на каждом чанке есть свои SSD журналы записи, объемом около 166GB

vstorage -c livelinux configure-cs -r /vstorage/livelinux-cs1/data -a /mnt/ssd2/livelinux-cs0-ssd/ -s 170642
vstorage -c livelinux configure-cs -r /vstorage/livelinux-cs2/data -a /mnt/ssd2/livelinux-cs1-ssd/ -s 170642

У клиентов кластера есть локальный кеш на SSD, размером около 370GB

vstorage://livelinux /vstorage/livelinux 
fuse.vstorage _netdev,cache=/mnt/ssd1/client_cache,cachesize=380000 0 0

На тестовом кластере используется режим без репликации, те 1:1.
На реальных боевых серверах используется режим 3:2, т.е. все данные одновременно хранятся на 3 серверах кластера, это позволяет избежать потери данных в случае падения до 2 серверов кластера.

Тестовые VPS [9] Bitrix имеют следующие характеристики:

  • CPU 4 ядра
  • RAM 4GB
  • Centos 7
  • Nginx как фронтенд и для отдачи статики
  • Apache 2.4 Prefork для работы .htaccess и реврайтов
  • PHP 5.6 в режиме php-fpm
  • Opcache
  • MariaDB 10.1 база храниться в Innodb
  • Redis для хранения сессий пользователей
Характеристики тестового сервера

Платформа Supermicro SYS-6016T-U
2x Intel Xeon E5620
12 8GB DDR3-1066, ECC, Reg
2x Intel S3510 Series, 800GB, 2.5'' SATA 6Gb/s, MLC
2x Hitachi Ultrastar A7K2000, 1TB, SATA III, 7200rpm, 3.5'', 32MB cache

/etc/sysctl.conf

net.netfilter.nf_conntrack_max=99999999
fs.inotify.max_user_watches=99999999
net.ipv4.tcp_max_tw_buckets=99999999
net.ipv4.tcp_max_tw_buckets_ub=65535
net.ipv4.ip_forward=1
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_syn_backlog=65536
net.core.somaxconn=65535
fs.file-max=99999999
kernel.sem=1000 256000 128 1024
vm.dirty_ratio=5
fs.aio-max-nr=262144
kernel.panic=1
net.ipv4.conf.all.rp_filter=1
kernel.sysrq=1
net.ipv4.conf.default.send_redirects=1
net.ipv4.conf.all.send_redirects=0
net.ipv4.ip_dynaddr=1
kernel.msgmn=1024
fs.inotify.max_user_instances=1024
kernel.msgmax=65536
kernel.shmmax=4294967295
kernel.shmall=268435456
kernel.shmmni=4096
net.ipv4.tcp_keepalive_time=15
net.ipv4.tcp_keepalive_intvl=10
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_fin_timeout=30
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
vm.swappiness=10
vm.overcommit_memory=1

nginx -V

nginx version: nginx/1.11.8
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-4) (GCC)
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic'

/etc/nginx/nginx.conf

worker_processes auto;
timer_resolution 100ms;
pid /run/nginx.pid;
thread_pool default threads=32 max_queue=655360;
events {
worker_connections 10000;
multi_accept on;
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$host — $remote_user [$time_local] "$request"' '$status $body_bytes_sent "$http_referer"' '"$http_user_agent" "$http_x_forwarded_for"';
log_format defaultServer '[$time_local][$server_addr] $remote_addr ($http_user_agent) -> "$http_referer" $host "$request" $status';
log_format downloadsLog '[$time_local] $remote_addr "$request"';
log_format Counter '[$time_iso8601] $remote_addr $request_uri?$query_string';
access_log off;
access_log /dev/null main;
error_log /dev/null;

connection_pool_size 256;
client_header_buffer_size 4k;
client_max_body_size 2048m;
large_client_header_buffers 8 32k;
request_pool_size 4k;
output_buffers 1 32k;
postpone_output 1460;
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript text/x-javascript application/javascript;
gzip_disable «msie6»;
gzip_comp_level 6;
gzip_http_version 1.0;
gzip_vary on;

sendfile on;
aio threads;
directio 10m;
tcp_nopush on;
tcp_nodelay on;
server_tokens off;

keepalive_timeout 75 20;
server_names_hash_bucket_size 128;
server_names_hash_max_size 8192;
ignore_invalid_headers on;
server_name_in_redirect off;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
resolver_timeout 10s;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'AES128+EECDH:AES128+EDH';
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;

proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
proxy_buffer_size 8k;
proxy_buffers 8 64k;
proxy_connect_timeout 300m;
proxy_read_timeout 300m;
proxy_send_timeout 300m;
proxy_store off;
proxy_ignore_client_abort on;

fastcgi_read_timeout 300m;
open_file_cache max=200000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

proxy_cache_path /var/cache/nginx/page levels=2 keys_zone=pagecache:100m inactive=1h max_size=10g;

fastcgi_cache_path /var/cache/nginx/fpm levels=2 keys_zone=FPMCACHE:100m inactive=1h max_size=10g;
fastcgi_cache_key "$scheme$request_method$host";
fastcgi_cache_use_stale error timeout invalid_header http_500;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
upstream memcached_backend { server 127.0.0.1:11211; }

real_ip_header X-Real-IP;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
allow all;
server {
listen 80 reuseport;
}
include /etc/nginx/conf.d/*.conf;
}

/etc/nginx/sites-enabled/start.livelinux.ru.vhost

upstream start.livelinux.ru {
keepalive 10;
server 127.0.0.1:82;
}
server {
listen 80;
server_name start.livelinux.ru www.start.livelinux.ru; [12]
root /var/www/start.livelinux.ru/web;
error_page 404 = @fallback;
location @fallback {
proxy_pass start.livelinux.ru; [13]
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
error_log /var/log/ispconfig/httpd/start.livelinux.ru/nginx_error.log error;
access_log /var/log/ispconfig/httpd/start.livelinux.ru/nginx_access.log combined;

location ~* ^.+.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
root /var/www/start.livelinux.ru/web;
access_log off;
expires 30d;
}
location ^~ /error { root /var/www; }

location / {
index index.php index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass start.livelinux.ru; [13]
}
include /etc/nginx/locations.d/*.conf;
}

php -v

PHP 5.6.29 (cli) (built: Dec 9 2016 07:40:09)
Copyright © 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright © 1998-2016 Zend Technologies
with the ionCube PHP Loader (enabled) + Intrusion Protection from ioncube24.com (unconfigured) v5.1.2, Copyright © 2002-2016, by ionCube Ltd.
with Zend OPcache v7.0.6-dev, Copyright © 1999-2016, by Zend Technologies

/etc/php.ini

[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_functions =
disable_classes =
realpath_cache_size = 4096k
zend.enable_gc = On
expose_php = off
max_execution_time = 600
max_input_time = 600
max_input_vars = 100000
memory_limit = 512M
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
variables_order = «GPCS»
request_order = «GP»
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 500M
auto_prepend_file =
auto_append_file =
default_mimetype = «text/html»
default_charset = «UTF-8»
always_populate_raw_post_data = -1
doc_root =
user_dir =
enable_dl = Off
cgi.fix_pathinfo = 1
file_uploads = On
upload_max_filesize = 500M
max_file_uploads = 200
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = Europe/Moscow
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[Session]
session.save_handler = redis
session.save_path = «tcp://127.0.0.1:6379»
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = SESSIONID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = «a=href,area=href,frame=src,input=src,form=fakeentry»
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatibility_mode = Off
mssql.secure_connection = Off
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1

/etc/php.d/10-opcache.ini

zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=512
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=130987
opcache.fast_shutdown=1
opcache.blacklist_filename=/etc/php.d/opcache*.blacklist

/etc/php-fpm.d/bitrix.conf

[bitrix]
listen = /var/lib/php5-fpm/web1.sock
listen.owner = web1
listen.group = apache
listen.mode = 0660
user = web1
group = client1
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 5
pm.max_requests = 0
chdir = /
env[HOSTNAME] = $HOSTNAME
env[TMP] = /var/www/clients/client1/web1/tmp
env[TMPDIR] = /var/www/clients/client1/web1/tmp
env[TEMP] = /var/www/clients/client1/web1/tmp
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
php_admin_value[open_basedir] = none
php_admin_value[session.save_path] = «tcp://127.0.0.1:6379»
php_admin_value[upload_tmp_dir] = /var/www/clients/client1/web1/tmp
php_admin_value[sendmail_path] = "/usr/sbin/sendmail -t -i -f webmaster@biz.livelinux.ru"
php_admin_value[max_input_vars] = 100000
php_admin_value[mbstring.func_overload] = 2
php_admin_value[mbstring.internal_encoding] = utf-8
php_admin_flag[opcache.revalidate_freq] = off
php_admin_flag[display_errors] = on

httpd -V

Server version: Apache/2.4.6 (CentOS)
Server built: Nov 14 2016 18:04:44
Server's Module Magic Number: 20120211:24
Server loaded: APR 1.4.8, APR-UTIL 1.5.2
Compiled using: APR 1.4.8, APR-UTIL 1.5.2
Architecture: 64-bit
Server MPM: prefork
threaded: no
forked: yes (variable process count)
Server compiled with…
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
-D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
-D APR_USE_SYSVSEM_SERIALIZE
-D APR_USE_PTHREAD_SERIALIZE
-D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
-D APR_HAS_OTHER_CHILD
-D AP_HAVE_RELIABLE_PIPED_LOGS
-D DYNAMIC_MODULE_LIMIT=256
-D HTTPD_ROOT="/etc/httpd"
-D SUEXEC_BIN="/usr/sbin/suexec"
-D DEFAULT_PIDLOG="/run/httpd/httpd.pid"
-D DEFAULT_SCOREBOARD=«logs/apache_runtime_status»
-D DEFAULT_ERRORLOG=«logs/error_log»
-D AP_TYPES_CONFIG_FILE=«conf/mime.types»
-D SERVER_CONFIG_FILE=«conf/httpd.conf»

/etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000

/etc/httpd/conf.modules.d/00-mutex.conf

Mutex posixsem
EnableMMAP Off

/etc/httpd/conf.modules.d/10-fcgid.conf

LoadModule fcgid_module modules/mod_fcgid.so
FcgidMaxRequestLen 20000000

/etc/httpd/conf/sites-enabled/100-start.livelinux.ru.vhost

<Directory /var/www/start.livelinux.ru>
AllowOverride None
Require all denied
<//Directory>

<VirtualHost *:82>
DocumentRoot /var/www/clients/client1/web3/web
ServerName start.livelinux.ru
ServerAlias www.start.livelinux.ru [14]
ServerAdmin webmaster@start.livelinux.ru
ErrorLog /var/log/ispconfig/httpd/start.livelinux.ru/error.log

<Directory /var/www/start.livelinux.ru/web>
<FilesMatch ".+.ph(p[345]?|t|tml)$">
SetHandler None
<//FilesMatch>
Options +FollowSymLinks
AllowOverride All
Require all granted
<//Directory>

<Directory /var/www/clients/client1/web3/web>
<FilesMatch ".+.ph(p[345]?|t|tml)$">
SetHandler None
<//FilesMatch>
Options +FollowSymLinks
AllowOverride All
Require all granted
<//Directory>

<IfModule mod_suexec.c>
SuexecUserGroup web3 client1
<//IfModule>

<IfModule mod_fastcgi.c>
<Directory /var/www/clients/client1/web3/cgi-bin>
Require all granted
<//Directory>

<Directory /var/www/start.livelinux.ru/web>
<FilesMatch ".php[345]?$">
SetHandler php5-fcgi
<//FilesMatch>
<//Directory>

<Directory /var/www/clients/client1/web3/web>
<FilesMatch ".php[345]?$">
SetHandler php5-fcgi
<//FilesMatch>
<//Directory>

Action php5-fcgi /php5-fcgi virtual
Alias /php5-fcgi /var/www/clients/client1/web3/cgi-bin/php5-fcgi-*-82-start.livelinux.ru
FastCgiExternalServer /var/www/clients/client1/web3/cgi-bin/php5-fcgi-*-82-start.livelinux.ru -idle-timeout 300 -socket /var/lib/php5-fpm/web3.sock -pass-header Authorization
<//IfModule>

<IfModule mod_proxy_fcgi.c>
<Directory /var/www/clients/client1/web3/web>
<FilesMatch ".php[345]?$">
SetHandler «proxy:unix:/var/lib/php5-fpm/web3.sock|fcgi://localhost»
<//FilesMatch>
<//Directory>
<//IfModule>

<IfModule mpm_itk_module>
AssignUserId web3 client1
<//IfModule>

<IfModule mod_dav_fs.c>
<Directory /var/www/clients/client1/web3/webdav>
<ifModule mod_security2.c>
SecRuleRemoveById 960015
SecRuleRemoveById 960032
<//ifModule>

<FilesMatch ".ph(p3?|tml)$">
SetHandler None
<//FilesMatch>
<//Directory>

DavLockDB /var/www/clients/client1/web3/tmp/DavLock
<//IfModule>
<//VirtualHost>

10.1.20-MariaDB MariaDB Server

symbolic-links=0
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_large_prefix = on
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
connect_timeout = 600000
wait_timeout = 28800
max_connections = 800
max_allowed_packet = 512M
max_connect_errors = 10000
net_read_timeout = 600000
connect_timeout = 600000
net_write_timeout = 600000
innodb_open_files = 512
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 4
innodb_file_format = barracuda
innodb_locks_unsafe_for_binlog = 1
innodb_flush_log_at_trx_commit = 2
transaction-isolation = READ-COMMITTED
innodb-data-file-path = ibdata1:10M:autoextend
innodb-log-file-size = 256M
innodb_log_buffer_size = 32M
skip-name-resolve
skip-external-locking
skip-innodb_doublewrite
query_cache_size = 128M
query_cache_type = 1
query_cache_min_res_unit = 2K
join_buffer_size = 8M
sort_buffer_size = 2M
read_rnd_buffer_size = 3M
table_definition_cache = 2048
table_open_cache = 100000
thread_cache_size = 128
tmp_table_size = 200M
max_heap_table_size = 200M
log_warnings = 2
log_error = /var/log/mysql/mysql-error.log
key_buffer_size = 128M
binlog_format=MIXED
server_id = 226
sync-binlog = 0
expire-logs_days = 3
max-binlog-size = 1G
log-slave-updates
binlog-checksum=crc32
slave-skip-errors = 1062,1146
log_slave_updates = 1
slave_type_conversions=ALL_NON_LOSSY
slave-parallel-threads=4
relay-log = /var/log/mysql/mysql-relay-bin
relay-log-index = /var/log/mysql/mysql-relay-bin.index
relay-log-info-file = /var/log/mysql/mysql-relay-log.info
skip-slave-start
optimizer_switch='derived_merge=off,derived_with_keys=off'
sql-mode=""
innodb_flush_method = O_DIRECT_NO_FSYNC
innodb_use_native_aio = 1
innodb_adaptive_hash_index = 0
innodb_adaptive_flushing = 1
innodb_flush_neighbors = 0
innodb_read_io_threads = 16
innodb_write_io_threads = 16
innodb_max_dirty_pages_pct = 90
innodb_max_dirty_pages_pct_lwm = 10
innodb_lru_scan_depth = 4000
innodb_purge_threads = 4
innodb_max_purge_lag_delay = 10000000
innodb_max_purge_lag = 1000000
innodb_checksums = 1
innodb_checksum_algorithm = crc32
table_open_cache_instances = 16
innodb_thread_concurrency = 32
innodb-use-mtflush=ON
innodb-mtflush-threads=8
innodb_use_fallocate=ON
innodb_monitor_enable = '%'
performance_schema=ON
performance_schema_instrument='%sync%=on'
malloc-lib = /usr/lib64/libjemalloc.so.1
port = 3306

/etc/redis.conf

bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 0
pidfile /var/run/redis/redis.pid
loglevel notice
logfile /var/log/redis/redis.log
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/lib/redis/
unixsocket /tmp/redis.sock
unixsocketperm 777
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename «appendonly.aof»
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes
maxmemory 32M
maxmemory-policy volatile-lru

Результаты теста производительности:

Proxmox 4

Производительность Bitrix Старт на Proxmox и Virtuozzo 7 & Virtuozzo Storage - 2

Virtuozzo 7

Производительность Bitrix Старт на Proxmox и Virtuozzo 7 & Virtuozzo Storage - 3

В качестве бонуса, Virtuozzo 7, сайт на php70

Производительность Bitrix Старт на Proxmox и Virtuozzo 7 & Virtuozzo Storage - 4

В качестве итога:

Переход на новую облачную платформу дал нам высокую доступность данных за счет репликации на 3 сервера, но мы потеряли полезную опцию zfs — сжатие.
Мы получили прирост производительности тестового сайта на Bitrix, в среднем на 45%.
Если говорить о реальных сайтах, то в зависимости от количества плагинов и сложности кода, мы получали прирост до 3 раз.

Из плюсов — мы получили возможность миграции виртуальных машин с сервера на сервер быстро, без необходимости их выключения.
Из минусов, в отличии от Proxmox у Virtuozzo 7 пока что нет надежной и удобной панели управления, так что все приходилось делать руками или через shell скрипты.
Существующий Automator все еще очень сырой и работает непредсказуемо.

В пользу Virtuozzo — это его техническая поддержка, она на высоте. Также есть хорошая документация по всем компонентам системы, а ведь с этим у Proxmox большие проблемы. Даже чтобы написать на форуме, необходимо оплатить подписку, а на мой взгляд оно того совершенно не стоит. Кластер Proxmox работает пока не сломается, но вот когда сломается, поднять его очень сложно и документации для этого явно не хватает.

Надеюсь, статья окажется для вас полезной.
В следущий раз я расскажу о переходе Bitrix на php70 и сравню производительность различных редакций Bitrix.

Автор: SyCraft

Источник [15]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/mysql/233980

Ссылки в тексте:

[1] Zabbix 2.2 верхом на nginx + php-fpm и mariadb: https://habrahabr.ru/company/acronis/blog/198354/

[2] HAPRoxy для Percona или Galera на CentOS. Его настройка и мониторинг в Zabbix: https://habrahabr.ru/company/acronis/blog/198448/

[3] «Идеальный» www кластер. Часть 1. Frontend: NGINX + Keepalived (vrrp) на CentOS: https://habrahabr.ru/company/acronis/blog/198934/

[4] «Идеальный» кластер. Часть 2.1: Виртуальный кластер на hetzner: https://habrahabr.ru/company/acronis/blog/204190/

[5] «Идеальный» кластер. Часть 2.2: Высокодоступный и масштабируемый web-сервер, лучшие технологии на страже вашего бизнеса: https://habrahabr.ru/company/acronis/blog/209934/

[6] «Идеальный» кластер. Часть 3.1 Внедрение MySQL Multi-Master кластера: https://habrahabr.ru/post/253869/

[7] Ускорение и оптимизация PHP-сайта. Какие технологии стоит выбирать при настройке сервера под PHP: https://habrahabr.ru/post/264487/

[8] Сравнение скорости исполнения кода Drupal для PHP 5.3-5.6 и 7.0. «Битва оптимизаторов кода» apc vs xcache vs opcache: https://habrahabr.ru/post/264775/

[9] хостинга: https://www.reg.ru/?rlink=reflink-717

[10] Selectel: https://habrahabr.ru/company/selectel/

[11] Virtuozzo: https://habrahabr.ru/company/virtuozzo/

[12] www.start.livelinux.ru;: http://www.start.livelinux.ru;

[13] start.livelinux.ru;: http://start.livelinux.ru;

[14] www.start.livelinux.ru: http://www.start.livelinux.ru

[15] Источник: https://habrahabr.ru/post/319210/?utm_source=habrahabr&utm_medium=rss&utm_campaign=best