注意: 阿里云云服务器不支持LVS虚机VIP技术啊,如果需要配置负载均衡,可以直接购买阿里云的负载均衡产品。
- linux安装nginx
- 创建安装目录
mkdir -p /usr/local/nginx cd /usr/local/nginx
- 下载nginx相关依赖, 或手动上传/usr/local/nginx目录下
wget http://www.zlib.net/zlib-1.2.11.tar.gz wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz wget https://www.openssl.org/source/openssl-1.1.0e.tar.gz wget http://nginx.org/download/nginx-1.10.3.tar.gz 注意,我这里是以前下载好上传上去的,可能版本会不一样.... zlib-1.2.8.tar.gz pcre-8.36.tar.gz openssl-1.0.1j.tar.gz nginx-1.5.9.tar.gz
- 安装c++编译环境
yum install gcc-c++ 提示输入y/N 2次都输入:y
- 安装、编译
a. openssl安装
// 可以使用openssl version查看是否安装过了,安装了可以直接跳过此步 tar zxvf openssl-1.0.1j.tar.gz cd openssl-1.0.1j ./config && make && make install
b. pcre安装
tar zxvf pcre-8.36.tar.gz cd pcre-8.36 ./configure && make && make install
c. zlib安装
tar zxvf zlib-1.2.8.tar.gz cd zlib-1.2.8 ./configure && make && make install
d. nginx安装tar zxvf nginx-1.5.9.tar.gz cd nginx-1.5.9 ./configure && make && make install
- 添加软连接
ln -s /lib/libpcre.so.0.0.1 /lib/libpcre.so.1 // 32位系统 ln -s /lib64/libpcre.so.0.0.1 /lib64/libpcre.so.1 // 64位系统
- 安装完成 ,启动nginx
/usr/local/nginx/sbin/nginx // 启动nginx ps axu | grep nginx // 查看nginx是否启动成功
- 测试
浏览器输入: http:192.168.5.128, 如果外网访问失败,关防火墙或者查看阿里云80端口是否配置了安全规则curl http://localhost
- ngin的相关命令
- 启动
/usr/local/nginx/sbin/nginx - 停止
/usr/local/nginx/sbin/nginx -s stop - 重启
/usr/local/nginx/sbin/nginx -s reopen - 重新加载配置文件
/usr/local/nginx/sbin/nginx -s reload
- Keepalived安装
- 进入目录
cd /usr/local
- 下载 keep-1.2.24.tar.gz、或手动上传 keep-1.2.18.tar.gz到/usr/local目录下
wget http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
- 解压
cd /usr/local tar -zxvf keepalived-1.2.18.tar.gz
- 下载 相关软件包
yum install -y openssl openssl-devel
- 安装
cd keepalived-1.2.18 ./configure --prefix=/usr/local/keepalived // 指定编译的目录 make && make install
- 配置nginx为开机启动,创建keepalived目录
mkdir /etc/keepalived
- 复制文件
ln -s /usr/local/keepalived/keepalived/sbin/keepalived /usr/bin/keepalived // 将keepalived命令软连接到/usr/bin下 cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/keepalived chmod 755 /etc/init.d/keepalived //添加执行权限 cp /usr/local/keepalived-1.2.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ ln -s /usr/local/sbin/keepalived /usr/sbin/ ln -s /usr/local/keepalived/sbin/keepalived /sbin/
-
设置开机启动
chkconfig keepalived on // 可以设置开机启动 安装完毕! chkconfig --list keepalived // 查看是否开机启动
-
完成
-
Keepalived的常用命令
- 启动
service keepalived start - 停止
service keepalived stop - 查看
service keepalived status
- lvs+Keepalived实现nginx的高可用
LVS:是Linux Virtual Server的缩写,意思是Linux虚拟服务器。 LVS可以实现负载均衡,将客户端请求转发到具体服务器。
keepalived: 主要进行健康检查,实现 LVS 的高可用性。
keepalived如果发现某台服务器不可用时,就会将其从LVS中剔除,使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉。
介绍文档: https://www.jianshu.com/p/d053d83a4616
- 环境准备
a. 准备2台服务器,192.168.5.128(主)、192.168.5.136(备)
b. 在2台服务器上部署nginx + keepalived,
c. nginx地址http://192.168.5.128/、http://192.168.5.136/(可修改nginx的c. index.html内容区分)
d. 提前好准备2个配置文件keepalived.conf、nginx_check.sh
keepalived.conf 内容如下,keepalived的核心配置, 内容如下:! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { state MASTER #来决定主从 interface eno16777736 # 绑定虚拟 IP 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.110.141 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.110.110 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 } }
nginx_check.sh, 配置nginx宕机的重启命令,内容如下:#!/bin/bash A=`ps -C nginx –no-header |wc -l` if [ $A -eq 0 ];then /usr/local/nginx/sbin/nginx sleep 2 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi fi
- 分别将keepalived.conf 、nginx_check.sh上传到128、136服务器的/etc/keepalived目录下 。 // keepalived.conf文件我是直接覆盖掉了原本的keepalived.conf配置
- 分别给128、136得执行脚本添加执行权限
cd /etc/keepalived chmod u+x nginx_check.sh
- 分别查看128、136网络信息
使用ip a查看网络,得结果为[root@localhost keepalived]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:4d:b7:a0 brd ff:ff:ff:ff:ff:ff inet 192.168.5.128/24 brd 192.168.5.255 scope global eth0 inet6 fe80::20c:29ff:fe4d:b7a0/64 scope link valid_lft forever preferred_lft forever [root@localhost keepalived]#
128为eth0 136为eth1
- 修改128服务器/etc/keepalived/keepalived.conf文件配置,内容如下:
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { state MASTER #来决定主从 interface eth0 # 绑定虚拟 IP 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.5.128 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.5.120 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 } }
- 修改136服务器/etc/keepalived/keepalived.conf文件配置,内容如下:
! Configuration File for keepalived vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" #运行脚本,脚本内容下面有,就是起到一个nginx宕机以后,自动开启服务 interval 2 #检测时间间隔 weight -20 #如果条件成立的话,则权重 -20 } # 定义虚拟路由,VI_1 为虚拟路由的标示符,自己定义名称 vrrp_instance VI_1 { state BACKUP #来决定主从 interface eth1 # 绑定虚拟 IP 的网络接口,根据自己的机器填写 virtual_router_id 121 # 虚拟路由的 ID 号, 两个节点设置必须一样 mcast_src_ip 192.168.5.136 #填写本机ip priority 100 # 节点优先级,主要比从节点优先级高 nopreempt # 优先级高的设置 nopreempt 解决异常恢复后再次抢占的问题 advert_int 1 # 组播信息发送间隔,两个节点设置必须一样,默认 1s authentication { auth_type PASS auth_pass 1111 } # 将 track_script 块加入 instance 配置块 track_script { chk_nginx #执行 Nginx 监控的服务 } virtual_ipaddress { 192.168.5.120 # 虚拟ip,也就是解决写死程序的ip怎么能切换的ip,也可扩展,用途广泛。可配置多个。 } }
- 启动128服务并查看虚拟ip
结果service keepalived start ip a
- 启动136服务并查看虚拟ip
此时,120虚拟IP在主服务上,136实在主服务停止后,才可以查看到service keepalived start ip a
- 测试1, 分别访问
http://192.168.5.128/
http://192.168.5.136/
http://192.168.5.120/ // 此时访问得是128主服务器nginx. - 测试2,停止128得keepalived 服务
访问:service keepalived stop
http://192.168.5.128/
http://192.168.5.136/
http://192.168.5.120/ // 此时访问得是136备机服务器nginx.
- 测试nginx得重启脚本 , 将服务重新启动,停止128服务器得nginx, 访问:
http://192.168.5.128/
http://192.168.5.136/
http://192.168.5.120/ // 此时访问得应该还是128主机机服务器nginx
如测试失败,则:/etc/keepalived/nginx_check.sh // 查看: 手动运行脚本是否可执行 cat nginx_check.sh // 查看: nginx重启脚本得内容 /usr/local/nginx/sbin/nginx // 查看: 手动启动nginx是否成功
- 完成