RHCS套件和nginx实现高可用负载均衡机群

2023-12-27 21:38

本文主要是介绍RHCS套件和nginx实现高可用负载均衡机群,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原理:server1做h1,server9为h2,两个调度器作为高可用节点,集群主机必须所有的配置相同
新开server9主机:172.25.92.9

server1上:作为h1,并作为集群管理节点

[root@server1 ~]# scp /etc/yum.repos.d/rhel-source.repo 172.25.92.9:/etc/yum.repos.d
[root@server1 ~]# scp -r /usr/local/nginx/ 172.25.92.9:/usr/local/
yum install -y luci ricci
[root@server1 ~]# chkconfig luci on
[root@server1 ~]# chkconfig ricci on
[root@server1 ~]# passwd ricci
[root@server1 ~]# /etc/init.d/ricci start
netstat -antlp | grep ricci
tcp        0      0 :::11111                    :::*                        LISTEN      11789/ricci 

server9上,仅作为h2:

[root@server9 ~]# yum clean all
[root@server9 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@server9 ~]# useradd -u 800 nginx   #必须同server1上[root@server9~]# nginx
[root@server9 ~]# netstat -antlp | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1054/nginx          
tcp        0      0 0.0.0.0:443                 0.0.0.0:*                   LISTEN      1054/nginx          
可以看见80443端口
yum install -y ricci
[root@server9 ~]# chkconfig ricci on
[root@server9 ~]# passwd ricci
[root@server9 ~]# /etc/init.d/ricci start
netstat -antlp | grep ricci    #ricci的开启端口为11111
tcp        0      0 :::11111                    :::*                        LISTEN      11789/ricci   

查看RHCS管理界面:
需要做解析:测试机(本地物理机),server1,server9都做同样的dns解析

vim /etc/hosts
172.25.92.1     server1
172.25.92.9     server9

在浏览器访问:https://server1:8084,luci自动开启8084端口接受集群节点的11111端口的数据包
使用server1的root密码登陆
这里写图片描述
创建集群并添加集群节点:
这里写图片描述
注意;1)Use the Same Password for All Nodes的前面如果有对号,则表示集群节点的密码相同,集群节点的密码为刚才为 ricci 的设定的密码
2) Download Packages:表示自动下载需要的安装包
3)Use Locally Installed Packages:表示根据本地已下载的安装包来下载
4)Reboot Nodes Before Joining Cluster:创建集群后会重启动集群节点,所以之前要将集群管理工具(luci和ricci设置为开机自启动)
5)Enable Shared Storage Support:开启集群共享存储功能
这里写图片描述
可以通过查看进程知道,两个集群节点开始安装集群套件,之后重启后加入集群中
这里写图片描述
这里写图片描述

使用keepalived配置高可用的话,不同的keepalived之间通过vrrp协议通信,若果因为网络等问题导致某一个keepalived挂掉的话,
可能会造成数据丢失,也可能产生脑裂问题。

为什么使用fence’设备?
如果集群中一个节点通信失效,那么集群中的其他节点必须能够保证将已经失效的节点与其正在访问的共享资源(比如共享存储)隔离开,出问题的集群节点 本身无法做到这一点,因为该集群节点在此时可能已经失去响应(例如发生hung机),因此需要通过外部机制来实现这一点。这种方法被称为带有fence代 理的隔离。

不配置隔离设备,我们没有办法知道之前断开连接的集群节点使用的资源是否已经被释放掉。如果我们没有配置隔离代理(或者设备),系统可能错误的认为集群节点已经释放了它的资源,这将会造成数据损坏和丢失。 没有配置隔离设备,数据的完整性就不能够被保证,集群配置将不被支持。

当隔离动作正在进行中时,不允许执行其他集群操作。这包括故障转移服务和获取GFS文件系统或GFS2文件系统的新锁。 在隔离动作完成之前或在该集群节点已经重启并且重新加入集群之前,集群不能恢复正常运行。

隔离代理(或设备)是一个外部设备,这个设备可以被集群用于限制异常节点对共享存储的访问(或者硬重启此集群节点。

fence设备如何实现?
利用libvitr,构建模拟fence。libvirt可以管理虚拟机的开关。
在本地物理主机上:

yum install 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)
#创建fence:
[root@foundation92 cluster]# fence_virtd -c
#Module search path [/usr/lib64/fence-virt]: /usr/lib64/fence-virtAvailable backends:libvirt 0.1
Available listeners:multicast 1.2Listener modules are responsible for accepting requests
from fencing clients.#Listener module [multicast]: multicastThe multicast listener module is designed for use environments
where the guests and hosts may communicate over a network using
multicast.The multicast address is the address that a client will use to
send fencing requests to fence_virtd.#Multicast IP Address [225.0.0.12]: Using ipv4 as family.#Multicast IP Port [1229]: Setting a preferred interface causes fence_virtd to listen only
on that interface.  Normally, it listens on all interfaces.
In environments where the virtual machines are using the host
machine as a gateway, this *must* be set (typically to virbr0).
Set to 'none' for no interface.#Interface [br0]: The key file is the shared key information which is used to
authenticate fencing requests.  The contents of this file must
be distributed to each physical host and virtual machine within
a cluster.#Key File [/etc/cluster/fence_xvm.key]: Backend modules are responsible for routing requests to
the appropriate hypervisor or management layer.#Backend module [libvirt]: libvirtConfiguration complete.
#[root@foundation92 cluster]# cat /etc/fence_virt.conf 
#得到如下配置文件即可;
listeners {multicast {key_file = "/etc/cluster/fence_xvm.key";interface = "br0";port = "1229";address = "225.0.0.12";family = "ipv4";}}fence_virtd {backend = "libvirt";listener = "multicast";module_path = "/usr/lib64/fence-virt";
}
#创建/etc/cluster/fence_xvm.key
mdir /etc/cluster/
cd /etc/cluster/
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1file fence_xvm.key      #查看文件类型,数据文件systemctl start fence_virtdnetstat -anulp | grep fence_virtd  udp        0      0 0.0.0.0:1229            0.0.0.0:*                           18908/fence_virtd   
scp fence_xvm.key 172.25.92.1:/etc/cluster
scp fence_xvm.key 172.25.92.9:/etc/cluster
在server1和server9上查看:
ls /etc/cluster/   #可以看到fence_xvm.key#注意:fence_xvm.key用于fence连接集群节点的认证

注意:以下步骤server1和server9都要完成。

在浏览端添加fence:
这里写图片描述
这里写图片描述
为server1和server9分别添加fence
这里写图片描述

这里写图片描述

指定主fence:
这里写图片描述

这里写图片描述

如果集群节点的名称和真实server的主机名称不对应该怎么办呢?本次实验碰巧是对应的。
虚拟机的名称是domainame,而集群是hostname,可以利用主机的UUID做映射,将集群节点的名称和相应的主机对应。
这里写图片描述

以上步骤在server9上也做
完成后在server1的shell命令行端:

root@server1 mnt]# cat /etc/cluster/cluster.conf 
<?xml version="1.0"?>
<cluster config_version="10" name="westos_ha">  #集群名称<clusternodes><clusternode name="server1" nodeid="1"> #server1为节点1<fence><method name="fence1"> #fence1<device domain="8d6a8938-56a7-4970-b7dd-1e1f38ca5f5c" name="vmfence"/></method></fence></clusternode><clusternode name="server9" nodeid="2"><fence><method name="fence9"><device domain="6d73a452-bc4e-4d77-bcdb-49e37573224e" name="vmfence"/></method></fence></clusternode></clusternodes><cman expected_votes="1" two_node="1"/><fencedevices><fencedevice agent="fence_xvm" name="vmfence"/></fencedevices><rm><failoverdomains><failoverdomain name="nginx_fail" nofailback="1" ordered="1" restricted="1"><failoverdomainnode name="server1" priority="1"/><failoverdomainnode name="server9" priority="2"/></failoverdomain></failoverdomains><resources><ip address="172.25.92.100/24" sleeptime="10"/><script file="/etc/init.d/nginx" name="nginx"/></resources><service domain="nginx_fail" exclusive="1" name="nginx" recovery="relocate"><ip ref="172.25.92.100/24"/><script ref="nginx"/></service></rm>
</cluster>
可以看出来在浏览器的操作全部记录在/etc/cluster/cluster.conf 文件中fence_node server9    #模拟集群直接停掉server9,可以看见server9类似force off一样直接关机

在浏览器添加Failover Domains:用来做节点格里,或业务切换
这里写图片描述
添加共享服务:
VIIP:
这里写图片描述
nginx:
这里写图片描述
这里写图片描述
注意:nginx本身没有启动脚本的,所以要自己制作nginx脚本,可以从源码包里修改脚本

将添加的资源放在一个资源组里:
注意:添加的资源顺序就是集群启动后服务启动的顺序,所以要先添加vip,再添加nginx
这里写图片描述
这里写图片描述

在shell端:
clustat #可以看见nginx已经自动启动
ps ax #可以看见nginx进程
同时可以测试nginx的负载均衡,停掉一个server上的nginx,另一台server的nginx就自动启动

这篇关于RHCS套件和nginx实现高可用负载均衡机群的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/544357

相关文章

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持

Pandas使用AdaBoost进行分类的实现

《Pandas使用AdaBoost进行分类的实现》Pandas和AdaBoost分类算法,可以高效地进行数据预处理和分类任务,本文主要介绍了Pandas使用AdaBoost进行分类的实现,具有一定的参... 目录什么是 AdaBoost?使用 AdaBoost 的步骤安装必要的库步骤一:数据准备步骤二:模型

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

Java对象转换的实现方式汇总

《Java对象转换的实现方式汇总》:本文主要介绍Java对象转换的多种实现方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java对象转换的多种实现方式1. 手动映射(Manual Mapping)2. Builder模式3. 工具类辅助映

Go语言开发实现查询IP信息的MCP服务器

《Go语言开发实现查询IP信息的MCP服务器》随着MCP的快速普及和广泛应用,MCP服务器也层出不穷,本文将详细介绍如何在Go语言中使用go-mcp库来开发一个查询IP信息的MCP... 目录前言mcp-ip-geo 服务器目录结构说明查询 IP 信息功能实现工具实现工具管理查询单个 IP 信息工具的实现服

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

python实现svg图片转换为png和gif

《python实现svg图片转换为png和gif》这篇文章主要为大家详细介绍了python如何实现将svg图片格式转换为png和gif,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录python实现svg图片转换为png和gifpython实现图片格式之间的相互转换延展:基于Py

Python利用ElementTree实现快速解析XML文件

《Python利用ElementTree实现快速解析XML文件》ElementTree是Python标准库的一部分,而且是Python标准库中用于解析和操作XML数据的模块,下面小编就来和大家详细讲讲... 目录一、XML文件解析到底有多重要二、ElementTree快速入门1. 加载XML的两种方式2.

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大