Centos7 keepalived +nginx

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7 keepalived +nginx相关的知识,希望对你有一定的参考价值。

官网下载:
keepalived-2.0.12.tar
nginx-1.14.2.tar

主机A:192.168.0.110/24
主机B:192.168.0.120/24

VRRP:192.168.0.200/24

用winscp把文件上传到 /usr/local/
cd /usr/local/
安装keepalived:
(2)# cd /usr/local/
(3)# tar -zxvf keepalived-2.0.12.tar.gz
(4)# cd keepalived-2.0.12
(5)# ./configure --prefix=/usr/local/keepalived
(6)# make && make install

[root@localhost local]# tar -zxvf keepalived-2.0.12.tar.gz 

安装路径:/usr/local/keepalived

[root@localhost keepalived-2.0.12]# ./configure --prefix=/usr/local/keepalived
[root@localhost keepalived-2.0.12]# make && make install

如果是新的系统安装是需要安装依赖包,可以挂载光盘用本地yum安装。

[root@localhost keepalived-2.0.12]# mkdir /mnt/cdrom
[root@localhost keepalived-2.0.12]# mount /dev/cdrom /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
 cd /etc/yum.repos.d/
 cp CentOS-Base.repo CentOS-Base.repo.bak
  vi CentOS-Base.repo

技术图片
保存

[root@localhost yum.repos.d]# yum repolist

技术图片

报错1:
技术图片
一次解决依赖包问题

[root@localhost yum.repos.d]# yum -y install openssl-devel gcc libnl-devel
[root@localhost keepalived-2.0.12]# yum -y install gcc   解决 

报错2:
技术图片

[root@localhost keepalived-2.0.12]# yum -y install openssl-devel  解决

报错3:
技术图片

[root@localhost keepalived-2.0.12]# yum -y install libnl-devel  解决

再次执行

./configure --prefix=/usr/local/keepalived  && make && make install    安装成为

没有任何错误出现
技术图片

将keepalived添加到系统服务中

# 拷贝执行文件
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
# 将初始化脚本拷贝到系统初始化目录下
cp /usr/local/keepalived-2.0.10/keepalived/etc/init.d/keepalived /etc/init.d/
# 将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived-2.0.10/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
# 创建keepalived文件夹
mkdir /etc/keepalived/
# 将keepalived配置文件拷贝到etc下
cp /usr/local/keepalived-2.0.10/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
# 添加可执行权限
chmod +x /etc/init.d/keepalived
# 添加keepalived到开机启动
chkconfig --add keepalived
chkconfig keepalived on

此时已加入系统服务 可使用services 启动

#启动
service keepalived start
#停止
service keepalived stop
#重启
service keepalived restart
#查看启动情况
ps -aux |grep keepalived

修改刚添加到系统的配置文件:vi /etc/keepalived/keepalived.conf
找到虚拟路由节点 vrrp_instance(Virtual Router Redundancy Protocol)

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL01    //router_id   不能想同
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

vrrp_instance VI_1 {
    state MASTER          //MASTER主节点,备用节点上设置为state BACKUP
    interface ens32        //绑定虚拟机IP的网卡  两个节点设置一样 根据 ipaddr换成对应的网卡地址
    virtual_router_id 51  //VRRP组名,主副节点设置必须一样,指名各个节点属于同一个VRRP组,同一个组的节点互相抢IP
    priority 100         //优先级(1~254之间),备用节点必须比主节点优先级低
    advert_int 1         //组播信息发送间隔,两个节点设置必须一样
    authentication {    //设置验证信息, 两个节点设置必须一样,用于节点间信息转发时的加密
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {  // 虚拟IP两个节点设置必须一样,两节点同时抢一个io
        192.168.0.200/24  // 如果两个nginx的ip分别是192.168.0.110,.120,则此处的虚拟ip跟它俩同一个网段即可 24代表3个255的子网掩码
    }
}

如果要 ping 192.168.0.200 还需要注释掉配置文件中的# vrrp_strict

-----*****---
主备都抢到了虚拟ip
技术图片
挂载了光盘可以直接安装 tcpdump

 yum -y install tcpdump

采用 tcpdump 抓包定位问题,以下是在192.168.0.110 主节点的抓包结果
tcpdump -i ens32 vrrp -n
技术图片

由上图可以看到,192.168.93.140和192.168.93.141两个IP在轮流发送组播信号。而正常的应该是由MASTER服务器发送组播,如果BACKUP收不到MASTER的组播信号了,那么判定MASTER宕机了,BACKUP就会接手VIP

问题就是出现在了防火墙这里,防火墙阻止了vrrp组包发送

如果是Firewalld防火墙 则主、备都运行下面的命令

[root@localhost etc]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens32 --destination 224.0.0.18 --protocol vrrp -j ACCEPT
success
或者
[root@localhost etc]# firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface  ens32 --protocol vrrp -j ACCEPT
success
[root@localhost etc]# firewall-cmd --reload
success
[root@localhost etc]# 

如果添加了没有正常重启下服务器
技术图片
重启后正常.
服务器A:
技术图片
服务器B:
技术图片
至此Keepalived 安装完成。


安装 Nginx
安装所需环境
Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境。

一. gcc 安装
安装 nginx 需要先将官网下载的源码进行编译,编译依赖 gcc 环境,如果没有 gcc 环境,则需要安装:

yum install gcc-c++
二. PCRE pcre-devel 安装
PCRE(Perl Compatible Regular Expressions) 是一个Perl库,包括 perl 兼容的正则表达式库。nginx 的 http 模块使用 pcre 来解析正则表达式,所以需要在 linux 上安装 pcre 库,pcre-devel 是使用 pcre 开发的一个二次开发库。nginx也需要此库。命令:

yum install -y pcre pcre-devel
三. zlib 安装
zlib 库提供了很多种压缩和解压缩的方式, nginx 使用 zlib 对 http 包的内容进行 gzip ,所以需要在 Centos 上安装 zlib 库。

yum install -y zlib zlib-devel
四. OpenSSL 安装
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及 SSL 协议,并提供丰富的应用程序供测试或其它目的使用。
nginx 不仅支持 http 协议,还支持 https(即在ssl协议上传输http),所以需要在 Centos 安装 OpenSSL 库。

yum install -y openssl openssl-devel

不过在安装keepalived 时都安装 了这些依赖包了,下面直接安装 就 行了.

[root@localhost ~]# cd /usr/local/
[root@localhost local]# tar -zxvf nginx-1.14.2.tar.gz 
[root@localhost local]# cd nginx-1.14.2
[root@localhost nginx-1.14.2]# ./configure --prefix=/usr/local/nginx

出现这个就 没问题了
技术图片

[root@localhost nginx-1.14.2]# make && nake install

技术图片
如果 没有生成Nginx 文件夹 就分开执行 1. make 2. make install

nginx 命令

5.启动

$ /usr/local/nginx/sbin/nginx
检查是否启动成功:

打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功。

部分命令如下:
重启:
$ /usr/local/nginx/sbin/nginx –s reload
停止:
$ /usr/local/nginx/sbin/nginx –s stop
测试配置文件是否正常:
 $ /usr/local/nginx/sbin/nginx –t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
强制关闭:
$ pkill nginx

经过编译安装以及解决问题,Nginx 已经运行正常,但是此时 Nginx 并没有添加进系统服务。接下来会将 Nginx 添加进系统服务并且设置开机启动。
在 /usr/lib/systemd/system 目录中添加 nginx.service 内容如下

[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

添加完成后再来看下
技术图片
输入 systemctl start nginx 启动
技术图片
然后输入 systemctl enable nginx 设置开机启动
技术图片
Nginx 安装成功.

下面来测试下 主备 nginx

[root@localhost ~]# cd /usr/local/nginx/html/

修改 主 机 index.html
添加 <h1>MASTTER:192.168.0.110</h1>
修改 备 机 index.html
添加 <h1>BACKUP:192.168.0.120</h1>
记得修改完要重启nginx

[root@localhost html]# systemctl restart nginx

如果访问不了 WEB 就在隔火墙上 添加

[root@localhost html]# firewall-cmd --zone=public --permanent --add-port=80/tcp
success
[root@localhost html]# firewall-cmd --reload
success

这是 正常情况下访问:
技术图片
下 面是关闭服务器 A 访问的页面
技术图片
技术图片
再把服务器A打 开访问网页

技术图片
技术图片

接着添加 一nginx 脚本 :新建 chk_nginx.sh

[root@localhost ~]# cd /etc/keepalived
[root@localhost keepalived]# touch chk_nginx.sh

内容如下
技术图片

[root@localhost keepalived]# chmod +x chk_nginx.sh    添加执行权限

修改keepalived.conf
技术图片

[root@localhost keepalived]# systemctl restart keepalived

ok 测试 脚本先 执行

[root@localhost keepalived]# systemctl stop nginx

再访问 网页,发现转到备机上了
技术图片
实验完成。

以上是关于Centos7 keepalived +nginx的主要内容,如果未能解决你的问题,请参考以下文章

Centos7 keepalived +nginx

centos7下keepalived+nginx配置

Centos7+Nginx+Keepalived实现Apache服务的高可用&负载均衡

Centos7+nginx+keepalived高可用及双主模式

centos7 Nginx+keepalived高可用+反向代理

Centos7 安装keepalived实现高可用