Quick Memo:如何解決Percona源與MariaDB-libs衝突的問題

從Percona的Repo處安裝他們的數據庫軟件通常都會導致很多問題…

在CentOS上最常見的案例是跟系統自己的MariaDB-libs衝突(即便是全新安裝的系統),這個時候需要做的事情很簡單,就是單獨卸載掉MariaDB-libs(系統並不需要原帶的數據庫文件去啟動Percona Server)。

yum remove mariadb-libs

簡簡單單解決問題。

(注意:使用yum remove理應能夠做到不牽扯依賴包而只單一卸載該軟件包,如果發現其他依赖包被yum管理器一同要求卸載,應立即停止操作)

編譯新的TCP擁塞控制算法-BBR

最近Google新出的玩物,大家都很開心的在玩,這邊在回國之後也坐下來玩了一下。

本文章基於本人在Linode運行的服務器,系統為CentOS 7。

這裡有一個問題就是大家都以為Linode上了4.9.0內核,理所當然內置BBR了,但Linode官方其實沒有編譯進去,我們還是得自己編譯內核。

本文大部分參考了 https://blog.linuxeye.com/452.html ,Please check them out。

    1. 安裝ELRepo源

cat > /etc/yum.repos.d/elrepo.repo << EOF
[elrepo-kernel]
name=ELRepo.org Community Enterprise Linux Kernel Repository - el7
baseurl=http://elrepo.org/linux/kernel/el7/\$basearch/
http://mirrors.coreix.net/elrepo/kernel/el7/\$basearch/
http://jur-linux.org/download/elrepo/kernel/el7/\$basearch/
http://repos.lax-noc.com/elrepo/kernel/el7/\$basearch/
http://mirror.ventraip.net.au/elrepo/kernel/el7/\$basearch/
enabled=1
gpgcheck=0
EOF

    1. 平行安裝帶有BBR的4.9內核以及GRUB2

注意:GRUB2只是給KVM用的,Xen用戶請照常使用 /boot/grub/menu.lst 來引導啟動。

yum -y install kernel-ml grub2

    1. 檢查內核是否安裝成功

[root@localhost ~]# ls -l /boot/vmlinuz*
-rwxr-xr-x 1 root root 6037696 Dec 29 12:47 /boot/vmlinuz-0-rescue-72863e389b584a4dab36fae7f3bffda2
-rwxr-xr-x 1 root root 6037696 Dec 11 21:37 /boot/vmlinuz-4.9.0-1.el7.elrepo.x86_64

    1. 設置內核(Linode-KVM篇):

[root@localhost ~]# mkdir /boot/grub
[root@localhost ~]# grub2-mkconfig -o /boot/grub/grub.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.9.0-1.el7.elrepo.x86_64
Found initrd image: /boot/initramfs-4.9.0-1.el7.elrepo.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-72863e389b584a4dab36fae7f3bffda2
Found initrd image: /boot/initramfs-0-rescue-72863e389b584a4dab36fae7f3bffda2.img
done

之後在Linode的面板配置文件中選擇使用 GRUB 2 啟動即可。

    1. 設置內核(非Linode-KVM篇):

[root@localhost ~]# awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg
CentOS Linux (4.9.0-1.el7.elrepo.x86_64) 7 (Core)
CentOS Linux (3.10.0-327.36.3.el7.x86_64) 7 (Core)
CentOS Linux (0-rescue-153a217486fe4be8a8dbd28db67ed581) 7 (Core)
[root@localhost ~]# grub2-set-default 0

  1. 設置內核(Linode-Xen篇):

編輯 /boot/grub/menu.lst :

timeout 5
title CentOS (4.9.0-1.el7.elrepo.x86_64)
root (hd0)
kernel /boot/vmlinuz-4.9.0-1.el7.elrepo.x86_64 root=/dev/xvda
initrd /boot/initramfs-4.9.0-1.el7.elrepo.x86_64.img

然後在Linode的面板配置文件中選擇 pv-grub-x86_64 啟動方式。

注意:以上更換內核方式均需重啟。

最後,配置使用BBR:

cat >>/etc/sysctl.conf << EOF
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control=bbr
EOF

sysctl -p

查看BBR是否生效:

[root@localhost ~]# sysctl net.ipv4.tcp_available_congestion_control
net.ipv4.tcp_available_congestion_control = bbr cubic reno
[root@localhost ~]# lsmod | grep bbr
tcp_bbr 16384 16

增加 HTTP/2 支持

曾經的我天真的以為只要在 Nginx 配置文件中寫上 ssl http2 就是在用 HTTP/2 了…

經過 Maxsum 的提醒,我錯了…我錯在低估了 CentOS 的軟件版本落後程度。

Maxsum 在跟我說 ALPN 時,我還在圖樣的想著 ALPN 是什麼,而去問 Google 。很明顯,如果系統上的 OpenSSL 版本太舊,或者說使用了 Nginx 官方提前編譯好的安裝包,基本都是不支持 ALPN (HTTP/2 所需特性)的 1.0.1e 版本。

於是,幹活吧。

從官網上拖下最新的 OpenSSL 1.1.0c 壓縮包,重新編譯一次 Nginx 。

Welcome to HTTP/2 now.

好久不見,初次見面。

你好,歡迎來到白翼的服務器運維博客,但又已經不是你熟知的那個博客。

曾經的內容,今後會在某個二級域名上線,至於是哪個二級域名,我也不想公開,就讓那些內容成為古老的寶藏,等待探險人的發現吧。

好了,我們迴歸本質,談談技術。

這次為何重啟博客,有幾個理由:

  1. Typecho太久沒有人維護。
  2. 我想要重新寫點乾貨。
  3. 老博客的主題厭倦了。

還有就是,對於我這種懶癌晚期患者來說,能夠動手做這麼大改裝,一定是服務器環境也煥然一新了。

That’s right,歡迎體驗這個由 PHP 7.1 + Percona 5.7 + Nginx 1.11 驅動的服務器,部署了 Let’s Encrypt (Certbot),而且,每一個部署細節都用 Shell 腳本寫了下來,再也無需手動輸入命令肝到天亮。

Check them out:
https://github.com/richardevs/Self-written-bash-script


這次的服務器環境配置可以說是我第一次挑戰全部靠自己,之前因為網站數量過多,一直都依賴著 Virtualmin 的幫助,而 Virtualmin 的臃腫安裝步驟也實在很吃資源,於是,每一點的不滿都成為推動人類進步的動力(?)

總結一下這次遇到的困難,其實比起以前,這次可以說是很暢通無阻了:

  1. PHP 7.1 存在部分函數變更,比如 Typecho 用的 utf8_decode() 刪除了。
  2. 靠自己,就有Bug。php-xml, php-gd, php-mcrypt 等都沒有裝,導致初期測試時很多網站空白輸出。沒錯,我只裝了 php 和 php-mysqlnd 。
  3. 這次把服務器的安全性提升了一個檔次,所有 80 端口的請求都會被 301 至 HTTPS 。雖然大部分網站都能夠自動根據 HSTS 引導文件訪問 HTTPS ,然而部分上古世紀的代碼沒能做到,這個時候就需要 Content-Security-Policy : upgrade-insecure-requests 出場了。

最後,再次歡迎你到來/回來。