5. http://yimu1023.blog.163.com/blog/static/362522822008621511567/或 http://www.linux-
ha.org/wiki/STONITH),这里我们暂时不考虑这个问题。
第二步,配置虚拟 IP 地址:
sudo crm configure
crm(live)configure# primitive vip ocf:heartbeat:IPaddr2
> params ip="192.168.0.88"
> nic="eth0"
> cidr_netmask="24"
> op start interval="0s" timeout="60s"
> op monitor interval="5s" timeout="20s"
> op stop interval="0s" timeout="60s
crm(live)configure# commit
crm(live)configure# exit
其中:蓝色字体部分为系统提示符;vip 为本虚拟 IP 配置的名称,可以自行定义;
192.168.0.88 是业务应用要使用的虚拟 IP 地址;eth0 是对外提供服务的,或者说是虚拟 IP 地
址要绑定的以太网接口名;24 是 CIDR 子网掩码长度;其它参数可查阅相关文档。
第三步,验证虚拟 IP 状态:
sudo crm_mon -1
除了上文中看到的 Online 信息之外,还应该看到
vip (ocf::heartbeat:IPaddr2): Started ubuntu1
其中 vip 是上文提到的虚拟 IP 配置的名称,ubuntu1 是当前活动的主机机器名或域名,
根据实际情况不同,这里也有可能是 ubuntu2。此处假设 ubuntu1 为主服务器,则当前值应
为 ubuntu1。
4、效果验证
4.1、验证 IP 失效转移
编辑 ubuntu1 和 ubuntu2 主机上的/var/lib/tomcat6/webapps/ROOT/index.html 文件,内容
分别为:
<h1>This is ubuntu1.</h1>
和
<h1>This is ubuntu2.</h1>
在局域网中的某主机 192.168.0.123 上以 Web 浏览器浏览网址 http://192.168.0.88/,应该
看到
This is ubuntu1.
将 ubuntu1 的以太网线拔出,刷新 Web 浏览器,应该看到
This is ubuntu2.
6. 重新插好以太网线,再次刷新 Web 浏览器,应该看到
This is ubuntu1.
4.2、验证 MySQL
由于拙作《Ubuntu 上 MySQL 的 Replication 配置》中已经提及对 MySQL Replication 的
验证,故无须再验证 Replication,只需验证虚拟 IP 即可。在局域网中的某主机 192.168.0.123
上执行:
mysql -h 192.168.0.88 -u root -p
并输入密码,应该能够成功登录 MySQL 服务。退出 MySQL 环境后,将 ubuntu1 的以太
网线拔出,再次执行:
mysql -h 192.168.0.88 -u root -p
并输入密码,应仍能成功登录 MYSQL 服务。测试后退出 MySQL 环境并重新插好以太
网线。
4.3、验证 Tomcat 的 Session 同步
首先创建文本文件/var/lib/tomcat6/webapps/ROOT/WEB-INF/web.xml,编辑其内容为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>ROOT</display-name>
<distributable/>
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
注意这个<distributable/> 一定要写!
接下来在 ubuntu1 主机上创建三个 jsp 文件,第一个文件
是/var/lib/tomcat6/webapps/ROOT/main.jsp,内容是:
I'm ubuntu1.
<br/>
<form action="action.jsp" method="post">
<input type="text" name="var" />
<input type="submit" value="Submit" />
7. </form>
第二个文件为/var/lib/tomcat6/webapps/ROOT/action.jsp,内容是:
<%
String var = request.getParameter("var");
session.setAttribute("VAR", var);
%>
I'm ubuntu1.
<br/>
<a href="continue.jsp">Continue</a>
这个文件的作用是将用户输入的数据存储到 Tomcat 的 Session 里边去。需要特别注意的
是,在实际应用中,为了实现 Session 同步,要求所有存储于 Session 中的对象都必须是简单
数据类型或实现 java.io.Serializable 接口的类的实例,且这些类的所有属性及其递归子属性也
应该是简单数据类型或实现上述接口。
第三个文件为/var/lib/tomcat6/webapps/ROOT/continue .jsp,内容是:
I'm ubuntu1.
<br/>
Your session value is <%= session.getAttribute("VAR") %>.
将上述 4 个文件复制到 ubuntu2 主机的相同路径下,并将文中所有 ubuntu1 改为
ubuntu2,以示区别。
重启两台主机的 Tomcat 服务:
sudo /etc/init.d/tomcat6 restart
用局域网中的某主机 192.168.0.123 上以 Web 浏览器浏览网址
http://192.168.0.88/main.html,应该看到
I'm ubuntu1.
“和一个输入框,输入文字 TEST”并提交,应该看到
I'm ubuntu1.
和一个 Continue 链接,点击链接,显示
I'm ubuntu1.
Your session value is TEST.
这里的 TEST 即为我们记录到 Session 中的数据。此时将 ubuntu1 主机的以太网线拔出,
刷新 Web 浏览器,应该显示
I'm ubuntu2.
Your session value is TEST.
注意此次主机名称的不同和 Session 的相同。插好以太网线并再次刷新 Web 浏览器,应
该显示
8. I'm ubuntu1.
Your session value is TEST.
至此,一个简单的双机热备配置便已大功告成。
5、进阶
本文中所描述的是一种简单的、通过虚拟 IP 失效转移的手段实现的高可用性方案,仅
适合于对于系统可用性相对较高,却不至于苛刻的场合。
此外,如果发生某种情况,使得主服务器的虚拟 IP 没有失效,然而服务程序却出现了
故障,则会导致此种失效转移失败。
“ ”进一步,目前的双机热备所配置的都是 被动 提供服务的业务,却不适合主动向外发送
业务请求的功能(如搜索引擎使用的网络爬虫)。
上述问题都将成为本文给出的方案的缺失环节,有待于进一步研究解决。