Linux之企业实训篇------RHCS套件与nginx实现高可用负载均衡集群

一、RHCS简介

RHCS即 RedHat Cluster Suite,中文意思即红帽集群套件。是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足你的对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。
它提供有如下两种不同类型的集群:
1、高可用性:应用/服务故障切换-通过创建n个节点的服务器集群来实现关键应用和服务的故障切换
2、负载均衡:IP 负载均衡-对一群服务器上收到的 IP 网络请求进行负载均衡
什么是高可用集群:
高可用集群(High Availability Cluster,简称HA Cluster),是指以减少服务中断时间为目的的服务器集群技术。它通过保护用户的业务程序对外不间断提供的服务,把因软 件、硬件、人为造成的故障对业务的影响降低到最小程度。
简单说就是:保证服务不间断地运行,比如,在淘宝网什么时候都可以上去买东西,微信随时可以打开发消息聊天
这里写图片描述
//最上层是LVS负载均衡层,其中server1和server2的配置必须完全相同,中间一层是Real Server层,就是服务节点部分,最后一层是共享存储层,主要用于给GFS文件系统提供共享存储空间。
高可用集群实现原理:
高可用集群主要实现自动侦测(Auto-Detect)故障、自动切换/故障转移(FailOver)和自动恢复(FailBack)。
简单来说就是,用高可用集群软件实现故障检查和故障转移(故障/备份主机切换)的自动化,当然像负载均衡、DNS分发也可提供高可性

二、实验步骤

实验环境:

1.操作系统:rhel6.5
2.主机:
物理主机:172.25.2.250 用作fence
server1 : 172.25.2.1 作主节点,为了提供Cong配置用户界下载ricci,luci
Server2: 172.25.2.2 下载ricci,作副节点

2.1 配置YUM源、域名解析

//此操作在server1和server2上均做

[root@server1 ~]# vim /etc/yum.repos.d/rhel-source.repo  //配置yum源

这里写图片描述
配置解析
这里写图片描述

Server1:


[root@server1 ~]# yum install ricci luci -y      //安装ricci与luci
[root@server1~]# chkconfig luci on            //设置开机自启
[root@server1 ~]# chkconfig ricci on    
[root@server1 ~]# passwd ricci                //修改密码
Changing password for user ricci.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@server1 ~]# /etc/init.d/ricci start        //开启服务
Starting system message bus:                               [  OK  ]
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]
[root@server1 ~]# /etc/init.d/luci start       //开启服务
Adding following auto-detected host IDs (IP addresses/domain names), corresponding to `server2' address, to the configuration of self-managed certificate `/var/lib/luci/etc/cacert.config' (you can change them by editing `/var/lib/luci/etc/cacert.config', removing the generated certificate `/var/lib/luci/certs/host.pem' and restarting luci):
    (none suitable found, you can still do it manually as mentioned above)

Generating a 2048 bit RSA private key
writing new private key to '/var/lib/luci/certs/host.pem'
Start luci...                                              [  OK  ]
Point your web browser to https://server2:8084 (or equivalent) to access luci

Server2:

[root@server1 ~]# yum install ricci -y         //安装ricci
[root@server1 ~]# chkconfig ricci on          //设置开机自启
[root@server1 ~]# passwd ricci               //修改密码
Changing password for user ricci.
New password: 
BAD PASSWORD: it is based on a dictionary word
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@server1 ~]# /etc/init.d/ricci start
Starting system message bus:                               [  OK  ]
Starting oddjobd:                                          [  OK  ]
generating SSL certificates...  done
Generating NSS database...  done
Starting ricci:                                            [  OK  ]

2.2 创建集群

1、浏览器输入 https://172.25.2.1:8084
在网页浏览器的地址栏中输入 cman 服务器的 URL
luci服务器的URL语法为https://172.25.32.1:luci_server_port。luci_server_port 的默认值为 8084 。
这里写图片描述
这里写图片描述
这里写图片描述
//Server1上的系统用户,超级用户的账户密码
这里写图片描述
//Add添加已经创建好的集群,create创建集群
这里写图片描述
//集群的两台HA时间必须同步。
//最下面两个是加入节点自动重启和支持共享存储
注意:
1、在「集群名称」 文本框中输入集群名称。集群名称不能超过 15 个字符。
如果集群中的每个节点都有同样的 ricci 密码,您可以选择「在所有 节 点中使用相同的密 码 」 ,这样就可在添加的节点中自动填写「密 码 」 字段。
2、在「 节 点名称」 栏中输入集群中节点的名称,并在「密 码 」 栏中为该节点输入 ricci 密码。
3、如果要在 ricci 代理中使用不同的端口,而不是默认的 11111 端口,可以更改那个参数。
4、如果不想要在创建集群时升级已经在节点中安装的集群软件软件包,请选择「使用本地安装的软 件包」 选项。如果要升级所有集群软件软件包,请选择「下 载软 件包」 选项
5、添加完成后会发现一直在等待状态,这时查看服务器,会发现server1已经重启,这时只需要启动后再开启服务就成功添加节点了。

如果缺少任意基本集群组件(cman集群管理器、rgmanager集群组资源器,控制集群的调度、modcluster集群的状态监控,及其所有相依性软件包),无论是选择(使用本地安装的软件包) ,还是(下载软件包)选项,都会安装它 们。如果没有安装它们,则创建节点会失败。

这里写图片描述
开始组建:
//此时server1和server2会重启,集群的配置文件在/etc/cluster/cluster.conf
这里写图片描述
//创建成功!
这里写图片描述
//此时,在两个主机中的任一个上执行clustat,或者cat /etc/cluster/cluster.conf ,都可以查看到集群的信息。

[root@server1 ~]# clustat   //查看集群状态信息
Cluster Status for body1 @ Wed Aug  1 10:55:22 2018
Member Status: Quorate

 Member Name                                         ID   Status
 ------ ----                                         ---- ------
 server1                                                 1 Online, Local
 server2                                                 2 Online      

2.3 添加HA服务

HA 服务是一组在统一实体中配置的集群资源,可为客户端提供指定的服务。HA 服务在集群配置文件/etc/cluster/cluster.conf(在每个集群节点中)中以资源树的形式出现。在集群配置文件中,每个 资源树都使用一个 XML 代表,它指定每个资源及其属性,以及在资源树中与其他资源的关系(上级、下级和平级关系)。
在资源树的上/下级关系中采用以下规则:
1.上级资源在下级资源之前启动。
2.在停止上级资源前必须停止全部下级资源。
3.对于正常工作的资源,其下级资源必须全部正常工作。

1.进入luci的集群,点击Faliover Domains,点击Add,输入Name,例如webfile,选中Prioritized、Restricted(只在指定节点跑)、No Failback(资源故障回切),选中下方的server1和server2的Member并输入优先级,这里server1输入2,server2输入1,就是以server2为主节点,数字越小优先级越高;

这里写图片描述
这里写图片描述

2.添加nginx,脚本路径/etc/init.d/nginx,这里系统没有自带,我们需要自己书写添加。

这里写图片描述

[root@server1 ~]# cat /etc/init.d/nginx    //脚本
#!/bin/bash
[ -f /etc/init.d/functions ] && . /etc/init.d/functions
pidfile=/application/nginx/logs/nginx.pid

Start_Nginx(){
  if [ -f $pidfile ];then
    echo "Nginx is running"
  else
    /usr/local/nginx/sbin/nginx &>/dev/null
    action "Nginx is Started" /bin/true
  fi
}
Stop_Nginx(){
    if [ -f $pidfile ];then
    /usr/local/nginx/sbin/nginx -s stop &>/dev/null
    action "Nginx is Stopped" /bin/true
  else
    echo "Nginx is already Stopped"
  fi
}
Reload_Nginx(){
  if [ -f $pidfile ];then
    /usr/local/nginx/sbin/nginx -s reload &>/dev/null
    action "Nginx is Reloaded" /bin/true
  else
    echo "Can't open $pidfile ,no such file or directory"
  fi
}

case $1 in
  start)
    Start_Nginx
    RETVAL=$?
    ;;
  stop)
    Stop_Nginx
    RETVAL=$?
    ;;
  restart)
    Stop_Nginx
    sleep 3
    Start_Nginx
    RETVAL=$?
    ;;
  reload)
    Reload_Nginx
    RETVAL=$?
    ;;
  *)
    echo "USAGE: $0 {start|stop|reload|restart}"
    exit 1
esac
exit $RETVAL
3.集群设置,将Ip Address 与ngnix集群

这里写图片描述
这里写图片描述
这里写图片描述
//添加顺序决定启动顺序!
这里写图片描述
这里写图片描述
这里写图片描述
//创建成功

集群相关命令:

clustat //查看状态
clusvcadm -r nginx -m server2 //将nginx组转移到server2上
clusvcadm -e nginx // 重新激活nginx组
clusvcadm -d nginx //停止nginx组

2.4 测试

2.5.1负载均衡测试

1. Server1与server2分别配置nginx配置文件,设置负载均衡;
Nginx配置文件如下所示,我们用
Server3:(RIP)172.25.2.3/24
Server4 : (RIP)172.25.2.4/24
这里写图片描述
这里写图片描述

2.server3与server4 配置http,发布网页内容分别为server3,server4
3.此时浏览器不断刷新测试
//会在server1与server2之间来回切换
这里写图片描述
这里写图片描述
//负载均衡测试成功

2.5.2 高可用测试

1.查看集群信息,此时使用的LVS为server2

[root@server1 ~]# clustat 
Cluster Status for body_1 @ Thu Aug  2 11:26:01 2018
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, Local, rgmanager
 server2                                     2 Online, rgmanager

 Service Name                   Owner (Last)                   State         
 ------- ----                   ----- ------                   -----         
 service:ngnix                  server2                        started       

2.在server2上关闭ngnix

[root@server2 ~]# nginx -s stop

此时浏览器不断刷新测试
//仍会在server1与server2之间来回切换
这里写图片描述
这里写图片描述

3.查看集群信息,此时使用的LVS为server1

[root@server1 ~]# clustat 
Cluster Status for body_1 @ Thu Aug  2 11:41:40 2018
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, Local, rgmanager
 server2                                     2 Online, rgmanager

 Service Name                   Owner (Last)                   State         
 ------- ----                   ----- ------                   -----         
 service:ngnix                  server1                        starting      

//高可用测试成功
但这只是巧合,在实际的应用中,这里会存在脑裂现象

脑裂 在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果——或者共享资源被瓜分、2边“服务”都起不来了;或者2边“服务”都起来了,但同时读写“共享存储”,导致数据损坏(常见如数据库轮询着的联机日志出错)。

2.5 配置故障切换

RHCS的一个很重要概念:Failover Domain故障转移域,更准确地说应该是服务故障转移域(一个服务包括多个资源如VIP FileSystem…)key当i定义一个节点故障后,此节点上的资源能够转移的目标节点,进而限制了资源转移的范围.
FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的“脑裂”现象,FENCE设备的出现,就是为了解决类似这些问题,Fence设备主要就是通过服务器或存储本身的硬件管理接口,或者外部电源管理设备,来对服务器或存储直接发出硬件管理指令, 将服务器重启或关机,或者与网络断开连接。
FENCE的工作原理:
当意外原因导致主机异常或者宕机时,备机会首先调用FENCE设备,然后通过FENCE设备将异常主机重启或者从网络隔离,当FENCE操作成功执行后,返回信息给备机,备机在接到FENCE成功的信息后,开始接管主机的服务和资源。这样通过FENCE设备,将异常节点占据的资源进行了释放,保证了资源和服务始终运行在一个节点上。

物理主机:

[root@foundation2 ~]# yum install fence-virtd-multicast fence-virtd fence-virtd-libvirt -y    //安装软件

fence-virtd-multicast-0.3.2-2.el7.x86_64 (实现广播同系机制)
fence-virtd-libvirt-0.3.2-2.el7.x86_64 (将libvirt变为fence)
fence-virtd-0.3.2-2.el7.x86_64 (模拟fence)

[root@foundation2 ~]# systemctl enable fence_virtd   //设置开机自启
[root@foundation2 ~]# fence_virtd -c       //配置参数

这里写图片描述
这里写图片描述
这里写图片描述

//创建/etc/cluster/fence_xvm.key密钥

[root@foundation2 ~]# mkdir /etc/cluster/  
[root@foundation2 ~]# cd /etc/cluster/
[root@foundation2 cluster]# dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1
1+0 records in
1+0 records out
128 bytes (128 B) copied, 0.000213055 s, 601 kB/s
[root@foundation2 cluster]# file fence_xvm.key    //查看类型,数据类型
fence_xvm.key: data

//分别传文件给两台HA

[root@foundation2 cluster]# scp fence_xvm.key root@172.25.2.1:/etc/cluster 
root@172.25.2.1's password: 
fence_xvm.key                                                         100%  128     0.1KB/s   00:00    
[root@foundation2 cluster]# scp fence_xvm.key [email protected]:/etc/cluster
[email protected]'s password: 
fence_xvm.key                                                         100%  128     0.1KB/s   00:0
[root@foundation2 cluster]# systemctl start fence_virtd    //启动服务

[root@server1 ~]# cat /etc/cluster/cluster.conf   //查看文件
<?xml version="1.0"?>
<cluster config_version="6" name="body1">
    <clusternodes>
        <clusternode name="server1" nodeid="1">
            <fence>
                <method name="fence1">
                    <device domain="52d753c2-80dd-46a5-8abf-2c1b87f379b6&quot; TYPE=&quot;ext4" name="vmfence"/>
                </method>
            </fence>
        </clusternode>
        <clusternode name="server2" nodeid="2">
            <fence>
                <method name="fence2">
                    <device domain="52d753c2-80dd-46a5-8abf-2c1b87f379b6&quot; TYPE=&quot;ext4" name="vmfence"/>
                </method>
            </fence>
        </clusternode>
    </clusternodes>
    <cman expected_votes="1" two_node="1"/>
    <fencedevices>
        <fencedevice agent="fence_xvm" name="vmfence"/>
    </fencedevices>

2.6 在luci上配置Fence

//在luci(https://172.25.2.1:8084)上的配置:以下操作server1和server2均要做!

1.登陆luci选择集群,点击Fence Devices
这里写图片描述
//此时可以在server1上看到
这里写图片描述
2.点击Nodes,选择server1,点击界面下的”Add Fence Method”,输入一个自定义的server1的Fence名称,例如fence1。
这里写图片描述
这里写图片描述
3.点击Add Fence Instance,选择之前设置好的vmfence,输入Domain(虚拟服务器的UUID)
这里写图片描述
这里写图片描述
这里写图片描述

2.7 Fence测试

//关掉server2,此时server2会重启,服务自动转到server1上

[root@server1 ~]# fence_node server2    //关掉server2
fence server2 success
[root@server1 ~]# clus
clustat    clusvcadm  
[root@server1 ~]# clustat 
Cluster Status for body_1 @ Thu Aug  2 14:04:47 2018
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, Local, rgmanager
 server2                                     2 Online

 Service Name                   Owner (Last)                   State         
 ------- ----                   ----- ------                   -----         
 service:nginx                  server1                        started   //server1

//server1网络切断,此时server1会重启,服务自动调到server2上

[root@server1 ~]# /etc/init.d/network stop    
Shutting down interface eth0:  
[root@server1 ~]# fence_node server2   
fence server2 success
[root@server1 ~]# clus
clustat    clusvcadm  
[root@server1 ~]# clustat 
Cluster Status for body_1 @ Thu Aug  2 14:04:47 2018
Member Status: Quorate

 Member Name                             ID   Status
 ------ ----                             ---- ------
 server1                                     1 Online, Local, rgmanager
 server2                                     2 Online

 Service Name                   Owner (Last)                   State         
 ------- ----                   ----- ------                   -----         
 service:nginx                  server2                       started   //servsr2

//Fence测试成功

猜你喜欢

转载自blog.csdn.net/yifan850399167/article/details/81382269
今日推荐