配置部署HA集群
前期环境准备
各节点(即主机)的主机名与“uname -n”的结果保持一致:
# pcmk-1+pcmk-2:
vi /etc/hosts
192.168.10.253 pcmk-1.clusterlabs.org pcmk-1
192.168.10.254 pcmk-2.clusterlabs.org pcmk-2
#pcmk-1:
vi/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=pcmk-1
#pcmk-2:
NETWORKING=yes
HOSTNAME=pcmk-2
各节点间可基于密钥进行SSH通信,而无需密码:
#产生密钥
ssh-keygen -t dsa -f ~/.ssh/id_dsa -N ""
#拷贝受权密钥
cp .ssh/id_dsa.pub .ssh/authorized_keys
#拷贝密钥到 pcmk-2虚拟机
scp -r .ssh pcmk-2:
#查看ssh 是否免密码登陆
ssh pcmk-2 -- uname -n
关闭防火墙:
#停止防火墙
service iptables stop
#查看防火墙的状态
service iptables status
#开机启动 防火墙停止
chkconfig iptables off
#开机启动 查看防火墙状态
部署方案:
安装配置
yum install pacemaker
配置: pcmk-1 和 pcmk-2 的Corosync 配置文件
修改Corosync的核心模板配置文件 改为corosync.conf
#复制corosync的core文件
cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
#编辑core文件
vi /etc/corosync/corosync.conf
# Please read the corosync.conf.5 manual page
compatibility: whitetank
totem {
version: 2 #版本号
secauth: off #是否启动Corosync认证。使用corosync-keygen命令生成密钥
threads: 0 #用于安全认证开启的线程,0为不急于线程模式工作。默认就行
interface {
ringnumber: 0
bindnetaddr: 192.168.10.253 #修改心跳线网段
mcastaddr: 239.255.1.1 #组播传播心跳信息
mcastport: 5405
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
logfile: /var/log/cluster/corosync.log #日志输出位置
to_syslog: no #关闭系统日志输出
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
aisexec {
user: root
group: root
}
#启用pacemaker
service {
name: pacemaker
ver: 0
}
启动:pcmk-1 和 pcmk-2 的Corosync
#pcmk-1启动 corosync
service corosync start
#pcmk-2启动 corosync
ssh pcmk-2 "service corosync start"
检查:pcmk-1 和 pcmk-2 的Corosync 是否启动
#查看 Corosync 是否启动 的命令
grep -e "corosync.*network interface" -e "Corosync Cluster Engine" -e "Successfully read main configuration file" /var/log/cluster/corosync.log
grep TOTEM /var/log/cluster/corosync.log
#查看 pacemaker 是否启动 的命令
grep pcmk_startup /var/log/cluster/corosync.log
检查CorosyncHA的状态:
#查看Corosync 集群状态
crm_mon 或 使用 crm status
安装:crmsh
#安装crmsh(注意:yum如果安装失败需要手动安装)
yum install crmsh
手动安装:下载包请点击链接
RHEL自6.4起不再提供集群的命令行配置工具crmsh,要实现对集群资源管理,还需要独立安装crmsh。
crmsh的rpm安装可从如下地址下载(点击打开链接)
#需要手动下载这4个包
1. crmsh-3.0.0-6.1.noarch.rpm
2. crmsh-scripts-3.0.0-6.1.noarch.rpm
3. python-parallax-1.0.1-28.1.noarch.rpm
4. python-pssh-2.3.1-7.1.noarch.rpm
安装:
#先安装2、3、4 rpm包 序列为1的rpm有2个包的依赖
rpm -ivh python-p* crmsh-scripts-3.0.0-6.1.noarch.rpm
#安装 crmsh-3.0.0-6.1.noarch.rpm 报错有两个依赖包
rpm -ivh crmsh-3.0.0-6.1.noarch.rpm
#安装依赖包 python-dateutil redhat-rpm-config
yum install python-dateutil redhat-rpm-config
#重新安装 crmsh-3.0.0-6.1.noarch.rpm
rpm -ivh crmsh-3.0.0-6.1.noarch.rpm
#使用crmsh 命令:这时候能显示corosync的集群状态信息
crm status
查看Pacemaker 的默认配置:
crm configure show
查看Pacemaker 的默认XML配置:
crm configure show xml
检查配置的有效性:
crm_verify -L
关闭STONITH(而我们配置的集群并没有STONITH设备,因为在配置集群的全局属性时要对其禁用):
#关闭stonith属性(默认是开启的)
crm configure property stonith-enabled=false
#然后在检查:这时候就没有错误信息提示
crm_verify -L
#查看 配置多了一个stonith-enabled属性
crm configure show
添加pacemaker resource资源:
#查看 pacemaker 状态,可以看到2个节点,0个资源
crm status
添加VIP:
资源属性描述:
primitive :定义资源命令
myip :资源ID名,可自行定义
ocf:heartbeat:IPaddr :资源代理(RA)
params ip=192.168.0.26 :定义VIP
op monitor :监控该资源
interval=30s :间隔时间
timeout=20s :超时时间
on-fail=restart :如服务非正常关闭,让其重启,如重启不了,再转移至其他节点
#添加crm管理heartbeat,绑定网卡资源(VIP)。
crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 params ip=192.168.0.222 cidr_netmask=32 op monitor interval=30s
添加 pacemaker 选举票数,如果票数只有2票,如果其中一个节点宕机了,防止脑裂不切换:
#不具备法定票数时采取的动作
crm configure property no-quorum-policy=ignore
添加 资源黏性(防止资源在节点间频繁迁移):
#添加资源黏性
crm configure rsc_defaults resource-stickiness=100
安装httpd服务:
yum install httpd wget
pcmk-1 和 pcmk-2 添加httpd 的默认页面:
#pcmk-1 和 pcmk-2
vi /var/www/html/index.html
#pcmk-1 httpd 内容
<html>
<body>My Test Site - pcmk-1</body>
</html>
添加httpd服务 到pacemaker 资源中:
crm configure primitive WebSite ocf:heartbeat:apache params configfile=/etc/httpd/conf/httpd.conf op monitor interval=1min
添加pacemaker的排列约束(colocation)和顺序约束(order)(一般这两个是成对出现):
添加排列约束(colocation)
crm configure colocation website-with-ip INFINITY: WebSite ClusterIP
添加顺序约束(order)
crm configure order apache-after-ip mandatory: ClusterIP WebSite
添加位置约束(location)
crm configure location prefer-pcmk-1 WebSite 50: pcmk-1
测试集群:http://10.157.32.222/ (此图后续上传,忽略地址,根据你实际的vip访问)
此时的集群状态pcmk-1和pcmk-2都是在线,master是pcmk-1服务上
这时候就能看到httpd转发到pcmk-1服务的 index.html
停止pcmk-1: service corosync stop
当前服务pcmk-1已经宕机
这时候可以看到pacemaker 已经切换到pcmk-2服务了