移至运行1C-Bitrix的群集:Web环境

在某个时刻,出现了一项任务-转移现有的并且正在积极工作的生产项目以在服务器集群中工作。 因为 该项目是在1C-Bitrix的基础上开发的,因此决定使用“ 1C-Bitrix:Web环境”构建集群。 该事件的目的是能够承受大量的现场访问者涌入,以及将来能够更快地水平扩展。

实际上,如果我们访问供应商的网站 ,则会看到:

“ 1C-Bitrix:Web环境”-Linux用于在Linux平台CentOS 6(i386,x86_64)和CentOS 7(x86_64)上快速简便地安装操作1C-Bitrix产品和解决方案所需的所有软件。 有必要在没有安装Web服务器的情况下在“干净的” CentOS上安装。

“ 1C-Bitrix:Web环境”的结构-Linux包括:mysql-server,httpd,php,nginx,nodejs push-server,memcached,stunnel,catdoc,xpdf,munin,nagios,sphinx。


实际上,该软件包包含一个已配置的LAMP,一个控制台服务器控制面板,以及一些1C-Bitrix模块的操作所必需的其他软件包。 所有软件的配置均考虑到1C-Bitrix的功能,即:

  • 已安装必要的扩展名(gd,zip,socket,mbstring)
  • 启用短标签支持
  • 为参数memory_limit,max_input_vars,安全模式,opcache.validate_timestamps,opcache.revalidate_freq,mbstring.func_overload,default_charset,display_errors等设置了必要的值。
  • 为数据库,php和服务器本身设置相同的时区
  • 和其他

在大多数情况下,这可以避免服务器配置和调整。

因此,我们有2个应用程序服务器(我们叫它们app01和app01),2个数据库服务器(db01,db02),1个用于缓存的服务器(您知道cache01),更确切地说,我们的想法是以类似的方式实现集群结构。 根据该计划,收到了5台服务器,并安装了最新的centos7版本(不幸的是,debian,ubuntu,fedora,rhel等不合适),除了os之外,服务器上未安装其他任何软件。


因为 如果我们组装一个集群,则有必要确定哪些服务器将成为主要服务器。 由于需要平衡对应用程序的请求,因此httpd将在其中运行的服务器之一也将包含nginx。 他还将接受所有传入的请求,然后将请求重定向到可用的Web节点之一。 我们选择了主服务器app01。


根据以下计划进行了进一步的工作:

1.安装bitrixenv


安装并不意味着超自然的linux知识或管理。 我们通过ssh转到每个服务器并执行以下命令:

cd ~ wget http://repos.1c-bitrix.ru/yum/bitrix-env.sh chmod +x bitrix-env.sh ./bitrix-env.sh 

必须在计划在群集中使用的所有服务器上安装Bitrixenv。 即使服务器仅作为memcached实例运行,bitrixenv也是必要的,因为 允许您从主服务器管理整个集群。

2.配置bitrixenv


因为 如果我们将整个动物园用作集群,则可以通过app01上的环境菜单配置服务器。 为此,请通过ssh转到服务器并运行文件/root/menu.sh。 首先,您需要为bitrix用户设置密码(必须在计划启动该站点的所有服务器上执行类似的操作):



实际上,这是应用程序将在其下运行的用户。 之后,我们将看到一个提供创建服务器池的屏幕:



在这里,我们需要选择第一个菜单项。 在创建环境的过程中,它将请求当前服务器的名称,然后我们指定app01:



创建池之后,我们将返回到环境的第一个屏幕,但是这次有更多可用的点:



通常,环境已准备就绪,您可以使用它。 如果我们不需要集群,那么我们可以在这里结束,但是我们会走得更远。

现在,我们需要将所有可用服务器添加到创建的池中。 为此,请使用第一个菜单项,然后查看以下选项:



再次,选择第一个菜单项,然后指定新服务器的ip,集群中的名称(相同的app02,db01,db02,cache01)以及所连接服务器的root密码。 因此,我们一一添加每个可用的服务器。 在集群中注册所有服务器之后,我们应该在环境的主屏幕上获得如下列表:



现在设置服务器角色将推迟到下一步。


3.项目移交


因为 由于我们的应用程序最初在单个服务器上运行,因此扩展和集群管理模块已禁用,因此不会复制数据库。 传输本身并不是什么超自然的事情-它打包了bitrix和上载文件夹,删除了数据库转储。

存档和转储准备好后,转到app01,然后将项目代码通过git拉到bitrixenv-/ home / bitrix / www中站点的默认文件夹,使用wget或curl下载数据库的存档和转储,解压缩存档并上传转储到app01上的数据库,传输cron条目。

如果您的应用程序使用其他软件,那么该安装并配置它了。 在我们的案例中,supervisor和RabbitMQ的安装和配置如下: 该应用程序使用队列工作。

有一个很小但很重要的细微差别。 将站点转移到群集时,必须在站点上禁用扩展和群集模块,并且池服务器不参与计划转移到的群集环境。 仅在将站点移动并部署到主服务器之后,才应将群集服务器包括在操作中。 否则,站点将无法正确确定群集服务器。


4.启用集群模式


在将应用程序移植到app01之后,我们检查了其工作的正确性,是时候做最有趣的事情了-扩展。 首先,您需要在1C-Bitrix管理面板中安装扩展和群集模块。 在安装过程中,无需执行任何特殊操作,所有工作继续进行。

安装完模块后,转到与主服务器的ssh连接,即app01,然后打开bitrixenv菜单(此处为/root/menu.sh)。 在继续进行进一步配置之前,您需要确定一个重要的点-bitrixenv使用“服务器角色”的概念。 在池中调用什么服务器并不重要,因为 每个服务器都包含bitrixenv软件包中包含的所有软件,我们可以始终为其分配一个或多个角色,我们可以从其中删除它们或将其交换给其他人。 主要角色是mgmt(平衡器,即nginx),web(即httpd / apache),mysql_master和mysql_slave(数据库实例,当我们开始进行复制时出现从属),memcached(具有memcached的服务器)。 现在,总体情况已经清晰了,我们决定从内存缓存服务器开始。 为此,请转到第

 4. Configure memcahed servers > 1. Configure memcached service 

并且我们看到了将要用作memcached服务器的服务器名称的请求。 我们已经为此准备了一个cache01服务器,因此我们查看可用服务器的列表。 如果cache01在列表中,则没有安装问题,我们可以为服务器提供所选角色。



我们输入名称cache01,我们看到设置角色的任务已排队。 我们正在等待后台工作的完成,我们看到服务器已准备好以所需的角色工作。



现在是时候添加第二个应用服务器了。 为此,请沿着小路走
 8. Manage web nodes in the pool > 1. Create web role on server, 



我们需要在其中指定服务器名称以及主节点和新Web节点之间的同步方法。 根据bitrixenv文档和初步测试,对于我们的项目而言,选择第一个选项就足够了(复制项目并一步设置节点配置)。 后台工作结束后,我们应该在主菜单中看到以下内容:



请注意,在app02服务器对面的“角色”列中,指示了Web角色。
它仍然要处理数据库,其配置花费的时间最多。 首先,我将简要说明如何在bitrixenv上下文中分配mysql角色。 默认情况下,数据库的主版本位于群集的主服务器上。 在我们的例子中,有必要将数据库转移到单独的服务器上,并添加另一个具有从属版本的服务器。 在bitrixenv中,您不能仅将主服务器从一台服务器转移到另一台服务器)



顺序如下:

  1. 我们将mysql_slave的角色授予计划将数据库转移到的服务器
  2. 在目标服务器上,我们将mysql_slave的角色更改为mysql_master的角色(自动,旧的mysql_master进入mysql_slave模式)
  3. 删除原始服务器(以前的主服务器)上的mysql_slave角色
  4. ...
  5. 利润!!!

我们以这种方式遵循以下逻辑:

去了

 3. Configure MySQL servers > 4. Create MySQL slave 



我们指出了要赋予角色mysql_slave的服务器-db01。 我们正在等待后台工作完成,我们看到以下结果:



好,现在我们去

 3. Configure MySQL servers > 5. Change MySQL master 



指定app01并等待。 结果,您应该看到类似以下内容的内容:



不可避免地,我们慢慢地安装了最后一个角色mysql_slave。 为此,有必要重复我们为db01设置这样的角色的步骤,但是已经指定了db02。

最后,所有服务器都已连接并配置。

5.调优性能


群集准备就绪后,应用程序配置中将具有一些功能,可以进行其他优化:

  • 我们通过会议推动工作。 这里详细介绍。 简而言之-在memcached中切换会话存储。
  • 删除/bitrix/php_interface/after_connect_d7.php和/bitrix/php_interface/after_connect.php文件,因为 它们发出的命令中断了群集管道(如果不使用bitrixenv,则最好保留它们)。
  • 我们增加了由memcached分配的内存量,并将具有memcached角色的服务器的使用百分比设置为100%。
  • 禁用php模块:apcu,ldap
  • 禁用总线模块“压缩”和“ Web分析”(如果可能)。
  • 考虑使用本地缓存。 更多细节在这里描述。 在我们的情况下,没有增加,但是这个想法很有趣。 该解决方案具有两个功能:

    • Memcached实例的数量应等于Web节点的数量。
    • 要通过nginx直接从本地memcached返回复合缓存,您必须深入到nginx配置,它不能直接使用。

  • 将所有代理的执行移至cron。


结论


在本文的框架中,我们研究了基于bitrixenv配置服务器集群所需的步骤顺序,以及一些可能的陷阱。 根据使用bitrixenv的结果以及基于它的集群,我们可以重点介绍这种方法的优缺点:

优点


  • 安装时间
    安装和基本设置不到30分钟。 无需配置LAMP元素(这些服务彼此集成,以及1C-Bitrix上项目的正确工作)。
  • 加快网站服务
    已安装和配置的服务,使您可以通过memcached而不是文件来组织更快的缓存,使用sphinx引擎进行搜索以及在企业门户上进行视频通话和聊天的功能(nginx推和拉模块)。 此外,环境中的nginx的配置方式是,当您在站点上和bitrixenv菜单中启用相应选项时,将使用nginx直接从memcached发送缓存(绕过httpd和php)
  • 聚类
    无需选择MySQL设置即可启用数据库复制的功能。 连接任意数量的将自动彼此同步的Web节点和Memcached节点。 通过bitrixenv菜单以及通过1C-Bitrix上项目的管理面板,可以管理Web和Memcached节点上的负载平衡。 另外,向其中添加新服务器和角色不会导致简单的项目(也许数据库服务器的角色除外)

缺点


  • 平衡器始终与主Web节点一起使用
    因为 我们已经拥有了自己的平衡器,我们面临着这样一个事实,即不可能放弃内置在bitrixenv中的平衡器。 不可能包括 将其与主要Web节点分开放置。
  • 很多额外的软件,用于某些角色
    因为 由于池中的每个服务器都包含环境的完整版本,因此,即使不使用db-node,它们也是httpd,memcached,sphinx。 同样,您可以在仅处理缓存的服务器上找到MySQL,但在这种情况下,可以在环境菜单或站点的管理面板中停止MySQL。
  • PHP在apache2handler模​​式下工作
    没有办法以fcgi模式安全地启用php,更不用说nginx + php-fpm模式了。 另外,如果不使用铃鼓跳舞,则更改php版本将无效。


资料来源:


www.1c-bitrix.ru/products/env
dev.1c-bitrix.ru/community/blogs/rns/hidden-features-of-work-with-sessions.php
dev.1c-bitrix.ru/community/blogs/rns/the-use-of-local-caches-in-the-cluster.php
dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=32&INDEX=Y
dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=37&INDEX=Y

Source: https://habr.com/ru/post/zh-CN430080/


All Articles