我有一个项目,我们需要从on解决方案迁移到AWS云。目前,该软件运行在一个实例上。它运行良好,但业务部门希望该软件具有高可用性(HA)。作为HA的一部分,程序将安装在共享文件系统(AWS )上,并将文件系统挂载到多个EC2实例上,以便所有实例访问相同的配置。
我面临的挑战是
PHP_ETC_BASE=/etc/php/7.0
PHP_INI=${PHP_ETC_BASE}/apache2/php.ini我可以在所有AWS EC2实例(PHP_ETC_BASE)上安装PHP_INI,但是PHP_INI需要在共享文件系统上,以便其他实例可以访问配置。我读到的是,我不能将/etc/ PHP /7.0移动到共享的文件系统,那么PHP就不能工作了。
installDepsPhp70 () {
debug "Installing PHP 7.0 dependencies"
PHP_ETC_BASE=/etc/php/7.0
PHP_INI=${PHP_ETC_BASE}/apache2/php.ini
checkAptLock
sudo apt install -qy \
libapache2-mod-php \
php php-cli \
php-dev \
php-json php-xml php-mysql php-opcache php-readline php-mbstring php-zip \
php-redis php-gnupg \
php-gd
for key in upload_max_filesize post_max_size max_execution_time max_input_time memory_limit
do
sudo sed -i "s/^\($key\).*/\1 = $(eval echo {$key})/" $PHP_INI
done
sudo sed -i "s/^\(session.sid_length\).*/\1 = $(eval echo #qcStackCode#{session0sid_length})/" $PHP_INI
sudo sed -i "s/^\(session.use_strict_mode\).*/\1 = $(eval echo \${session0use_strict_mode})/" $PHP_INI
}/var/lib/mysql的类似问题
prepareDB () {
if sudo test ! -e "/var/lib/mysql/mysql/"; then
#Make sure initial tables are created in MySQL
debug "Install mysql tables"
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo service mysql start
fi
if sudo test ! -e "/var/lib/mysql/misp/"; then
debug "Start mysql"
sudo service mysql start发布于 2021-04-20 05:17:09
将您的系统分为三个部分:
Answer第1部分: php.ini使用操作系统。
原因:
Answer第2部分:实际的应用程序文件也存在于ec2上,而且只有EFS上的数据。
原因:
如何:
好消息是你已经把剧本写好了。将部署划分为稍小的阶段:
( a)创建您的BaseAMI (包括上面脚本中的操作系统、PHP )。这只有在你做一个主要的操作系统更新时才会改变。
( b)使用您的BaseAMI,您可以创建一个将应用程序放在顶部的GoldenAMI。(此时运行较小的OS更新以维护安全,如果您的Base较早)。对于所有的EC2s,这个金色的AMI几乎是相同的
c)使用自动缩放组( ASG ),使用GoldenAMI作为基础,并在需要时使用ASG的用户数据属性进行调整。
当您发布新代码时,启动阶段(b)并创建新的GoldenAMI,并将其用于ASG。杀死旧的服务器和新的服务器神奇地出现=没有停机。
如果您确实需要更新php.ini (这将是非常罕见的),那么在第(a)阶段重新启动以构建BaseAMI,然后在同一时间在一个阶段中启动黄金AMI和交换服务器。
要在更新时“欺骗”(快捷方式),将应用程序代码部署到S3,让每个EC2检查S3 (或者更新发生时通过SNS通知),它可以删除代码和自更新。但是,如果这样做,请确保您的安全性是非常严格的(就像将应用程序代码放在EFS上一样)。
关于MySql,
使用AWS提供的RDS解决方案,您可以添加冗余到您的心脏的内容(多个AZs,故障转移,备份)。可能要多花点钱,但医管局会的。
https://codereview.stackexchange.com/questions/259430
复制相似问题