Nginx + Keepalived高可用

nginx是代理服务器,可以实现后端应用反向代理和负载均衡等功能,并且nginx具有应用健康检查功能,将故障节点从负载均衡池中移除,保证了后端应用的高可用。但是,如果nginx服务器出现问题,则无法对外提供服务。因此,我们必须要考虑到nginx服务的高可用性,一般采用主-主或者主-备的形式部署nginx服务。主机负责对外提供服务和后端应用健康检查,备机仅对后端应用进行健康检查。只有当主机出现问题时,备机才会接管工作。

网络规划

IP地址 虚拟IP地址 节点
10.10.10.1 20.20.20.1 master
10.10.10.2 20.20.20.2 backup

上传安装包

1
2
3
4
5
6
7
8
9
10
11
12
#创建临时目录
$mkdir -p /home/tmp

#上传安装包
keepalived-1.2.17.tar.gz
nginx-1.14.0.tar.gz
openssl-1.1.1.tar.gz
pcre-8.42.tar.gz
zlib-1.2.11.tar.gz

#解压所有安装包
$find . -type f | xargs -I file tar -zxvf file

安装nginx

安装zlib依赖库

1
2
3
4
5
6
7
8
#进入zlib目录
$cd /home/tmp/zlib-1.2.11

#编译
$./configure

#安装
$make && make install

安装pcre依赖库

1
2
3
4
5
6
7
8
#进入pcre目录
$cd /home/tmp/pcre-8.42

#编译
$./configure

#安装
$make && make install

升级openssl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#查看openssl版本
$openssl version

#如果低于1.1.1版本,则需要升级
$cd /home/tmp/openssl-1.1.1

#编译
$./config

#安装
$make && make install

#链接升级后的动态库目录/usr/lib64
$ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
$ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

#查看结果
$ls -al /usr/lib64/ | grep -P '(libssl|libcrypto)'

安装nginx

1
2
3
4
5
6
7
8
#进入nginx目录
$cd /home/tmp/nginx-1.14.0

#编译
$./configure --with-http_ssl_module --with-stream

#安装
$make && make install

验证nginx

1
2
3
4
5
6
7
8
9
10
11
#进入nginx目录
$cd /usr/local/nginx/sbin

#启动nginx
$./nginx

#如果找不到libpcre.so.1
$export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

#刷新配置
source /etc/profile

浏览器打开http://ip:80

安装keepalived

keepalived的负载均衡框架依赖于Linux虚拟服务器内核模块IPVS,如果没有安装IPVS模块,需要安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#查看ipvs模块是否安装
$lsmod | grep ip_vs

#创建ipvs安装文件夹
$mkdir -p /usr/local/ipvs/
$cp /usr/src/linux/net/netfilter/ipvs/* /usr/local/ipvs/
$cd /usr/local/ipvs

#编译并安装
$make -C /lib/modules/`uname -f`/build M=/usr/local/ipvs modules

#查看依赖
$modinfo ip_vs.ko

#逐一安装依赖以及ipvs模块
$modprobe ipv6_lib
$modprobe nf_conntrack
$modprobe libcrc32c
$modprobe ip6_tables
$modprobe ip_vs.ko
$depmod -a
$modprobe ip_vs

安装keepalived

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#进入keepalived目录
$cd /home/tmp/keepalived-1.2.17

#编译
$./configure --prefix=/usr/local/keepalived

#安装
$make && make install

#创建程序软连接,刷新动态链接库
$ln -s /usr/local/keepalived/sbin/keepalived /sbin/
$ldconfig

#查看keepalived是否安装成功
$keepalived -v

将keepalived注册为服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#拷贝配置文件,启动文件,运行参数文件到系统指定目录
$cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived
$cp -R /usr/local/keepalived/etc/keepalived /etc/
$cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig

#修改keepalived启动脚本以适配suse,修改第12行与23行
$sed -i "/init.d\/functions/s/^/\. \/lib\/lsb\/init-functions #/g" /etc/init.d/keepalived
$sed -i "s/daemon //g" /etc/init.d/keepalived

#设置开启启动
$chkconfig keepalived on

#至此,如果需要启动服务
$service keepalived start

#如果需要停止服务,则执行
$service keepalived stop

准备配置

主节点配置