较全的lvs+ha文档(转CU) -> 集群配置基于高可用Lvs+heartbeat

二)集群配置基于高可用Lvs+heartbeat

主服务器配置: 
1- 修改/etc/hosts文件
192.168.1.196           ct1
192.168.1.197           ct2
192.168.1.191        xxx
192.168.1.192        xxxx
1- 修改haresources文件
ct1 IPaddr::192.168.1.198 lvsdr-basic ldirectord
a. 定义主服务器和主服务器eth0虚拟ip,
b. 定义heartbeat启动监控的服务 ,ldirectord   , lvsdr-basic
3- 修改authkeys文件   修改权限 chmod 600 authkeys
auth 1
1 crc
4- 修改ha.cf
   debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility     local0
deadtime 20
initdead 20
#bcast eth1 在eth1上发送心跳广播
ucast eth1 192.168.2.20
auto_failback on
node ct1
node ct2
ping_group group1 192.168.1.196 192.168.1.197
respawn root /usr/lib/heartbeat/ipfail    
apiauth ipfail gid=root uid=root

authkeys
这个配置文件非常简单,就是在auth选择一个值。每个值对应一种算法,这个算法是在主节点和从节点间数据校验用的。这个配置文件权限必须是0600。

chmod 0600 authkeys
配置文件的值如下:
auth 3
1 crc
#2 sha1 HI!
#3 md5 Hello!
haresources
这个文件配置的是节点要管理的资源也就你的高可用服务,这些资源在主节点down调时候,从节点就会开启这些资源。Heartbeat认为
你配置资源名称 start/stop
就可以开启/停止这些资源。所以让你的资源支持start/stop。其实这你只需要对你的应用服务作个脚本,脚本接受start参数就会启动应用服务, 接受stop参数就会停止服务。个人建议,你什么都不要做,就把应用程序名当作资源名就可以了,启动资源名的时候就自动启动你的服务了。而在down机的 时候,所有的程序都死了,根本就不需要heartbeat调用
你配置资源名称stop
命令来结束程序。
在文件中找到:
#node1   10.0.0.170 Filesystem::/dev/sda1::/data1::ext2
这一项,去掉#号,根据格式配置你的资源。第一字段(Node1):主节点名称(必须uname –n的保持一致);第二字段(10.0.0.170):对外虚拟服务IP;第三字段(Filesystem::/dev/sda1:: /data1::ext2):Filesystem表示资源名称,/dev/sda1表示资源启动时的第一个参数,/data1表示第二个参数, /ext2表示第三个参数,依此类推。

ha.cf
这个配置文件比较复杂。我只配了关键的几项:
debugfile /var/log/ha-debug
说明:调试日志文件文件,取默认值
logfile /var/log/ha-log
说明:系统运行日志文件,取默认值
logfacility local0
说明:日志等级,取默认值
keepalive 1
说明:心跳频率,自己设定。1:表示1秒;200ms:表示200毫秒
deadtime 10
说明:节点死亡时间阀值,就是从节点在过了10后还没有收到心跳就认为主节点死亡,自己设定
warntime 5
说明:发出警告时间,自己设定
udpport 28855
说明:心跳信息传递的udp端口,自己设定
#bcast eth0        # Linux
说明:采用udp广播播来通知心跳,建议在副节点不只一台时使用
ucast eth0 xxx
说明:采用网卡eth0的udp单播来通知心跳,eth0的IP
#mcast eth0 225.0.0.1 694 1 0
说明:采用udp多播播来通知心跳,建议在副节点不只一台时使用
auto_failback off
说明:主节点重启成功后,资源是自动拿回到主节点还是等到副节点down调后拿回资源
node heartbeat1
说明:主节点名称,与uname –n保持一致。排在第一的默认为主节点,所以不要搞措顺序
node heartbeat2
说明:副节点名称,与uname –n保持一致
watchdog /dev/watchdog
说明:看门狗。如果本节点在超过一分钟后还没有发出心跳,那么本节点自动重启

以上这些是我个人认为必配项,下面这些是可选项。
stonith baytech /etc/ha.d/conf/stonith.baytech
说明:主/副等所有节点的一种校验。
respawn userid /path/name/to/run
说明:和heartbeat必须一起启动的本地服务
ping 10.10.10.254
说明:伪节点IP,伪节点就是其失效时主/副节点不会正常工作但本身不是主/副节点之一。
respawn hacluster /usr/lib/heartbeat/ipfail
说明:与ping选项一起使用,取默认值。
baud 19200
说明:串口波特率,与serial一起使用。
serial /dev/ttyS0   # Linux
说明:采用串口来传递心跳信息。

ldirectord.cf
   checktimeout=3
checkinterval=1
autoreload=no
logfile="/var/log/ldirectord.log"
quiescent=no
virtual=192.168.1.198:80
       real=192.168.1.191:80 gate
       real=192.168.1.192:80 gate
       service=http // 服务名称http
       request="test.html" //   lvs服务器测试代码
       receive="Test"        //
       scheduler=sh // 按照source hash 调度
       protocol=tcp
在192,191机器apache htdocs里建立test.html文件 输入Test 确保web页面可访问

checktimeout=3   (一个真实的服务器被认为出错所需的时间间隔)
checkinterval=1 (发出检查的时间间隔)
#autoreload=no (自动重载,默认值是no,选yes时配置文件发生变化后就会自动载入)
#callback=配置文件的路径(用来重载配置文件)
fallback=127.0.0.1:80 (当所有的真实服务器出错时,web服务重定向的地址)
#logfile="/var/log/ldirectord.log" (日志文件的目录)
#logfile="local0"
#execute=”configuration”(为这个配置文件启动ldirectord的实例)
quiescent=yes(当选择yes时,一台真实服务器down以后,并不是把它从lvs的表中删除,而是把它的权值设为0,新的链接将不可达)
virtual=192.168.1.198:80   (虚拟的ip和端口号)
real=192.168.1.191:80 gate ( 真实的服务器)  
real=192.168.1.192:80 gate
fallback=127.0.0.1:80 gate
checktype=negotiate(检测类型,默认为negotiate)
service=http
checkport:80 (检查的端口号)
request="test.html" (负载平衡机将查询实际server的服务目录下面是不是 有该文件,如果有说明server还是在服务的,没有将认为它已经出错)
receive="Test "
scheduler=rr   (调度算法)
#persistent=600
#netmask=255.255.255.255
protocol=tcp (协议)
3.        启动
输入 ldirectord start 启动服务,ldirectord stop停止服务,ldirectord rload 重新载入配置信息。

同样   bak服务器也配置如上。  
另外,bak服务 cd /etc/ha.d
            ln –s tmp/harc .
/etc/rc.d/rc.local 中写入 /etc/init.d/heartbeat start
主服务器rc.local 中写入 /etc/init.d/lvsdr-basic start
                  /etc/init.d/heartbeat start
内网服务器可关闭iptables
公网服务器最好是heartbeat通讯口专用   iptables相对应的网口过滤

Ok 到此为止 高可用配完