rhcs套件conga实现高可用nginx+httpd集群,fence双机热备, clvm集群

红帽套件集群

HA( 高可用,双机热备,对外只有一个主机,但是两个主机都活着 )

luci: 提供了管理 rhcs 集群的 web 界面, luci 管理集群主要是通过跟 ricci 通信来完成的。

ricci: 安装在集群的节点的接收来自 luci 管理请求的代理

##注意这个luci在生产中是专门有一台服务器的,通常是服务器架或者托管 luci 的数据中心的一台计算机中,但集群计算机也可托管 luci。这里我们为了节省资源,安装在server1上,这不会与server1做nginx服务器冲突

conga --> ricci luci

 

172.25.28.1    server1
172.25.28.2    server2
172.25.28.3    server3
172.25.28.4    server4

(注意NetworkManger,iptables,selinux都关闭,两个节点的时间服务同步)

1,配置yum源

server1和server4采用红帽套件yum源

扫描二维码关注公众号,回复: 2523146 查看本文章
[rhel-source]

name=Red Hat Enterprise Linux $releasever - $basearch - Source

baseurl=http://172.25.28.250/rhel6.5

enabled=1

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release

[HighAvailability]

name=HighAvailability

baseurl=http://172.25.28.250/rhel6.5/HighAvailability

gpgcheck=0

[LoadBalancer]

name=LoadBalancer

baseurl=http://172.25.28.250/rhel6.5/LoadBalancer

gpgcheck=0

[ResilientStorage]

name=ResilientStorage

baseurl=http://172.25.28.250/rhel6.5/ResilientStorage

gpgcheck=0

[ScalableFileSystem]

name=HighAvailability

baseurl=http://172.25.28.250/rhel6.5/ScalableFileSystem

gpgcheck=0

 

2,安装软件

server1

yum install ricci luci  luci只在一个节点安装

passwd ricci 必须要给ricci创建密码

/etc/init.d/ricci start 启动ricci

chkconfig ricci on 开机自启动ricci

chkconfig luci on 开机自启动luci

/etc/init.d/luci start   启动luci 会给一个地址

Point your web browser to https://server1:8084 (or equivalent) to access luci

 

date #时间服务器,时间同步

sever4

yum install -y ricci

passwd ricci #创建用户

/etc/init.d/ricci start  #启动ricci

chkconfig ricci on   #开机启动

 

date #时间差一两秒没什么关系

server1和server4,本地都做好解析

 

3,浏览器输入地址

用超级用户登录,普通用户权力受限

4,创建集群

Cluster Name 不要出现数字,不要超过15个字符,不区分大小写

Download Packages  这个是从yum源里面获取,支持自动升级

Enable Shared Storage Support  这个是为了支持共享存储的,为了后面的实验,选上

 

#######################

ps ax 

1370 ?        D      0:04 /usr/bin/python /usr/bin/yum -y install cman rgmanager l 这里就是调用了管理员权限,使用yum命令安装

 1403 pts/0    R+     0:00 ps ax

并且此时两个节点都开始重启

 

5,添加集群节点

[电脑][数据库]失效备援 (为系统备援能力的一种,当系统中其中一项设备失效而无法运作时,另一项设备即可自动接手原失效系统所执行的工作)

failover

Prioritized  权重,哪个做master,哪个做备用机,数字越小,优先级越高,1,2/10/3都行,数字无所谓

Restricted  服务器上只运行此服务

No Failback 不做切换(server1挂了,server4上,server1又好了,server1不抢master地位),这个主要是对性能差不多的服务器来说可以不选,如果server1和server4信能一样,那么就无序切换,切换浪费资源

6,添加资源

vritualip  #这个vip之前不能被占用,这个也是对外公网ip

调度哪个nginx服务器,vip就会自动绑到哪个nginx服务器上

Number of Seconds to Sleep After Removing an IP Address

如果server1挂了,切换到server4的启动时间

script  #这个脚本是启动服务的nginx的脚本,有可执行权限(注意,如果nginx服务是scp过去的,注意要添加用户,否则会报错,添加软连接

[root@server4 opt]# ln -s /usr/local/nginx/sbin/nginx /sbin/

[root@server4 conf]# nginx 

nginx: [emerg] getpwnam("nginx") failed in /usr/local/nginx/conf/nginx.conf:2

[root@server4 conf]# useradd -M -d /usr/local/nginx/ nginx)

server1和server4都必须有

(企业6标准是放在/etc/init.d下,确保这个脚本可以调用,至于原来那个/sbin/nginx是个二进制文件,不是脚本,HA管理平台无法识别)

(脚本可以根据/etc/init.d/httpd 来改写)

注意:所有的资源在添加到管理平台之前先验证自身没有错误

7,把服务组添加到集群

添加资源时注意顺序

IP Address  Script

(不要点添加子资源,不用自己再配,直接选中直接配置好的资源)

 

8,访问测试

启动server2,server3 httpd服务

在客户端做解析

172.25.28.100   www.westos.org                                                                                    

访问域名

为什么要访问域名,这里是nginx配置文件负载均衡的策略

负载均衡和高可用不能混淆,负载均衡是nginx的一个服务,高可用是是管理nginx服务的,是调度nginx服务器

 

9,高可用测试(这个不一定是nginx服务,其他的也可以)

停掉一个nginx,不影响httpd服务

clustat查看状态

vip也会转移到另一个nginx服务器上面

管理命令

clusvadm -d nginx禁用nginx服务

clusvadm -e nginx 开启nginx服务

nginx服务切换到server4

 

fence机制,双机热备

 

真机

安装fence软件

fence-virtd-multicast-0.3.2-5.el7.x86_64

fence-virtd-libvirt-0.3.2-5.el7.x86_64

fence-virtd-0.3.2-5.el7.x86_64

mkdir /etc/cluster

dd if=/dev/urandom of=/etc/cluster/fence_xvm.key bs=128 count=1  随机字符

fence_virtd -c  配置模式        需要把virbr0改为br0

systemctl restart fence_virtd.service

(这里还要设置开机自启动,否则两个节点连接会失败)

netstat -anulp | grep fence_virtd 查看端口号,服务是否启动

 

把随即字符传给server1,server4

scp fence_xvm.key root@server1:/etc/cluster/

scp fence_xvm.key root@server4:/etc/cluster/

浏览器

1,fence devices

2,nodes

点击server1添加

输入唯一标示符UUID,这是cluster识别节点的方法

server4同上

 

fence机制测试

[root@server1 cluster]# fence_node server4  使server4断电

fence server4 success

此时server4断电,开始重启

 

HA的fence测试

server1网络故障,网络停止,server1自动断电,然后重启

[root@server4 ~]# clustat      server4接管

 service:nginx                 server4                       started       

server4内核崩溃(echo c > /proc/sysrq-tigger)server4断电重启,server1接管

 

 

 

clvmd存储机制+mysql

红帽高可用性附加组件在故障切换配置中支持高可用性 LVM 卷(HA-LVM)。这与集群的逻辑卷管理器
(CLVM)启用的 active/active 配置不同,它是 LVM 的一组集群扩展,可让计算机集群管理共享存储。
应根据所部署应用程序或服务的需要使用 CLVM 或 HA-LVM。
如果应用程序是在全局可识别,并已调整为每次同时在多台机器中运行,那就应该使用 CLVM。特别是
如果您集群中一个以上的节点要求访问在活动节点间共享的存储,您就必须使用 CLVM。CLVM 允许用户
在共享存储中配置逻辑卷,方法是配置逻辑卷时锁定对物理存储的访问,并使用集群的锁定服务管理共
享存储。
如果应用程序以最佳的 active/passive(故障切换)配置运行,那么一次只有一个访问该存储的单一节点
是活动的,您就可以使用高可用逻辑卷管理代理(HA-LVM)。
大多数应用程序在 active/passive 配置中运行更佳,因为它们不是设计或者优化以便与其他事务同时运行。
如果逻辑卷是镜像的,那么选择运行一个在集群的逻辑卷中无法识别的应用程序可能导致性能下降。这是因
为集群沟通会消耗这些事务中的逻辑卷。在集群中可识别的应用程序必须可以让获得的性能比集群文件系统
和集群可识别逻辑卷损失的性能多。有些应用程序和工作负载更容易达到此目的。确定集群要求是什么,以
及在 active/active 集群优化时的额外努力是否有益才是在两种 LVM 变体间进行选择的依据。大多数用户将
会从 HA-LVM 中获得最佳 HA 效果。
HA-LVM 和 CLVM 相似,它们都可以防止 LVM 元数据及其逻辑卷崩溃;反之,如果允许多台机器执行互相
可覆盖的更改,则会发生数据和逻辑卷崩溃。HA-LVM 强制限制只能单独激活逻辑卷,即一次只能在一台机
器中激活。这就是说只能使用存储驱动器的本地(非集群)部署。避免这种形式的集群合作可提高性能。
CLVM 没有这些强制限制,用户可以随意在集群的所有机器中激活逻辑卷。这样就强制使用集群可识别存储
驱动器,即允许将集群可识别文件系统和应用程序放在顶层。
可将 HA-LVM 设置为使用两种方法之一达到其强制独家逻辑卷激活的目的。

配置clvmd

1,server2充当共享磁盘服务器,实际生产中应该专门有一个作为共享磁盘服务器

添加一个8G虚拟磁盘

fdisk -l

2,server2安装服务端软件(这和rhel7配置不一样)

yum install -y scsi-*

配置/etc/tgt/targets.conf 

# Sample target with one LUN only. Defaults to allow access for all initiators:

<target iqn.2018-08.com.example:server.target1>

        backing-store /dev/vdb

        initiator-address 172.25.28.1  只有这两个ip才能使用共享设备

        initiator-address 172.25.28.4

</target>

# Similar, but we use "direct-store" instead of "backing-store".

 

/etc/init.d/tgtd start  启动服务

(这里还要设置开机自启动,否则两个节点连接会失败)

tgt-admin -s 查看信息,这个路径是重点Backing store path: /dev/vdb

3,server1,server4安装客户端软件

yum install -y iscsi-*

发现设备

iscsiadm -m discovery -t st -p 172.25.28.2

172.25.28.2:3260,1 iqn.2018-08.com.example:server.target1

登录设备

iscsiadm -m node -l

fdisk -l 出现/dev/sda

4,server1上启动clvmd

这个管理软件只有server1有,只在这上面安装了套件

/etc/init.d/clvmd status

/etc/init.d/clvmd start

 

5,创建lvm

只需要在一个节点做,另外一个节点会同步但是另外一个节点必须要用pvs,vgs,lvs查看,同步刷新

(这里可以划分分区)

pvcreate /dev/sda  物理卷

vgcreate clustervg /dev/sda  逻辑卷 clustervg是逻辑卷名

lvcreate -L 4G -n demo clustervg  从clustervg中拿出4G创建一个叫做demo的lvm

mkfs.ext4 /dev/clustervg/demo   ext4是本地文件系统,必须要格式化

clusvcadm -d nginx  关闭server3,禁用nginx,节约资源(浏览器上面删除nginx脚本和集群)

 

配置mysql

server1

yum install -y mysql mysql-server

server4

yum install -y mysql-server

以下是手动检查服务是否没问题,server1和server4都尝试一波

servre1

/var/lib/mysql/   #数据库目录,如果没有启动数据库,那么这里面什么都没有

mount /dev/clustervg/demo /var/lib/mysql/  

ll -d /var/lib/mysql/   挂载之后所有者和组发生了改变,都是root

chown mysql.mysql /var/lib/mysql/   改变所有者和组

/etc/init.d/mysqld start 启动数据库,不要在数据库目录启动,否则看不到数据库文件

/etc/init.d/mysqld stop

umount /var/lib/mysql/

server4

mount /dev/clustervg/demo /var/lib/mysql/

/etc/init.d/mysqld start

/etc/init.d/mysqld stop

umount /var/lib/mysql/

浏览器管理

Filesystem Type ext4文件系统有其局限性

这个脚本不用自己写,/etc/init/下面有

这里的Failover Domain没必要重新配置,之前的配置适用

添加资源注意顺序

VIP-->文件系统-->脚本

两个节点cluster查看

已经挂载在server1上

数据库也可以成功登入

 

ext4文件系统有缺陷ext4文件系统是本地文件系统,向一个节点写东西时不能立即同步到另一个节点,而且可以会发生脑裂

 

gfs2文件系统

clusvcadm -d mysqld  也可以在浏览器进行

浏览器删除文件系统(在service group里面点进去集群删除,然后直接删除资源里面的文件系统)

 

server1和server4都卸载

server1

(lvextend -L +4G /dev/clustervg/demo  扩大设备

  Extending logical volume demo to 8.00 GiB

  Insufficient free space: 1024 extents needed, but only 1023 available

lvextend -l +1023 /dev/clustervg/demo #1023个PE

server4 lvs刷新

resize2fs /dev/clustervg/demo 扩大文件系统

lvremove /dev/clustervg/demo 删除lvm server4 lvs刷新同步

lvcreate -L 4G -n demo clustervg)不操作

[root@server1 ~]# lvs

  LV      VG        Attr       LSize   Pool Origin Data%  Move Log Cpy%Sync Convert

  lv_root VolGroup  -wi-ao----  18.54g                                             

  lv_swap VolGroup  -wi-ao---- 992.00m                                             

  demo    clustervg -wi-a-----   4.00g 

 

修改文件系统

mkfs.gfs2 -j 3 -p lock_dlm -t westos_ha:mygfs /dev/clustervg/demo

-j 日志数,节点数+1

-p 锁文件 (只有数据库开启时才会有,数据库stop就消失)

-t cluster name:任意名

  westos_ha就是cluster name

server1和server4都挂载mount /dev/clustervg/demo  /var/lib/mysql/

[root@server1 ~]#  ll -d /var/lib/mysql/

drwxr-xr-x 2 root root 3864 Aug  3 00:54 /var/lib/mysql/

[root@server1 ~]# chown mysql.mysql /var/lib/mysql/     #挂载之后的权限可能会发生变化

 

启动数据库服务

开启clusvcadm -e mysqld

[root@server1 mysql]# gfs2_tool sb /dev/clustervg/demo all

  mh_magic = 0x01161970

  mh_type = 1

  mh_format = 100

  sb_fs_format = 1801

  sb_multihost_format = 1900

  sb_bsize = 4096

  sb_bsize_shift = 12

  no_formal_ino = 2

  no_addr = 23

  no_formal_ino = 1

  no_addr = 22

  sb_lockproto = lock_dlm

  sb_locktable = westos_ha:mygfs2

  uuid = c41672a8-4d2b-6479-12f0-8fbb717aebfd

[root@server1 mysql]# gfs2_tool journals /dev/clustervg/demo

journal2 - 128MB

journal1 - 128MB

journal0 - 128MB

3 journal(s) found.

[root@server1 mysql]# df -h

Filesystem                    Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root   19G  1.2G   17G   7% /

tmpfs                         499M   32M  468M   7% /dev/shm

/dev/vda1                     485M   33M  427M   8% /boot

/dev/mapper/clustervg-demo    4.0G  410M  3.7G  10% /var/lib/mysql         #已经使用了410M大多是日志文件

 

自动挂载server1,server4

/dev/clustervg/demo     /var/lib/mysql          gfs2     _netdev         0 0

_netdev:开机过程中先读取此文件再启动网络,但是iscsi需要网络支持,这就造成了矛盾_netdev保证了在启动网络之后再挂载

mount -a 重新读取

[root@server1 mysql]# clustat 

Cluster Status for westos_ha @ Fri Aug  3 01:22:01 2018

Member Status: Quorate

 Member Name                                    ID   Status

 ------ ----                                    ---- ------

 server1                                            1 Online, Local, rgmanager

 server4                                            2 Online, rgmanager

 Service Name                          Owner (Last)                          State         

 ------- ----                          ----- ------                          -----         

 service:mysqld                        server1                               started      

[root@server1 mysql]# clusvcadm -r mysqld -m server4    #把服务迁移到servre4上

Trying to relocate service:mysqld to server4...Success

service:mysqld is now running on server4

[root@server1 mysql]# clustat 

Cluster Status for westos_ha @ Fri Aug  3 01:23:19 2018

Member Status: Quorate

 Member Name                                    ID   Status

 ------ ----                                    ---- ------

 server1                                            1 Online, Local, rgmanager

 server4                                            2 Online, rgmanager

 Service Name                          Owner (Last)                          State         

 ------- ----                          ----- ------                          -----         

 service:mysqld                        server4                               started      
迁移成功!

 

猜你喜欢

转载自blog.csdn.net/ha_weii/article/details/81370168
今日推荐