红帽套件集群
HA(高可用,双机热备,对外只有一个主机,但是两个主机都活着)
luci:提供了管理rhcs集群的web界面,luci管理集群主要是通过跟ricci通信来完成的。
ricci:安装在集群的节点的接收来自luci管理请求的代理
##注意这个luci在生产中是专门有一台服务器的,通常是服务器架或者托管 luci 的数据中心的一台计算机中,但集群计算机也可托管 luci。这里我们为了节省资源,安装在server1上,这不会与server1做nginx服务器冲突
conga-->ricciluci
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源
[rhel-source]name=Red Hat Enterprise Linux $releasever - $basearch - Sourcebaseurl=http://172.25.28.250/rhel6.5enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release[HighAvailability]name=HighAvailabilitybaseurl=http://172.25.28.250/rhel6.5/HighAvailabilitygpgcheck=0[LoadBalancer]name=LoadBalancerbaseurl=http://172.25.28.250/rhel6.5/LoadBalancergpgcheck=0[ResilientStorage]name=ResilientStoragebaseurl=http://172.25.28.250/rhel6.5/ResilientStoragegpgcheck=0[ScalableFileSystem]name=HighAvailabilitybaseurl=http://172.25.28.250/rhel6.5/ScalableFileSystemgpgcheck=0
2,安装软件
server1
yuminstallricciluciluci只在一个节点安装
passwdricci 必须要给ricci创建密码
/etc/init.d/riccistart 启动ricci
chkconfigriccion 开机自启动ricci
chkconfiglucion 开机自启动luci
/etc/init.d/lucistart 启动luci 会给一个地址
Pointyourwebbrowsertohttps://server1:8084(orequivalent)toaccessluci
date #时间服务器,时间同步
sever4
yuminstall-yricci
passwdricci #创建用户
/etc/init.d/riccistart#启动ricci
chkconfigriccion#开机启动
date #时间差一两秒没什么关系
server1和server4,本地都做好解析
3,浏览器输入地址
用超级用户登录,普通用户权力受限
4,创建集群
ClusterName 不要出现数字,不要超过15个字符,不区分大小写
DownloadPackages这个是从yum源里面获取,支持自动升级
EnableSharedStorageSupport这个是为了支持共享存储的,为了后面的实验,选上
#######################
psax
1370?D0:04/usr/bin/python/usr/bin/yum-yinstallcmanrgmanagerl 这里就是调用了管理员权限,使用yum命令安装
1403pts/0R+0:00psax
并且此时两个节点都开始重启
5,添加集群节点
[电脑][数据库]失效备援(为系统备援能力的一种,当系统中其中一项设备失效而无法运作时,另一项设备即可自动接手原失效系统所执行的工作)
failover
Prioritized权重,哪个做master,哪个做备用机,数字越小,优先级越高,1,2/10/3都行,数字无所谓
Restricted服务器上只运行此服务
NoFailback不做切换(server1挂了,server4上,server1又好了,server1不抢master地位),这个主要是对性能差不多的服务器来说可以不选,如果server1和server4信能一样,那么就无序切换,切换浪费资源
6,添加资源
vritualip#这个vip之前不能被占用,这个也是对外公网ip
调度哪个nginx服务器,vip就会自动绑到哪个nginx服务器上
NumberofSecondstoSleepAfterRemovinganIPAddress
如果server1挂了,切换到server4的启动时间
script#这个脚本是启动服务的nginx的脚本,有可执行权限(注意,如果nginx服务是scp过去的,注意要添加用户,否则会报错,添加软连接
[root@server4opt]#ln-s/usr/local/nginx/sbin/nginx/sbin/
[root@server4conf]#nginx
nginx:[emerg]getpwnam("nginx")failedin/usr/local/nginx/conf/nginx.conf:2
[root@server4conf]#useradd-M-d/usr/local/nginx/nginx)
server1和server4都必须有
(企业6标准是放在/etc/init.d下,确保这个脚本可以调用,至于原来那个/sbin/nginx是个二进制文件,不是脚本,HA管理平台无法识别)
(脚本可以根据/etc/init.d/httpd来改写)
注意:所有的资源在添加到管理平台之前先验证自身没有错误
7,把服务组添加到集群
添加资源时注意顺序
IPAddressScript
(不要点添加子资源,不用自己再配,直接选中直接配置好的资源)
8,访问测试
启动server2,server3httpd服务
在客户端做解析
172.25.28.
访问域名
为什么要访问域名,这里是nginx配置文件负载均衡的策略
负载均衡和高可用不能混淆,负载均衡是nginx的一个服务,高可用是是管理nginx服务的,是调度nginx服务器
9,高可用测试(这个不一定是nginx服务,其他的也可以)
停掉一个nginx,不影响httpd服务
clustat查看状态
vip也会转移到另一个nginx服务器上面
管理命令
clusvadm-dnginx禁用nginx服务
clusvadm-enginx开启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
ddif=/dev/urandomof=/etc/cluster/fence_xvm.keybs=128count=1随机字符
fence_virtd-c配置模式 需要把virbr0改为br0
systemctlrestartfence_virtd.service
(这里还要设置开机自启动,否则两个节点连接会失败)
netstat-anulp|grepfence_virtd查看端口号,服务是否启动
把随即字符传给server1,server4
scpfence_xvm.keyroot@server1:/etc/cluster/
scpfence_xvm.keyroot@server4:/etc/cluster/
浏览器
1,fencedevices
2,nodes
点击server1添加
输入唯一标示符UUID,这是cluster识别节点的方法
server4同上
fence机制测试
[root@server1cluster]#fence_nodeserver4使server4断电
fenceserver4success
此时server4断电,开始重启
HA的fence测试
server1网络故障,网络停止,server1自动断电,然后重启
[root@server4~]#clustatserver4接管
service:nginxserver4started
server4内核崩溃(echoc>/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配置不一样)
yuminstall-yscsi-*
配置/etc/tgt/targets.conf
#SampletargetwithoneLUNonly.Defaultstoallowaccessforallinitiators:
<targetiqn.-.example:server.target1>
backing-store/dev/vdb
initiator-address172.25.28.1只有这两个ip才能使用共享设备
initiator-address172.25.28.4
</target>
#Similar,butweuse"direct-store"insteadof"backing-store".
/etc/init.d/tgtdstart 启动服务
(这里还要设置开机自启动,否则两个节点连接会失败)
tgt-admin-s查看信息,这个路径是重点Backingstorepath:/dev/vdb
3,server1,server4安装客户端软件
yuminstall-yiscsi-*
发现设备
iscsiadm-mdiscovery-tst-p172.25.28.2
172.25.28.2:3260,1iqn.-.example:server.target1
登录设备
iscsiadm-mnode-l
fdisk-l出现/dev/sda
4,server1上启动clvmd
这个管理软件只有server1有,只在这上面安装了套件
/etc/init.d/clvmdstatus
/etc/init.d/clvmdstart
5,创建lvm
只需要在一个节点做,另外一个节点会同步但是另外一个节点必须要用pvs,vgs,lvs查看,同步刷新
(这里可以划分分区)
pvcreate/dev/sda物理卷
vgcreateclustervg/dev/sda逻辑卷clustervg是逻辑卷名
lvcreate-L4G-ndemoclustervg从clustervg中拿出4G创建一个叫做demo的lvm
mkfs.ext4/dev/clustervg/demoext4是本地文件系统,必须要格式化
clusvcadm-dnginx关闭server3,禁用nginx,节约资源(浏览器上面删除nginx脚本和集群)
配置mysql
server1
yuminstall-ymysqlmysql-server
server4
yuminstall-ymysql-server
以下是手动检查服务是否没问题,server1和server4都尝试一波
servre1
/var/lib/mysql/#数据库目录,如果没有启动数据库,那么这里面什么都没有
mount/dev/clustervg/demo/var/lib/mysql/
ll-d/var/lib/mysql/挂载之后所有者和组发生了改变,都是root
chownmysql.mysql/var/lib/mysql/改变所有者和组
/etc/init.d/mysqldstart 启动数据库,不要在数据库目录启动,否则看不到数据库文件
/etc/init.d/mysqldstop
umount/var/lib/mysql/
server4
mount/dev/clustervg/demo/var/lib/mysql/
/etc/init.d/mysqldstart
/etc/init.d/mysqldstop
umount/var/lib/mysql/
浏览器管理
FilesystemTypeext4文件系统有其局限性
这个脚本不用自己写,/etc/init/下面有
这里的FailoverDomain没必要重新配置,之前的配置适用
添加资源注意顺序
VIP-->文件系统-->脚本
两个节点cluster查看
已经挂载在server1上
数据库也可以成功登入
ext4文件系统有缺陷ext4文件系统是本地文件系统,向一个节点写东西时不能立即同步到另一个节点,而且可以会发生脑裂
gfs2文件系统
clusvcadm-dmysqld也可以在浏览器进行
浏览器删除文件系统(在servicegroup里面点进去集群删除,然后直接删除资源里面的文件系统)
server1和server4都卸载
server1
(lvextend-L+4G/dev/clustervg/demo扩大设备
Extendinglogicalvolumedemoto8.00GiB
Insufficientfreespace:1024extentsneeded,butonly1023available
lvextend-l+1023/dev/clustervg/demo#1023个PE
server4lvs刷新
resize2fs/dev/clustervg/demo扩大文件系统
lvremove/dev/clustervg/demo删除lvmserver4lvs刷新同步
lvcreate-L4G-ndemoclustervg)不操作
[root@server1~]#lvs
LVVGAttrLSizePoolOriginData%MoveLogCpy%SyncConvert
lv_rootVolGroup-wi-ao----18.54g
lv_swapVolGroup-wi-ao----992.00m
democlustervg-wi-a-----4.00g
修改文件系统
mkfs.gfs2-j3-plock_dlm-twestos_ha:mygfs /dev/clustervg/demo
-j日志数,节点数+1
-p锁文件(只有数据库开启时才会有,数据库stop就消失)
-tclustername:任意名
westos_ha就是clustername
server1和server4都挂载mount/dev/clustervg/demo/var/lib/mysql/
[root@server1~]#ll-d/var/lib/mysql/
drwxr-xr-x2rootroot3864Aug300:54/var/lib/mysql/
[root@server1~]#chownmysql.mysql/var/lib/mysql/ #挂载之后的权限可能会发生变化
启动数据库服务
开启clusvcadm-emysqld
[root@server1mysql]#gfs2_toolsb/dev/clustervg/demoall
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@server1mysql]#gfs2_tooljournals/dev/clustervg/demo
journal2-128MB
journal1-128MB
journal0-128MB
3journal(s)found.
[root@server1mysql]#df-h
FilesystemSizeUsedAvailUse%Mountedon
/dev/mapper/VolGroup-lv_root19G1.2G17G7%/
tmpfs499M32M468M7%/dev/shm
/dev/vda1485M33M427M8%/boot
/dev/mapper/clustervg-demo4.0G410M3.7G10%/var/lib/mysql#已经使用了410M大多是日志文件
自动挂载server1,server4
/dev/clustervg/demo/var/lib/mysqlgfs2_netdev00
_netdev:开机过程中先读取此文件再启动网络,但是iscsi需要网络支持,这就造成了矛盾_netdev保证了在启动网络之后再挂载
mount-a重新读取
[root@server1mysql]#clustat
ClusterStatusforwestos_ha@FriAug301:22:01
MemberStatus:Quorate
MemberNameIDStatus
--------------------
server11Online,Local,rgmanager
server42Online,rgmanager
ServiceNameOwner(Last)State
---------------------------
service:mysqldserver1started
[root@server1mysql]#clusvcadm-rmysqld-mserver4 #把服务迁移到servre4上
Tryingtorelocateservice:mysqldtoserver4...Success
service:mysqldisnowrunningonserver4
[root@server1mysql]#clustat
ClusterStatusforwestos_ha@FriAug301:23:19
MemberStatus:Quorate
MemberNameIDStatus
--------------------
server11Online,Local,rgmanager
server42Online,rgmanager
ServiceNameOwner(Last)State
---------------------------
service:mysqldserver4started
迁移成功!