必读说明

1.背景

Debian系统下的apache软件包版本较滞后,没有及时引入bug及安全漏洞的修复,比如debian8下的2.4.10版本长期存在scoreboard is full bug,会导致apache性能严重下降。最新版本修复了较多安全漏洞和bug,建议升级apache到最新版本2.4.58; 未升级的版本会面临各种已知的性能与安全漏洞风险。

2.影响

(1)请服主根据自身业务apache使用情况,决定升级时间,升级需要重启apache,约有10 s 左右不可用

(2)需要在3月31号前升级完成,并将升级情况和升级后的版本截图同步给运营同学

操作前检查方案

1. 查看当前系统版本

cat /etc/debian_version

(1)如果是debian10,进入步骤2

(2)如是debian8debian9,则需要换apt源

  • debian8
  # 备份当前apt源
  cp -a /etc/apt/sources.list /etc/apt/sources.list.bak

  # 更新源
  vim /etc/apt/sources.list
  # 将下面源地址覆盖旧的源地址
  deb http://apt.x.netease.com:8660/debian-archive/ jessie main non-free contrib
  deb-src http://apt.x.netease.com:8660/debian-archive/ jessie main non-free contrib
  deb http://apt.x.netease.com:8660/debian-security-archive/ jessie/updates main non-free contrib
  deb-src http://apt.x.netease.com:8660/debian-security-archive/ jessie/updates main non-free contrib
  deb http://sa.apt.netease.com:8660/debian/ jessie main
  • debian9
  # 备份当前apt源
  cp -a /etc/apt/sources.list /etc/apt/sources.list.bak

  # 更新源
  vim /etc/apt/sources.list
  # 将下面源地址覆盖旧的源地址
  deb http://apt.x.netease.com:8660/debian-archive/ stretch main non-free contrib
  deb-src http://apt.x.netease.com:8660/debian-archive/ stretch main non-free contrib
  deb http://apt.x.netease.com:8660/debian-security-archive/ stretch/updates main non-free contrib
  deb-src http://apt.x.netease.com:8660/debian-security-archive/ stretch/updates main non-free contrib
  deb http://sa.apt.netease.com:8660/debian/ stretch main

2. 更新源缓存

apt update

3. 查看有无扩展包

通过命令 dpkg -l |grep apache 查看机器上apache版本,若为最新版本则无需升级(最新版本2.4.58),否则进行升级

PNG

也关注一下扩展包,已安装扩展包不会处理,会继续保留,但需重点关注是否有php扩展包,如有则后续升级apache版本操作会稍微复杂一点,如上截图就有三个扩展包,且有php扩展包

4. 备份当前apache运行端口

netstat -tnlp | grep apache | awk '{print $4}' | awk -F":" '{print $NF}' | sort -n > apache_old_port

5. 测试当前所有端口是否正常

for i in $(cat apache_old_port);do curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:$i;done

6. 记录已加载的模块

apache2ctl -M

7. 备份配置文件

cp -a /etc/apache2 /etc/apache2.$(date +%Y%m%d%H%M%s)

8. 备份旧包体文件

dpkg --listfiles $(dpkg --list | grep apache | grep -v apache2-2458 | awk '{print $2}' | tr '\n' ' ') | sort | uniq > rsync.list

mkdir -p backup-old-apache2

while read item; do if [ ! -d $item ]; then rsync -aR $item backup-old-apache2/; fi;done < rsync.list

升级执行步骤

1. 根据有无拓展包选择对应升级方式

情形一:无php扩展包升级方式

# 执行命令 进行Apache版本升级
apt-get update && apt-get install apache2-2458

情形二:有php扩展包升级方式

# mod_php强制依赖prefork mpm,在安装前先删除prefork配置
cd /etc/apache2/mods-enabled && rm -f mpm_prefork.*

# 升级Apache版本
apt-get update && apt-get install apache2-2458

# 删除升级后引入的event mpm
cd /etc/apache2/mods-enabled && rm -f mpm_event.*

# 重新引入prefork mpm
ln -s ../mods-available/mpm_prefork.* .

注意:安装过程会提示是否需要覆盖配置文件,请选择否(直接回车就行),即保留现有配置文件

2.升级命令执行完成后检查

执行命令 dpkg -l |grep apache 检查apache版本是否升级成功,预期能看到最新版本2.4.58 (deibian12升级成功只会有2.4.58一个版本,其他OS版本升级成功可以看到新旧两个版本)

执行命令 apache2ctl -v ,预期看到的版本是2.4.58

执行命令 apache2ctl -M 检查之前已安装好的扩展包

执行命令 apache2ctl -t 确保输出为 OK

3.重启apache

# 停止后再重启
/etc/init.d/apache2 stop
/etc/init.d/apache2 start

# 检查进程命令,确保apache服务重启成功
ps -ef |grep apache 

# 再次执行命令,确保运行的版本为 2.4.58
/usr/sbin/apache2 -v

4.升级后的端口检查

# 备份升级后的端口号
netstat -tnlp | grep apache | awk '{print $4}' | awk -F":" '{print $NF}' | sort -n > apache_new_port

# 检查diff升级前后的端口号,如有diff,先排查diff后续,再继续后面操作
diff apache_old_port apache_new_port

# 升级后检查前保存的端口状态码是否正常
for i in $(cat apache_old_port);do curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:$i;done

5. curl检查业务状态是否有正确返回

# $ip为升级机器的ip,$port为apache业务的端口
curl http://$ip:$port

升级失败回滚方案

1.卸载新包

aptitude remove apache2-2458

2. 重装旧包

aptitude reinstall apache2 apache2-bin apache2-data apache2-utils

results matching ""

    No results matching ""