• Centos7中安装和配置nginx和keepalived(主从模式)


    系统版本 Centos7
    IP:192.168.0.3 Master
    IP:192.168.0.4 Slave

    一.Linux安装nginx (主从都安装NGINX)
    1.安装依赖
    [root@Master ~]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

    [root@Slave ~]# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

    2.创建一个文件夹
    [root@Master ~]# cd /usr/local
    [root@Master local]# mkdir nginx
    [root@Master local]# cd nginx/
    [root@Master nginx]#

    [root@Slave ~]# cd /usr/local
    You have new mail in /var/spool/mail/root
    [root@Slave local]# mkdir nginx
    [root@Slave local]# cd nginx/
    [root@Slave nginx]#

    3.将nginx安装包放在nginx文件夹下并解压或者使用wget联网下载
    [root@Master nginx]# wget https://nginx.org/download/nginx-1.16.1.tar.gz
    [root@Master nginx]# tar -zxvf nginx-1.16.1.tar.gz

    [root@Slave nginx]# wget https://nginx.org/download/nginx-1.16.1.tar.gz
    [root@Slave nginx]# tar -zxvf nginx-1.16.1.tar.gz

    4.编译并make
    [root@Master nginx]# cd nginx-1.16.1
    [root@Master nginx-1.16.1]# ./configure --prefix=/usr/local/nginx
    [root@Master nginx-1.16.1]# make
    [root@Master nginx-1.16.1]# make install

    修改nginx访问界面html
    [root@Master nginx-1.16.1]# cd /usr/local/nginx/html/
    You have new mail in /var/spool/mail/root
    [root@Master html]# ll
    total 8
    -rw-r--r-- 1 root root 494 Oct 12 03:23 50x.html
    -rw-r--r-- 1 root root 612 Oct 12 03:23 index.html
    [root@Master html]# vi index.html

    <p><em>Master ip:192.168.0.3</em></p>

    [root@Slave nginx]# cd nginx-1.16.1
    [root@Slave nginx-1.16.1]# ./configure --prefix=/usr/local/nginx
    [root@Slave nginx-1.16.1]# make
    [root@Slave nginx-1.16.1]# make install

    修改nginx访问界面html
    [root@Slave nginx-1.16.1]# cd /usr/local/nginx/html/
    You have new mail in /var/spool/mail/root
    [root@Slave html]# ll
    total 8
    -rw-r--r-- 1 root root 494 Oct 12 03:23 50x.html
    -rw-r--r-- 1 root root 612 Oct 12 03:23 index.html
    [root@Slave html]# vi index.html

    <p><em>Slave ip:192.168.0.4</em></p>

    常用命令
    #启动
    /usr/local/nginx/sbin/nginx

    访问验证:
    http://192.168.0.3/
    http://192.168.0.4/

    #修改配置文件重新加载
    /usr/local/nginx/sbin/nginx -s reload

    #关闭
    /usr/local/nginx/sbin/nginx

    二:安装Keepalived
    1.联网下载到/usr/local目录下并解压有可能会提示连接不成功,加上它提示的命令再下载就好了
    [root@Master html]# cd /usr/local
    [root@Master local]# wget https://www.keepalived.org/software/keepalived-1.4.2.tar.gz
    [root@Master local]# tar -zxvf keepalived-1.4.2.tar.gz

    [root@Slave html]# cd /usr/local
    You have new mail in /var/spool/mail/root
    [root@Slave local]# wget https://www.keepalived.org/software/keepalived-1.4.2.tar.gz
    [root@Slave local]# tar -zxvf keepalived-1.4.2.tar.gz

    2.安装相关依赖,有不用下载了
    [root@Master local]# yum install -y gcc openssl-devel popt-devel

    [root@Slave local]# yum install -y gcc openssl-devel popt-devel

    3.编译安装
    [root@Master local]# cd keepalived-1.4.2
    [root@Master keepalived-1.4.2]# ./configure --prefix=/usr/local/keepalived
    [root@Master keepalived-1.4.2]# make
    [root@Master keepalived-1.4.2]# make install

    [root@Slave local]# cd keepalived-1.4.2
    [root@Slave keepalived-1.4.2]# ./configure --prefix=/usr/local/keepalived
    [root@Slave keepalived-1.4.2]# make
    [root@Slave keepalived-1.4.2]# make install


    4.相关配置,复制就完了
    [root@Master keepalived-1.4.2]# pwd
    /usr/local/keepalived-1.4.2
    You have new mail in /var/spool/mail/root
    [root@Master keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/
    [root@Master keepalived-1.4.2]# mkdir /etc/keepalived
    [root@Master keepalived-1.4.2]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    [root@Master keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    [root@Master keepalived-1.4.2]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/


    [root@Slave keepalived-1.4.2]# pwd
    /usr/local/keepalived-1.4.2
    You have new mail in /var/spool/mail/root
    [root@Slave keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/init.d/keepalived /etc/init.d/
    [root@Slave keepalived-1.4.2]# mkdir /etc/keepalived
    [root@Slave keepalived-1.4.2]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    [root@Slave keepalived-1.4.2]# cp /usr/local/keepalived-1.4.2/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    [root@Slave keepalived-1.4.2]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    [root@Slave keepalived-1.4.2]#


    使用keepalived保证nginx的高可用(一主一从),我的主服务器ip为(192.168.0.3),从机(192.168.0.4)
    在两条服务器分别安装nginx和keepalived,修改keeplived.conf文件

    vim /etc/keepalived/keepalived.conf

    主机配置文件

    ! Configuration File for keepalived

    global_defs {
    #一个没重复的名字即可
    router_id LVS_DEVEL
    }

    # 检测nginx是否运行
    vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    #权重减少20,减少完要比从机的值小
    weight -20
    }

    vrrp_instance VI_1 {

    # MASTER代表主机
    state MASTER

    # 网卡名字 ip addr 可以查看
    interface eno16777736

    # 同一个keepalived集群的virtual_router_id相同
    virtual_router_id 51

    # 权重,master要大于slave
    priority 100

    # 主备通讯时间间隔
    advert_int 1

    # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
    # 本机ip
    unicast_src_ip 192.168.118.3
    unicast_peer {
    # 其他机器ip
    192.168.118.5
    }

    # 设置nopreempt防止抢占资源
    nopreempt

    # 主备保持一致
    authentication {
    auth_type PASS
    auth_pass 1111
    }

    # 与上方nginx运行状况检测呼应
    track_script {
    chk_nginx
    }

    virtual_ipaddress {
    # 虚拟ip地址(VIP,一个尚未占用的内网ip即可)
    192.168.118.118
    }
    }

    [root@Master keepalived-1.4.2]# cd /etc/keepalived/
    [root@Master keepalived]# ll
    total 4
    -rw-r--r-- 1 root root 3550 Oct 12 03:41 keepalived.conf
    [root@Master keepalived]# cp keepalived.conf keepalived.conf.bak
    [root@Master keepalived]# vi /etc/keepalived/keepalived.conf

    global_defs {
    router_id LVS_DEVEL
    }

    vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
    }

    vrrp_instance VI_1 {
    state MASTER
    interface enp0s3
    virtual_router_id 51
    priority 100
    advert_int 1
    unicast_src_ip 192.168.0.3
    unicast_peer {
    192.168.0.4
    }

    nopreempt
    authentication {
    auth_type PASS
    auth_pass 1111
    }

    track_script {
    chk_nginx
    }

    virtual_ipaddress {
    192.168.0.10
    }
    }

    从机配置文! Configuration File for keepalived

    global_defs {
    #一个没重复的名字即可
    router_id LVS_DEVEL
    }

    # 检测nginx是否运行
    vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2

    weight -20
    }

    vrrp_instance VI_1 {

    # 代表是从机
    state BACKUP

    # 网卡名字,ip addr获取
    interface eno16777736

    # 同一个keepalived集群的virtual_router_id相同
    virtual_router_id 51

    # 权重,master要大于slave
    priority 90

    # 主备通讯时间间隔
    advert_int 1

    # 如果两节点的上联交换机禁用了组播,则采用vrrp单播通告的方式
    # 本机ip
    unicast_src_ip 192.168.118.5
    unicast_peer {
    # 其他机器ip
    192.168.118.3
    }

    # 设置nopreempt防止抢占资源
    nopreempt

    # 主备保持一致
    authentication {
    auth_type PASS
    auth_pass 1111
    }

    # 与上方nginx运行状况检测呼应
    track_script {
    chk_nginx
    }

    virtual_ipaddress {
    # 虚拟ip地址(VIP,一个尚未占用的内网ip即可)
    192.168.118.118
    }
    }

    -------------------------------------------------------------
    从机配置文!
    [root@Slave keepalived-1.4.2]# cd /etc/keepalived/
    You have new mail in /var/spool/mail/root
    [root@Slave keepalived]# ll
    total 4
    -rw-r--r-- 1 root root 3550 Oct 12 03:42 keepalived.conf
    [root@Slave keepalived]# cp keepalived.conf keepalived.conf.bak
    [root@Slave keepalived]# vi /etc/keepalived/keepalived.conf

    global_defs {
    router_id LVS_DEVEL
    }

    vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
    }

    vrrp_instance VI_1 {
    state Slave
    interface enp0s3
    virtual_router_id 51
    priority 90
    advert_int 1


    unicast_src_ip 192.168.0.4
    unicast_peer {
    192.168.0.3
    }

    nopreempt

    authentication {
    auth_type PASS
    auth_pass 1111
    }

    track_script {
    chk_nginx
    }

    virtual_ipaddress {
    192.168.0.10
    }
    }

    主从机都需配置检测nginx是否在运行,不在允许就直接启动nginx的脚本,和keepalived放在一起

    脚本名称 nginx_check.sh

    #!/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

    [root@Master keepalived]# pwd
    /etc/keepalived
    [root@Master keepalived]# vi nginx_check.sh
    #!/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


    [root@Slave keepalived]# pwd
    /etc/keepalived
    [root@Slave keepalived]# vi nginx_check.sh
    #!/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就好了,keepalived运行之后就会检测nginx是否在运行,不在运行就通过脚本去启动

    自动重启不了解决方案

    查看脚本是否有运行的权限
    如果你是root登陆的话(不是的话,切换到root用户,对*.sh 赋可执行的权限)

    chmod 777*.sh
    或者
    chmod +x *.sh

    主:
    [root@Master keepalived]# chmod +x nginx_check.sh
    [root@Master keepalived]# ll
    total 12
    -rw-r--r-- 1 root root 572 Oct 12 03:55 keepalived.conf
    -rw-r--r-- 1 root root 3550 Oct 12 03:48 keepalived.conf.bak
    -rwxr-xr-x 1 root root 205 Oct 12 04:04 nginx_check.sh
    [root@Master keepalived]#

    备:
    [root@Slave keepalived]# chmod +x nginx_check.sh
    [root@Slave keepalived]# ll
    total 12
    -rw-r--r-- 1 root root 575 Oct 12 04:02 keepalived.conf
    -rw-r--r-- 1 root root 3550 Oct 12 03:57 keepalived.conf.bak
    -rwxr-xr-x 1 root root 205 Oct 12 04:04 nginx_check.sh
    [root@Slave keepalived]#

    keepalived常用命令

    #启动
    service keepalived start
    #停止
    service keepalived stop
    #查看状态
    service keepalived status

    主:
    [root@Master keepalived]# service keepalived start
    Starting keepalived (via systemctl): [ OK ]
    [root@Master keepalived]# service keepalived stop
    Stopping keepalived (via systemctl): [ OK ]
    [root@Master keepalived]# service keepalived start
    Starting keepalived (via systemctl): [ OK ]
    [root@Master keepalived]# service keepalived status
    ● keepalived.service - LVS and VRRP High Availability Monitor
    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
    Active: active (running) since Mon 2020-10-12 04:08:03 EDT; 14s ago
    Process: 9822 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
    Main PID: 9823 (keepalived)
    CGroup: /system.slice/keepalived.service
    ├─9823 /usr/local/keepalived/sbin/keepalived -D
    ├─9824 /usr/local/keepalived/sbin/keepalived -D
    └─9825 /usr/local/keepalived/sbin/keepalived -D

    Oct 12 04:08:05 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:09 Master Keepalived_vrrp[9825]: Track script chk_nginx is being timed out, expect idle - skipping run
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:13 Master Keepalived_vrrp[9825]: Track script chk_nginx is being timed out, expect idle - skipping run
    Oct 12 04:08:17 Master Keepalived_vrrp[9825]: Track script chk_nginx is being timed out, expect idle - skipping run
    [root@Master keepalived]#

    备:
    [root@Master keepalived]# service keepalived start
    Starting keepalived (via systemctl): [ OK ]
    [root@Master keepalived]# service keepalived stop
    Stopping keepalived (via systemctl): [ OK ]
    [root@Master keepalived]# service keepalived start
    Starting keepalived (via systemctl): [ OK ]
    [root@Master keepalived]# service keepalived status
    ● keepalived.service - LVS and VRRP High Availability Monitor
    Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; vendor preset: disabled)
    Active: active (running) since Mon 2020-10-12 04:08:03 EDT; 14s ago
    Process: 9822 ExecStart=/usr/local/keepalived/sbin/keepalived $KEEPALIVED_OPTIONS (code=exited, status=0/SUCCESS)
    Main PID: 9823 (keepalived)
    CGroup: /system.slice/keepalived.service
    ├─9823 /usr/local/keepalived/sbin/keepalived -D
    ├─9824 /usr/local/keepalived/sbin/keepalived -D
    └─9825 /usr/local/keepalived/sbin/keepalived -D

    Oct 12 04:08:05 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:09 Master Keepalived_vrrp[9825]: Track script chk_nginx is being timed out, expect idle - skipping run
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:10 Master Keepalived_vrrp[9825]: Sending gratuitous ARP on enp0s3 for 192.168.0.10
    Oct 12 04:08:13 Master Keepalived_vrrp[9825]: Track script chk_nginx is being timed out, expect idle - skipping run
    Oct 12 04:08:17 Master Keepalived_vrrp[9825]: Track script chk_nginx is being timed out, expect idle - skipping run
    [root@Master keepalived]#

    开始测试
    直接访问主机的nginx服务
    http://192.168.0.3/

    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    Thank you for using nginx.
    Master ip:192.168.0.3

    直接访问从机的nginx服务
    http://192.168.0.4/

    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    Thank you for using nginx.
    Slave ip:192.168.0.4

    通过keepalived 设置的虚拟ip进行访问
    http://192.168.0.10/

    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    Thank you for using nginx.
    Master ip:192.168.0.3

    一切正常,将主机的keepalived服务给停掉,模拟服务器宕机的场景
    [root@Master keepalived]# service keepalived stop
    Stopping keepalived (via systemctl): [ OK ]
    You have new mail in /var/spool/mail/root
    [root@Master keepalived]#

    然后再通过虚拟IP进行访问
    http://192.168.0.10/

    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    Thank you for using nginx.
    Slave ip:192.168.0.4

    成功切换到备用服务器

    接下来重启主服务器,再访问虚拟ip
    [root@Master keepalived]# service keepalived start
    Starting keepalived (via systemctl): [ OK ]
    [root@Master keepalived]#

    http://192.168.0.10/

    Welcome to nginx!
    If you see this page, the nginx web server is successfully installed and working. Further configuration is required.
    For online documentation and support please refer to nginx.org.
    Commercial support is available at nginx.com.
    Thank you for using nginx.
    Master ip:192.168.0.3


    由此可见,当主机dowm掉的时候才会访问从机,当主机连进来的时候又回去访问主机

    当主机正常运行通过ip addr命令的时候可以看到网络下多了个虚拟ip,而从机却没有,只要当主机挂了时候从机才会显示xuniip

    主:
    [root@Master keepalived]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:19:70:2f brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.3/24 brd 192.168.0.255 scope global noprefixroute enp0s3
    valid_lft forever preferred_lft forever
    inet 192.168.0.10/32 scope global enp0s3
    valid_lft forever preferred_lft forever
    inet6 fe80::58e8:d448:52fb:c18c/64 scope link noprefixroute
    valid_lft forever preferred_lft forever
    [root@Master keepalived]#


    备:
    [root@Slave keepalived]# ip addr
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
    valid_lft forever preferred_lft forever
    2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:93:55:c9 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.4/24 brd 192.168.0.255 scope global noprefixroute enp0s3
    valid_lft forever preferred_lft forever
    inet6 fe80::4ee7:51c7:e8fe:f5e5/64 scope link noprefixroute
    valid_lft forever preferred_lft forever
    You have new mail in /var/spool/mail/root
    [root@Slave keepalived]#

  • 相关阅读:
    js导出table到excel,同时兼容FF和IE
    Android 程式开发:(廿一)消息传递 —— 21.3 使用Intent发送短信
    [置顶] 让金融互联网-P2P网贷融资量增长10倍的广告宣传公益活动
    Headroom.js插件用法
    HDU 5289 Assignment(单调队列)
    sh_Spring整合Hibernate
    怎样高速启动Android模拟器(Android Emulator)
    设计模式——介绍与工厂模式(扁平管理模式VS职业经理人模式)
    在c++11中你最惊讶的新feature是什么?
    python的私有化
  • 原文地址:https://www.cnblogs.com/zhangkaimin/p/13803577.html
Copyright © 2020-2023  润新知