您的位置:首页 > 运维架构 > Nginx

rhcs红帽插件和nginx实现高可用的负载均衡(包含与mysql的数据存储集群管理)

2018-08-03 18:11 651 查看

​RHCS:

Red Hat Cluster Suite即红帽集群套件,它是一套综合的软件组件,可以通过在部署时采用不同的配置,以满足对高可用性,负载均衡,可扩展性,文件共享和节约成本的需要。REDHAT公司在2007年发布RHEL5时,就将原本作为独立软件发售的用于构建企业级集群的集群套件RHCS集成到了操作系统中一同发布。
RHCS提供如下两种不同类型的集群:

应用/服务故障切换——通过创建N个节点的服务器集群来实现关键应用和服务的故障切换
IP负载均衡——对一群服务器上收到的IP网络请求进行负载均衡

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

在server1上:

先配置yum源

scp /etc/yum.repos.d/rhel-source.repo server4:/etc/yum.repos.d  ##将server1的yum配置文件发给server4
scp -r /usr/local/nginx/  server4:/usr/local/   ###将配置好的nginx发给server4
yum install -y luci ricci
chkconfig luci on  ##设置开机自启动
/etc/init.d/luci start
chkconfig ricci on  ###设置开机自启动
passwd ricci   ###设置ricci的密码
/etc/init.d/ricci start
netstat -antlp | grep ricci   ###查看ricci的端口号

在server4上:

yum clean all
ln -s /usr/local/nginx/sbin/nginx   /sbin/   ###做软链接
useradd -M -d /usr/local/nginx/ nginx  ###建立一个nginx用户
id nginx     ##查看用户是否建立
nginx
netstat -antlp | grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1054/nginx
yum install -y ricci
chkconfig ricci on
passwd ricci
/etc/init.d/ricci start
netstat -antlp | grep ricci    #ricci的开启端口为11111

在物理机上写解析:

vim /etc/hosts
172.25.70.1 server1
172.25.70.4 server4
在浏览器访问: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:开启集群共享存储功能

添加成功:


在浏览器添加Failover Domains:用来做节点隔离,或业务切换

添加共享服务VIIP:

添加nginx脚本:

注意:nginx本身没有启动脚本的,所以要自己制作nginx脚本
Vim /etc/init.d/nginx
在脚本中添加如下命令:

#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/var/run/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
echo "nginx already running...."
exit 1
fi
echo -n $"Starting $prog: "
daemon $nginxd -c ${nginx_config}
RETVAL=$?
echo
[ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
return $RETVAL
}
# Stop nginx daemons functions.
stop() {
echo -n $"Stopping $prog: "
killproc $nginxd
RETVAL=$?
echo
[ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /var/run/nginx.pid
}
# reload nginx service functions.
reload() {
echo -n $"Reloading $prog: "
#kill -HUP `cat ${nginx_pid}`
killproc $nginxd -HUP
RETVAL=$?
echo
}
# See how we were called.
case "$1" in
start)
start
;;
stop)
stop
;;
reload)
reload
;;
restart)
stop
start
;;
status)
status $prog
RETVAL=$?
;;

*)
echo $"Usage: $prog {start|stop|restart|reload|status|help}"
exit 1
esac
exit $RETVAL
接着,设置文件的访问权限:
chmod a+x /etc/init.d /nginx                   (a+x参数表示 ==> all user can execute  所有用户可执行)
最后将ngix加入到rc.local文件中,这样开机的时候nginx就默认启动了
vim /etc/rc.local
添加
/etc/init.d/nginx start
保存并退出
下次重启就会生效,实现nginx的自启动。

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


在shell端:

clustat #可以看见nginx已经自动启动
同时可以测试nginx的负载均衡,停掉一个server上的nginx,另一台server的nginx就自动启动

测试:

因为当时设置的server1优先级高,所以当两台机子都好着时他会自动识别server1
当server4坏了,server1就会替上


fence设备

如果集群中一个节点通信失效,那么集群中的其他节点必须能够保证将已经失效的节点与其正在访问的共享资源(比如共享存储)隔离开,出问题的集群节点 本身无法做到这一点,因为该集群节点在此时可能已经失去响应(例如发生hung机),因此需要通过外部机制来实现这一点。这种方法被称为带有fence代 理的隔离。
不配置隔离设备,我们没有办法知道之前断开连接的集群节点使用的资源是否已经被释放掉。如果我们没有配置隔离代理(或者设备),系统可能错误的认为集群节点已经释放了它的资源,这将会造成数据损坏和丢失。 没有配置隔离设备,数据的完整性就不能够被保证,集群配置将不被支持。
当隔离动作正在进行中时,不允许执行其他集群操作。这包括故障转移服务和获取GFS文件系统或GFS2文件系统的新锁。 在隔离动作完成之前或在该集群节点已经重启并且重新加入集群之前,集群不能恢复正常运行。
隔离代理(或设备)是一个外部设备,这个设备可以被集群用于限制异常节点对共享存储的访问(或者硬重启此集群节点。
用fence设备实现,利用libvitr,构建模拟fence。libvirt可以管理虚拟机的开关。
在本地物理主机上:

在物理机上:

这3个软件红帽系统里都带的有
yum install fence-virtd-multicast.x86_64 -y
yum install fence-virtd-libvirt.x86_64 -y
yum install fence-virtd.x86_64  -y
fence_virtd -c      ###对fence_virtd进行配置



mkdir /etc/cluster
cd /etc/cluster/
dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1  ##截取key文件
file fence_xvm.key      #查看文件类型,数据文件
systemctl start fence_virtd   ###打开服务
netstat -antlupe | grep fence_virtd  ##查看 fence_virtd 端口
scp fence_xvm.key server1:/etc/cluster/   将key文件分别发给server1和4
scp fence_xvm.key server4:/etc/cluster/

在server1和server4上查看:

ls /etc/cluster/ #可以看到fence_xvm.key

在浏览端添加fence:

为server1添加fence

指定主fence,可以利用主机的UUID做映射,将集群节点的名称和相应的主机对应


为server4添加fence


fence测试:

当fence设备添加后,某节点的主机网络中断后,fence能够让其主机重新启动,将其隔离,
此时备用机接管其业务

rhcs与mysql数据存储集群管理

在浏览器里的操作,因为fence设备和节点,虚拟ip我们之前添加过所以就不用管了
只需要在添加文件系统,和脚本,并且添加到资源组
添加文件系统:

添加mysql脚本:

添加资源管理组:

将之前添加的资源,按照虚拟ip,文件系统,脚本的顺序依次添加到资源管理组中:


在server2中:

先添加一块8G的硬盘

yum install -y scsi-* ###安装scsi进行文件共享
vim /etc/tgt/targets.conf ###编辑tgt配置文件
/etc/init.d/tgtd start ###打开tgtd

tgt-admin -s ###查看是否读取到配置文件的内容

创建共享设备iscsi+节点同步

开启一个虚拟机(server2)作为共享存储,加上8G的硬盘,客户端(server1和server4)安装iscsi,服务端(server2)安装scsi,通过issic和scsi实现网络存储

在server1中:

yum install -y mysql-server    ###安装数据库服务
yum install -y iscsi-*
/etc/init.d/clvmd status   ###查看clvmd的状态
iscsiadm -m discovery -t st -p 172.25.3.2  ####发现服务端iscsi共享存储
iscsiadm -m node -l     ##登入服务端iscsi共享存储
cat /proc/partitions     ###查看共享的设备
pvcreate  /dev/sda    ##一个节点创建物理分区,逻辑卷组,逻辑卷,另一个节点同步更新
vgcreate clustervg /dev/sda
lvcreate -L 4G -n demo clustervg    ###建立一个4G的逻辑卷
lvs       ##查看逻辑卷
vgs      ##查看逻辑卷组
mkfs.ext4 /dev/clustervg/demo     ##格式化为ext4格式,ext4只能进行本地共享,无法实现网络共享
不能同时挂载
mount /dev/clustervg/demo /var/lib/mysql/        ##将逻辑卷挂载到/var/lib/mysql下
df  -h   ##查看挂载

ll -d /var/lib/mysql/
chown mysql.mysql /var/lib/mysql/       ###更改目录的所属用户和所属组
ll -d /var/lib/mysql/      ##查看目录的信息

在server4中:

yum install -y mysql-server
yum install -y iscsi-*
iscsiadm -m discovery -t st -p 172.25.3.2  ####发现服务端iscsi共享存储
iscsiadm -m node -l     ##登入服务端iscsi共享存储
cat /proc/partitions
mount /dev/clustervg/demo /var/lib/mysql/    ##挂载查看是否共享过来
df
df -h



验证:
clustat ##查看集群状态

此时工作在server1上,所以可以查看登陆mysql是否有数据

,再切换到server4上,登陆mysql看是否有数据
点击图中mysql的状态,选择工作在server4上点击播放键

查看状态发现集群节点正在切换

在server4上登陆mysql发现数据共享过来了

更改文件系统为网络文件系统:

1、在server4中停用mysql高可用
clusvcadm -d mysql
进入到下图界面:

在上图中往下拉找到filesystem,然后点击remove删除
remove后点击最下面的submit提交
然后进入下图界面:

删除所选内容

首先我们用的是ext4文件系统进行格式化,ext4是本地文件系统,所以存储的同步的文件显示需要另一台进行卸载再挂载的操作
gfs2(global file system 2):集群文件系统,可以让多个节点同时使用同一个文件系统,当一个节点使用时会借助DLM机制通过lock_dlm进行加锁,并通知给其他节点持有的锁信息
GFS是RHCS为集群系统提供的一个存储解决方案,它允许集群多个节点在块级别上共享存储,每个节点通过共享一个存储空间,保证了访问数据的 一致性,更切实的说,GFS是RHCS提供的一个集群文件系统,多个节点同时挂载一个文件系统分区,而文件系统数据不受破坏,这是单一的文件系统,例如 EXT3、 EXT2所不能做到的。

改变lvm文件系统为集群g2fs文件系统

在server1中执行:
lvremove /dev/clustervg/demo
在server1中再创建一个lv
lvcreate -L 4G -n demo clustervg

在server4中已同步:

在server1中执行:
mkfs.gfs2 -j 3 -p lock_dlm -t westos_ha:mygfs2 /dev/clustervg/demo

在server1中: cd /var/lib/mysql/
ls
chown mysql.mysql .

在server1中打开mysqld:
/etc/init.d/mysqld start

在server4中:

**gfs2_tool sb /dev/clustervg/demo all**
**gfs2_tool journals /dev/clustervg/demo**



在server1和server4中关闭mysqld
/etc/init.d/mysqld stop
在server1中编辑 /etc/fstab文件
vim /etc/fstab 写入:

在server4中测试挂载情况:

在server4中编辑/etc/fstab,内容和上一步在server1中的一样

将上面的操作都做好后,在server1中启用mysql高可用

测试:

在server1中:

在server4中直接进入/var/lib/mysql目录中,直接ls就可以看见passwd文件

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: