<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; 阿里云下配置keepalive，利用HAVIP实现HA</title>
	<atom:link href="https://www.fuwuqiok.com/tag/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>阿里云下配置keepalive，利用HAVIP实现HA</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha-2/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha-2/#comments</comments>
		<pubDate>Mon, 14 Mar 2016 14:34:22 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[linux代维]]></category>
		<category><![CDATA[linux服务器代维]]></category>
		<category><![CDATA[linux系统代维]]></category>
		<category><![CDATA[代维]]></category>
		<category><![CDATA[服务器代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[阿里云下配置keepalive，利用HAVIP实现HA]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=3078</guid>
		<description><![CDATA[<p>包括阿里云在内的很多云环境，因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP，能够实现ar [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha-2/">阿里云下配置keepalive，利用HAVIP实现HA</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>包括阿里云在内的很多云环境，因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP，能够实现arp宣告IP。这样也就让自己搭建HA成为了可能，有幸拿到了内测权限体验了一下。(classical网络依然不支持)</p>
<p>测试环境：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/1.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/1.jpg" alt="1" width="893" height="267" /></a></p>
<div id="crayon-56e612a8cec97214385622" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8cec97214385622-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cec97214385622-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8cec97214385622-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cec97214385622-4">4</div>
<div class="crayon-num" data-line="crayon-56e612a8cec97214385622-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cec97214385622-6">6</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8cec97214385622-1" class="crayon-line"><span class="crayon-i">VPC</span>：<span class="crayon-cn">192.168.1.0</span><span class="crayon-o">/</span><span class="crayon-cn">24</span></div>
<div id="crayon-56e612a8cec97214385622-2" class="crayon-line crayon-striped-line"><span class="crayon-v">ECS</span><span class="crayon-o">:</span></div>
<div id="crayon-56e612a8cec97214385622-3" class="crayon-line"><span class="crayon-i">nginx1</span>：<span class="crayon-cn">192.168.1.1</span></div>
<div id="crayon-56e612a8cec97214385622-4" class="crayon-line crayon-striped-line"><span class="crayon-v">nginx2</span><span class="crayon-o">:</span><span class="crayon-cn">192.168.1.2</span></div>
<div id="crayon-56e612a8cec97214385622-5" class="crayon-line"><span class="crayon-v">HAVIP</span><span class="crayon-o">:</span><span class="crayon-cn">192.168.1.3</span></div>
<div id="crayon-56e612a8cec97214385622-6" class="crayon-line crayon-striped-line">绑定到<span class="crayon-i">havip</span>的公网<span class="crayon-i">EIP</span>：<span class="crayon-cn">121.43.187.37</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>配置完毕后的拓扑如下：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/4.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/4.jpg" alt="4" width="641" height="405" /></a><br />
环境搭建完毕后，登陆主备ECS服务器，分别配置nginx+keepalived</p>
<div id="crayon-56e612a8ceca9851636518" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8ceca9851636518-1">1</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8ceca9851636518-1" class="crayon-line"><span class="crayon-sy">[</span><span class="crayon-v">root</span><span class="crayon-sy">@</span><span class="crayon-v">Nginx1</span> <span class="crayon-o">~</span><span class="crayon-sy">]</span><span class="crayon-c"># yum install nginx keepalived -y</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>MASTER服务器（nginx1）配置文件/etc/keepalived/keepalived.conf内容以及解释如下：</p>
<div id="crayon-56e612a8cecae477615045" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-4">4</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-6">6</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-8">8</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-10">10</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-12">12</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-14">14</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-16">16</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-18">18</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-20">20</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-22">22</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-23">23</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-24">24</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-25">25</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-26">26</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-27">27</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-28">28</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-29">29</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-30">30</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-31">31</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-32">32</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-33">33</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-34">34</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-35">35</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-36">36</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-37">37</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-38">38</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-39">39</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-40">40</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-41">41</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-42">42</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-43">43</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-44">44</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-45">45</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecae477615045-46">46</div>
<div class="crayon-num" data-line="crayon-56e612a8cecae477615045-47">47</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8cecae477615045-1" class="crayon-line"><span class="crayon-o">!</span> <span class="crayon-e">Configuration</span> <span class="crayon-r">File</span> <span class="crayon-st">for</span> <span class="crayon-e">keepalived</span></div>
<div id="crayon-56e612a8cecae477615045-2" class="crayon-line crayon-striped-line"><span class="crayon-c">#配置global_defs，主要用于标示机器，以及故障时通知</span></div>
<div id="crayon-56e612a8cecae477615045-3" class="crayon-line"><span class="crayon-e">global_defs</span> <span class="crayon-sy">{</span><span class="crayon-h">  </span></div>
<div id="crayon-56e612a8cecae477615045-4" class="crayon-line crayon-striped-line"><span class="crayon-h">   </span><span class="crayon-e">router_id </span><span class="crayon-i">Nginx1</span></div>
<div id="crayon-56e612a8cecae477615045-5" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-56e612a8cecae477615045-6" class="crayon-line crayon-striped-line"><span class="crayon-c">#配置vrrp_script，主要用于健康检查，以及检查失败后执行的动作。</span></div>
<div id="crayon-56e612a8cecae477615045-7" class="crayon-line"><span class="crayon-e">vrrp_script</span> <span class="crayon-e">chk_nginx</span> <span class="crayon-sy">{</span></div>
<div id="crayon-56e612a8cecae477615045-8" class="crayon-line crayon-striped-line"><span class="crayon-c">#健康检查脚本，当脚本返回值不为0时认为失败</span></div>
<div id="crayon-56e612a8cecae477615045-9" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">script</span> <span class="crayon-s">&#8220;/etc/keepalived/ck_ng.sh&#8221;</span></div>
<div id="crayon-56e612a8cecae477615045-10" class="crayon-line crayon-striped-line"><span class="crayon-c">#检查频率，以下配置每2秒检查1次</span></div>
<div id="crayon-56e612a8cecae477615045-11" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">interval</span> <span class="crayon-cn">2</span></div>
<div id="crayon-56e612a8cecae477615045-12" class="crayon-line crayon-striped-line"><span class="crayon-c">#当检查失败后，将vrrp_instance的priority减小5</span></div>
<div id="crayon-56e612a8cecae477615045-13" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">weight</span> <span class="crayon-o">&#8211;</span><span class="crayon-cn">5</span></div>
<div id="crayon-56e612a8cecae477615045-14" class="crayon-line crayon-striped-line"><span class="crayon-c">#连续监测失败3次，才认为真的健康检查失败。并调整优先级</span></div>
<div id="crayon-56e612a8cecae477615045-15" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">fall</span> <span class="crayon-cn">3</span></div>
<div id="crayon-56e612a8cecae477615045-16" class="crayon-line crayon-striped-line"><span class="crayon-c">#连续监测2次成功，就认为成功。但不调整优先级</span></div>
<div id="crayon-56e612a8cecae477615045-17" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">rise</span> <span class="crayon-cn">2</span></div>
<div id="crayon-56e612a8cecae477615045-18" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
<div id="crayon-56e612a8cecae477615045-19" class="crayon-line"></div>
<div id="crayon-56e612a8cecae477615045-20" class="crayon-line crayon-striped-line"><span class="crayon-c">#定义对外提供服务的VIP vrrp_instance配置</span></div>
<div id="crayon-56e612a8cecae477615045-21" class="crayon-line"><span class="crayon-e">vrrp_instance</span> <span class="crayon-e">VI_1</span> <span class="crayon-sy">{</span></div>
<div id="crayon-56e612a8cecae477615045-22" class="crayon-line crayon-striped-line"><span class="crayon-c">#指定vrrp_instance的初始状态，是MASTER还是BackUP主要还是看优先级。</span></div>
<div id="crayon-56e612a8cecae477615045-23" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e">state </span><span class="crayon-v">MASTER</span></div>
<div id="crayon-56e612a8cecae477615045-24" class="crayon-line crayon-striped-line"><span class="crayon-c">#指定vrrp_instance绑定的网卡，最终会通过指定的网卡宣告VIP</span></div>
<div id="crayon-56e612a8cecae477615045-25" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-t">interface</span> <span class="crayon-v">eth0</span></div>
<div id="crayon-56e612a8cecae477615045-26" class="crayon-line crayon-striped-line"><span class="crayon-c">#发送心跳包的源IP，可使用绑定的网卡IP，也可以使用本服务器上的其他IP</span></div>
<div id="crayon-56e612a8cecae477615045-27" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">mcast_src</span><span class="crayon-sy">_</span>ip <span class="crayon-cn">192.168.1.1</span></div>
<div id="crayon-56e612a8cecae477615045-28" class="crayon-line crayon-striped-line"><span class="crayon-c">#相当于VRID，用于在一个网内区分组播，需要组播域内内唯一。</span></div>
<div id="crayon-56e612a8cecae477615045-29" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">virtual_router</span><span class="crayon-sy">_</span>id <span class="crayon-cn">55</span></div>
<div id="crayon-56e612a8cecae477615045-30" class="crayon-line crayon-striped-line"><span class="crayon-c">#本机的优先级，VRID相同的机器中，优先级最高的会被选举为MASTER</span></div>
<div id="crayon-56e612a8cecae477615045-31" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">priority</span> <span class="crayon-cn">101</span></div>
<div id="crayon-56e612a8cecae477615045-32" class="crayon-line crayon-striped-line"><span class="crayon-c">#心跳间隔，下面配置，MASTER会每隔1秒发送一个报文高职组内其他机器，自己还活着。</span></div>
<div id="crayon-56e612a8cecae477615045-33" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">advert</span><span class="crayon-sy">_</span>int <span class="crayon-cn">1</span></div>
<div id="crayon-56e612a8cecae477615045-34" class="crayon-line crayon-striped-line"><span class="crayon-c">#定义主从的验证方式以及密码，一般使用PASS(最长8位，超过了只会识别前8位作为密码)</span></div>
<div id="crayon-56e612a8cecae477615045-35" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e">authentication</span> <span class="crayon-sy">{</span></div>
<div id="crayon-56e612a8cecae477615045-36" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-e">auth_type </span><span class="crayon-e">PASS</span></div>
<div id="crayon-56e612a8cecae477615045-37" class="crayon-line"><span class="crayon-e">        </span><span class="crayon-e">auth_pass </span><span class="crayon-i">aliyun</span></div>
<div id="crayon-56e612a8cecae477615045-38" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-56e612a8cecae477615045-39" class="crayon-line"><span class="crayon-c">#VIP,在阿里云下就是刚才创建的HAVIP</span></div>
<div id="crayon-56e612a8cecae477615045-40" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e">virtual_ipaddress</span> <span class="crayon-sy">{</span></div>
<div id="crayon-56e612a8cecae477615045-41" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-cn">192.168.1.4</span></div>
<div id="crayon-56e612a8cecae477615045-42" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-sy">}</span></div>
<div id="crayon-56e612a8cecae477615045-43" class="crayon-line"><span class="crayon-c">#本vrrp_instance所引用的脚本配置，名称就是vrrp_script 定义的容器名</span></div>
<div id="crayon-56e612a8cecae477615045-44" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-e">track_script</span> <span class="crayon-sy">{</span></div>
<div id="crayon-56e612a8cecae477615045-45" class="crayon-line"><span class="crayon-h">       </span><span class="crayon-v">chk</span><span class="crayon-sy">_</span>nginx</div>
<div id="crayon-56e612a8cecae477615045-46" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-56e612a8cecae477615045-47" class="crayon-line"><span class="crayon-sy">}</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>BACKUP服务器（nginx2）的配置需要修改：</p>
<div id="crayon-56e612a8cecb5455868472" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8cecb5455868472-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecb5455868472-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8cecb5455868472-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8cecb5455868472-1" class="crayon-line"><span class="crayon-e">state </span><span class="crayon-i">MASTER</span>改为<span class="crayon-h">  </span><span class="crayon-e">state </span><span class="crayon-e">BACKUP</span></div>
<div id="crayon-56e612a8cecb5455868472-2" class="crayon-line crayon-striped-line"><span class="crayon-v">mcast_src</span><span class="crayon-sy">_</span>ip <span class="crayon-cn">192.168.1.1</span>改为<span class="crayon-i">backup</span>服务器实际的<span class="crayon-e">IP </span><span class="crayon-v">mcast_src</span><span class="crayon-sy">_</span>ip <span class="crayon-cn">192.168.1.2</span></div>
<div id="crayon-56e612a8cecb5455868472-3" class="crayon-line"><span class="crayon-i">priority</span> <span class="crayon-cn">101</span>改小一些，比如<span class="crayon-h">    </span><span class="crayon-i">priority</span> <span class="crayon-cn">100</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>其它保持一致即可</p>
<p>为了实现nginx服务异常的时候能够自动切换，需要自己写一个脚本，脚本没有硬性的要求，能够实现目标即可，这里 监控nginx进程数为例：</p>
<div id="crayon-56e612a8cecbb232281910" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-4">4</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-6">6</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-8">8</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-10">10</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-12">12</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-14">14</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecbb232281910-16">16</div>
<div class="crayon-num" data-line="crayon-56e612a8cecbb232281910-17">17</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8cecbb232281910-1" class="crayon-line"><span class="crayon-r">vim</span> <span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">keepalived</span><span class="crayon-o">/</span><span class="crayon-v">ck_ng</span><span class="crayon-e">.sh</span></div>
<div id="crayon-56e612a8cecbb232281910-2" class="crayon-line crayon-striped-line"><span class="crayon-c">#!/bin/bash</span></div>
<div id="crayon-56e612a8cecbb232281910-3" class="crayon-line"><span class="crayon-c">#检查nginx进程是否存在</span></div>
<div id="crayon-56e612a8cecbb232281910-4" class="crayon-line crayon-striped-line"><span class="crayon-v">count</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">ps</span> <span class="crayon-o">&#8211;</span><span class="crayon-i">C</span> <span class="crayon-v">nginx</span> <span class="crayon-o">&#8212;</span><span class="crayon-v">no</span><span class="crayon-o">&#8211;</span><span class="crayon-v">heading</span><span class="crayon-o">|</span><span class="crayon-r">wc</span> <span class="crayon-o">&#8211;</span><span class="crayon-v">l</span><span class="crayon-sy">)</span></div>
<div id="crayon-56e612a8cecbb232281910-5" class="crayon-line"><span class="crayon-c">#进程数等于0的时候</span></div>
<div id="crayon-56e612a8cecbb232281910-6" class="crayon-line crayon-striped-line"><span class="crayon-st">if</span> <span class="crayon-sy">[</span> <span class="crayon-s">&#8220;${count}&#8221;</span> <span class="crayon-o">=</span> <span class="crayon-s">&#8220;0&#8221;</span> <span class="crayon-sy">]</span><span class="crayon-sy">;</span> <span class="crayon-st">then</span></div>
<div id="crayon-56e612a8cecbb232281910-7" class="crayon-line"><span class="crayon-c">#尝试启动一次nginx，停止2秒后再次检测</span></div>
<div id="crayon-56e612a8cecbb232281910-8" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e">service </span><span class="crayon-e">nginx </span><span class="crayon-e">start</span></div>
<div id="crayon-56e612a8cecbb232281910-9" class="crayon-line"><span class="crayon-e">    </span><span class="crayon-r">sleep</span> <span class="crayon-cn">2</span></div>
<div id="crayon-56e612a8cecbb232281910-10" class="crayon-line crayon-striped-line"><span class="crayon-h">   </span><span class="crayon-v">count</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">ps</span> <span class="crayon-o">&#8211;</span><span class="crayon-i">C</span> <span class="crayon-v">nginx</span> <span class="crayon-o">&#8212;</span><span class="crayon-v">no</span><span class="crayon-o">&#8211;</span><span class="crayon-v">heading</span><span class="crayon-o">|</span><span class="crayon-r">wc</span> <span class="crayon-o">&#8211;</span><span class="crayon-v">l</span><span class="crayon-sy">)</span></div>
<div id="crayon-56e612a8cecbb232281910-11" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-st">if</span> <span class="crayon-sy">[</span> <span class="crayon-s">&#8220;${count}&#8221;</span> <span class="crayon-o">=</span> <span class="crayon-s">&#8220;0&#8221;</span> <span class="crayon-sy">]</span><span class="crayon-sy">;</span> <span class="crayon-st">then</span></div>
<div id="crayon-56e612a8cecbb232281910-12" class="crayon-line crayon-striped-line"><span class="crayon-c">#如果启动没成功，就杀掉keepalive触发主备切换</span></div>
<div id="crayon-56e612a8cecbb232281910-13" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">init</span><span class="crayon-e">.d</span><span class="crayon-o">/</span><span class="crayon-e">keepalived </span><span class="crayon-e">stop</span></div>
<div id="crayon-56e612a8cecbb232281910-14" class="crayon-line crayon-striped-line"><span class="crayon-e">    </span><span class="crayon-st">fi</span></div>
<div id="crayon-56e612a8cecbb232281910-15" class="crayon-line"><span class="crayon-st">fi</span></div>
<div id="crayon-56e612a8cecbb232281910-16" class="crayon-line crayon-striped-line"><span class="crayon-c">#增加脚本的执行权限</span></div>
<div id="crayon-56e612a8cecbb232281910-17" class="crayon-line"><span class="crayon-r">chmod</span> <span class="crayon-o">+</span><span class="crayon-i">x</span> <span class="crayon-r">vim</span> <span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">keepalived</span><span class="crayon-o">/</span><span class="crayon-v">ck_ng</span><span class="crayon-e">.sh</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="crayon-56e612a8cecc0480674347" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8cecc0480674347-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecc0480674347-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8cecc0480674347-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecc0480674347-4">4</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8cecc0480674347-1" class="crayon-line"><span class="crayon-c">#分别启动nginx1和nginx2的nginx&amp;keepalived服务：</span></div>
<div id="crayon-56e612a8cecc0480674347-2" class="crayon-line crayon-striped-line"><span class="crayon-sy">[</span><span class="crayon-v">root</span><span class="crayon-sy">@</span><span class="crayon-v">Nginx1</span> <span class="crayon-o">~</span><span class="crayon-sy">]</span><span class="crayon-c"># /etc/init.d/nginx start;/etc/init.d/keepalived start</span></div>
<div id="crayon-56e612a8cecc0480674347-3" class="crayon-line"><span class="crayon-e">Starting </span><span class="crayon-v">nginx</span><span class="crayon-o">:</span><span class="crayon-h">                                            </span><span class="crayon-sy">[</span><span class="crayon-h">  </span><span class="crayon-i">OK</span><span class="crayon-h">  </span><span class="crayon-sy">]</span></div>
<div id="crayon-56e612a8cecc0480674347-4" class="crayon-line crayon-striped-line"><span class="crayon-e">Starting </span><span class="crayon-v">keepalived</span><span class="crayon-o">:</span><span class="crayon-h">                                       </span><span class="crayon-sy">[</span><span class="crayon-h">  </span><span class="crayon-i">OK</span><span class="crayon-h">  </span><span class="crayon-sy">]</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div>测试：</div>
<div>NGINX1/192.168.1.1的priority 为101，NGINX2/192.168.1.2的priority为100，这时候访问HAVIP绑定的EIP：http://121.43.187.37/可以看到访问到了服务器NGINX1,如下：</div>
<div>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/5.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/5.jpg" alt="5" width="485" height="205" /></a></p>
<p>到HAVIP控制台查看，192.168.1.1的服务器为主服务器</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/111.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/111.png" alt="111" width="596" height="330" /></a></p>
<p>这时候我们KILL掉nginx1服务器的nginx服务</p>
</div>
</div>
<div>
<div>查看日志，发送了移除VIP的报文：</div>
<div>
<div id="crayon-56e612a8cecc6571294083" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8cecc6571294083-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8cecc6571294083-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8cecc6571294083-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8cecc6571294083-1" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">20</span><span class="crayon-o">:</span><span class="crayon-cn">01</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25019</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-i">sending</span> <span class="crayon-cn">0</span> <span class="crayon-e">priority</span></div>
<div id="crayon-56e612a8cecc6571294083-2" class="crayon-line crayon-striped-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">20</span><span class="crayon-o">:</span><span class="crayon-cn">01</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25019</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">removing </span><span class="crayon-e">protocol </span><span class="crayon-v">VIPs</span><span class="crayon-sy">.</span></div>
<div id="crayon-56e612a8cecc6571294083-3" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">20</span><span class="crayon-o">:</span><span class="crayon-cn">01</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_healthcheckers</span><span class="crayon-sy">[</span><span class="crayon-cn">25018</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">Netlink </span><span class="crayon-e">reflector </span><span class="crayon-e">reports </span><span class="crayon-i">IP</span> <span class="crayon-cn">192.168.1.3</span> <span class="crayon-v">removed</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>这时候访问<a href="http://121.43.187.37/%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%88%B0%E8%AE%BF%E9%97%AE%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2%E5%88%B0%E4%BA%86NGINX2">http://121.43.187.37/，可以看到访问自动切换到了NGINX2</a><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/6.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/6.jpg" alt="6" width="473" height="194" /></a></p>
</div>
<div>
<div>到HAVIP控制台查看，192.168.1.2的服务器为主服务器</div>
</div>
</div>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/2222.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/2222.png" alt="2222" width="603" height="354" /></a></p>
<div>
<div>重新启动nginx1的nginx和keepalive服务</div>
<div>查看日志可以看到keepalive重新发送了IP宣告的报文</div>
<div>
<div id="crayon-56e612a8ceccd574917624" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-56e612a8ceccd574917624-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8ceccd574917624-2">2</div>
<div class="crayon-num" data-line="crayon-56e612a8ceccd574917624-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-56e612a8ceccd574917624-4">4</div>
<div class="crayon-num" data-line="crayon-56e612a8ceccd574917624-5">5</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-56e612a8ceccd574917624-1" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">Entering </span><span class="crayon-e">MASTER </span><span class="crayon-e">STATE</span></div>
<div id="crayon-56e612a8ceccd574917624-2" class="crayon-line crayon-striped-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">setting </span><span class="crayon-e">protocol </span><span class="crayon-v">VIPs</span><span class="crayon-sy">.</span></div>
<div id="crayon-56e612a8ceccd574917624-3" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">Sending </span><span class="crayon-e">gratuitous </span><span class="crayon-e">ARPs </span><span class="crayon-e">on </span><span class="crayon-e">eth0 </span><span class="crayon-st">for</span> <span class="crayon-cn">192.168.1.3</span></div>
<div id="crayon-56e612a8ceccd574917624-4" class="crayon-line crayon-striped-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_healthcheckers</span><span class="crayon-sy">[</span><span class="crayon-cn">25609</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">Netlink </span><span class="crayon-e">reflector </span><span class="crayon-e">reports </span><span class="crayon-i">IP</span> <span class="crayon-cn">192.168.1.3</span> <span class="crayon-e">added</span></div>
<div id="crayon-56e612a8ceccd574917624-5" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">19</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">Sending </span><span class="crayon-e">gratuitous </span><span class="crayon-e">ARPs </span><span class="crayon-e">on </span><span class="crayon-e">eth0 </span><span class="crayon-st">for</span> <span class="crayon-cn">192.168.1.3</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>重新访问http://121.43.187.37/测试，重新访问到了服务器NGINX1，到HAVIP控制台查看，192.168.1.1的服务器重新夺回了控制权，成为了为主服务器</p></div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/03/1111.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/03/1111.png" alt="1111" width="596" height="330" /></a></div>
<div>这样就实现了阿里云环境下的HA切换。</div>
<div>实际测试，阿里云的多个HAVIP可以绑定到同样的两台机器，可以配置多组vrrp_instance来实现双主。或者两台服务器同时为两个业务服务，避免资源浪费。同时能够做到主备</div>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha-2/">阿里云下配置keepalive，利用HAVIP实现HA</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>阿里云下配置keepalive，利用HAVIP实现HA</title>
		<link>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha/</link>
		<comments>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha/#comments</comments>
		<pubDate>Sun, 10 Jan 2016 13:11:25 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[服务器迁移]]></category>
		<category><![CDATA[阿里云下配置keepalive，利用HAVIP实现HA]]></category>
		<category><![CDATA[阿里云代维]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2849</guid>
		<description><![CDATA[<p>包括阿里云在内的很多云环境，因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP，能够实现ar [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha/">阿里云下配置keepalive，利用HAVIP实现HA</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>包括阿里云在内的很多云环境，因为不支持浮动IP广受诟病。目前阿里云在VPC网络下发布了HAVIP，能够实现arp宣告IP。这样也就让自己搭建HA成为了可能，有幸拿到了内测权限体验了一下。(classical网络依然不支持)</p>
<p>测试环境：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/1.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/1.jpg" alt="1" width="893" height="267" /></a></p>
<div id="crayon-5690f2a3a54f8155154372" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a54f8155154372-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a54f8155154372-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a54f8155154372-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a54f8155154372-4">4</div>
<div class="crayon-num" data-line="crayon-5690f2a3a54f8155154372-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a54f8155154372-6">6</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a54f8155154372-1" class="crayon-line"><span class="crayon-i">VPC</span>：<span class="crayon-cn">192.168.1.0</span><span class="crayon-o">/</span><span class="crayon-cn">24</span></div>
<div id="crayon-5690f2a3a54f8155154372-2" class="crayon-line crayon-striped-line"><span class="crayon-v">ECS</span><span class="crayon-o">:</span></div>
<div id="crayon-5690f2a3a54f8155154372-3" class="crayon-line"><span class="crayon-i">nginx1</span>：<span class="crayon-cn">192.168.1.1</span></div>
<div id="crayon-5690f2a3a54f8155154372-4" class="crayon-line crayon-striped-line"><span class="crayon-v">nginx2</span><span class="crayon-o">:</span><span class="crayon-cn">192.168.1.2</span></div>
<div id="crayon-5690f2a3a54f8155154372-5" class="crayon-line"><span class="crayon-v">HAVIP</span><span class="crayon-o">:</span><span class="crayon-cn">192.168.1.3</span></div>
<div id="crayon-5690f2a3a54f8155154372-6" class="crayon-line crayon-striped-line">绑定到<span class="crayon-i">havip</span>的公网<span class="crayon-i">EIP</span>：<span class="crayon-cn">121.43.187.37</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>配置完毕后的拓扑如下：</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/4.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/4.jpg" alt="4" width="641" height="405" /></a><br />
环境搭建完毕后，登陆主备ECS服务器，分别配置nginx+keepalived</p>
<div id="crayon-5690f2a3a550e284021137" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a550e284021137-1">1</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a550e284021137-1" class="crayon-line"><span class="crayon-sy">[</span><span class="crayon-v">root</span><span class="crayon-sy">@</span><span class="crayon-v">Nginx1</span> <span class="crayon-o">~</span><span class="crayon-sy">]</span><span class="crayon-c"># yum install nginx keepalived -y</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>MASTER服务器（nginx1）配置文件/etc/keepalived/keepalived.conf内容以及解释如下：</p>
<div id="crayon-5690f2a3a5514992856578" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-4">4</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-6">6</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-8">8</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-10">10</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-12">12</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-14">14</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-16">16</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-17">17</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-18">18</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-19">19</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-20">20</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-21">21</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-22">22</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-23">23</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-24">24</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-25">25</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-26">26</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-27">27</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-28">28</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-29">29</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-30">30</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-31">31</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-32">32</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-33">33</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-34">34</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-35">35</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-36">36</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-37">37</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-38">38</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-39">39</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-40">40</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-41">41</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-42">42</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-43">43</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-44">44</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-45">45</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5514992856578-46">46</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5514992856578-47">47</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a5514992856578-1" class="crayon-line"><span class="crayon-o">!</span> <span class="crayon-e">Configuration</span> <span class="crayon-r">File</span> <span class="crayon-st">for</span> <span class="crayon-e">keepalived</span></div>
<div id="crayon-5690f2a3a5514992856578-2" class="crayon-line crayon-striped-line"><span class="crayon-c">#配置global_defs，主要用于标示机器，以及故障时通知</span></div>
<div id="crayon-5690f2a3a5514992856578-3" class="crayon-line"><span class="crayon-e">global_defs</span> <span class="crayon-sy">{</span><span class="crayon-h">  </span></div>
<div id="crayon-5690f2a3a5514992856578-4" class="crayon-line crayon-striped-line"><span class="crayon-h">   </span><span class="crayon-e">router_id </span><span class="crayon-i">Nginx1</span></div>
<div id="crayon-5690f2a3a5514992856578-5" class="crayon-line"><span class="crayon-sy">}</span></div>
<div id="crayon-5690f2a3a5514992856578-6" class="crayon-line crayon-striped-line"><span class="crayon-c">#配置vrrp_script，主要用于健康检查，以及检查失败后执行的动作。</span></div>
<div id="crayon-5690f2a3a5514992856578-7" class="crayon-line"><span class="crayon-e">vrrp_script</span> <span class="crayon-e">chk_nginx</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5690f2a3a5514992856578-8" class="crayon-line crayon-striped-line"><span class="crayon-c">#健康检查脚本，当脚本返回值不为0时认为失败</span></div>
<div id="crayon-5690f2a3a5514992856578-9" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">script</span> <span class="crayon-s">&#8220;/etc/keepalived/ck_ng.sh&#8221;</span></div>
<div id="crayon-5690f2a3a5514992856578-10" class="crayon-line crayon-striped-line"><span class="crayon-c">#检查频率，以下配置每2秒检查1次</span></div>
<div id="crayon-5690f2a3a5514992856578-11" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">interval</span> <span class="crayon-cn">2</span></div>
<div id="crayon-5690f2a3a5514992856578-12" class="crayon-line crayon-striped-line"><span class="crayon-c">#当检查失败后，将vrrp_instance的priority减小5</span></div>
<div id="crayon-5690f2a3a5514992856578-13" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">weight</span> <span class="crayon-o">&#8211;</span><span class="crayon-cn">5</span></div>
<div id="crayon-5690f2a3a5514992856578-14" class="crayon-line crayon-striped-line"><span class="crayon-c">#连续监测失败3次，才认为真的健康检查失败。并调整优先级</span></div>
<div id="crayon-5690f2a3a5514992856578-15" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">fall</span> <span class="crayon-cn">3</span></div>
<div id="crayon-5690f2a3a5514992856578-16" class="crayon-line crayon-striped-line"><span class="crayon-c">#连续监测2次成功，就认为成功。但不调整优先级</span></div>
<div id="crayon-5690f2a3a5514992856578-17" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">rise</span> <span class="crayon-cn">2</span></div>
<div id="crayon-5690f2a3a5514992856578-18" class="crayon-line crayon-striped-line"><span class="crayon-sy">}</span></div>
<div id="crayon-5690f2a3a5514992856578-19" class="crayon-line"></div>
<div id="crayon-5690f2a3a5514992856578-20" class="crayon-line crayon-striped-line"><span class="crayon-c">#定义对外提供服务的VIP vrrp_instance配置</span></div>
<div id="crayon-5690f2a3a5514992856578-21" class="crayon-line"><span class="crayon-e">vrrp_instance</span> <span class="crayon-e">VI_1</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5690f2a3a5514992856578-22" class="crayon-line crayon-striped-line"><span class="crayon-c">#指定vrrp_instance的初始状态，是MASTER还是BackUP主要还是看优先级。</span></div>
<div id="crayon-5690f2a3a5514992856578-23" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e">state </span><span class="crayon-v">MASTER</span></div>
<div id="crayon-5690f2a3a5514992856578-24" class="crayon-line crayon-striped-line"><span class="crayon-c">#指定vrrp_instance绑定的网卡，最终会通过指定的网卡宣告VIP</span></div>
<div id="crayon-5690f2a3a5514992856578-25" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-t">interface</span> <span class="crayon-v">eth0</span></div>
<div id="crayon-5690f2a3a5514992856578-26" class="crayon-line crayon-striped-line"><span class="crayon-c">#发送心跳包的源IP，可使用绑定的网卡IP，也可以使用本服务器上的其他IP</span></div>
<div id="crayon-5690f2a3a5514992856578-27" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">mcast_src</span><span class="crayon-sy">_</span>ip <span class="crayon-cn">192.168.1.1</span></div>
<div id="crayon-5690f2a3a5514992856578-28" class="crayon-line crayon-striped-line"><span class="crayon-c">#相当于VRID，用于在一个网内区分组播，需要组播域内内唯一。</span></div>
<div id="crayon-5690f2a3a5514992856578-29" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">virtual_router</span><span class="crayon-sy">_</span>id <span class="crayon-cn">55</span></div>
<div id="crayon-5690f2a3a5514992856578-30" class="crayon-line crayon-striped-line"><span class="crayon-c">#本机的优先级，VRID相同的机器中，优先级最高的会被选举为MASTER</span></div>
<div id="crayon-5690f2a3a5514992856578-31" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-i">priority</span> <span class="crayon-cn">101</span></div>
<div id="crayon-5690f2a3a5514992856578-32" class="crayon-line crayon-striped-line"><span class="crayon-c">#心跳间隔，下面配置，MASTER会每隔1秒发送一个报文高职组内其他机器，自己还活着。</span></div>
<div id="crayon-5690f2a3a5514992856578-33" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-v">advert</span><span class="crayon-sy">_</span>int <span class="crayon-cn">1</span></div>
<div id="crayon-5690f2a3a5514992856578-34" class="crayon-line crayon-striped-line"><span class="crayon-c">#定义主从的验证方式以及密码，一般使用PASS(最长8位，超过了只会识别前8位作为密码)</span></div>
<div id="crayon-5690f2a3a5514992856578-35" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-e">authentication</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5690f2a3a5514992856578-36" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-e">auth_type </span><span class="crayon-e">PASS</span></div>
<div id="crayon-5690f2a3a5514992856578-37" class="crayon-line"><span class="crayon-e">        </span><span class="crayon-e">auth_pass </span><span class="crayon-i">aliyun</span></div>
<div id="crayon-5690f2a3a5514992856578-38" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-5690f2a3a5514992856578-39" class="crayon-line"><span class="crayon-c">#VIP,在阿里云下就是刚才创建的HAVIP</span></div>
<div id="crayon-5690f2a3a5514992856578-40" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e">virtual_ipaddress</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5690f2a3a5514992856578-41" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-cn">192.168.1.4</span></div>
<div id="crayon-5690f2a3a5514992856578-42" class="crayon-line crayon-striped-line"><span class="crayon-h">        </span><span class="crayon-sy">}</span></div>
<div id="crayon-5690f2a3a5514992856578-43" class="crayon-line"><span class="crayon-c">#本vrrp_instance所引用的脚本配置，名称就是vrrp_script 定义的容器名</span></div>
<div id="crayon-5690f2a3a5514992856578-44" class="crayon-line crayon-striped-line"><span class="crayon-h">  </span><span class="crayon-e">track_script</span> <span class="crayon-sy">{</span></div>
<div id="crayon-5690f2a3a5514992856578-45" class="crayon-line"><span class="crayon-h">       </span><span class="crayon-v">chk</span><span class="crayon-sy">_</span>nginx</div>
<div id="crayon-5690f2a3a5514992856578-46" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-sy">}</span></div>
<div id="crayon-5690f2a3a5514992856578-47" class="crayon-line"><span class="crayon-sy">}</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>BACKUP服务器（nginx2）的配置需要修改：</p>
<div id="crayon-5690f2a3a551b308423993" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a551b308423993-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a551b308423993-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a551b308423993-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a551b308423993-1" class="crayon-line"><span class="crayon-e">state </span><span class="crayon-i">MASTER</span>改为<span class="crayon-h">  </span><span class="crayon-e">state </span><span class="crayon-e">BACKUP</span></div>
<div id="crayon-5690f2a3a551b308423993-2" class="crayon-line crayon-striped-line"><span class="crayon-v">mcast_src</span><span class="crayon-sy">_</span>ip <span class="crayon-cn">192.168.1.1</span>改为<span class="crayon-i">backup</span>服务器实际的<span class="crayon-e">IP </span><span class="crayon-v">mcast_src</span><span class="crayon-sy">_</span>ip <span class="crayon-cn">192.168.1.2</span></div>
<div id="crayon-5690f2a3a551b308423993-3" class="crayon-line"><span class="crayon-i">priority</span> <span class="crayon-cn">101</span>改小一些，比如<span class="crayon-h">    </span><span class="crayon-i">priority</span> <span class="crayon-cn">100</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>其它保持一致即可</p>
<p>为了实现nginx服务异常的时候能够自动切换，需要自己写一个脚本，脚本没有硬性的要求，能够实现目标即可，这里 监控nginx进程数为例：</p>
<div id="crayon-5690f2a3a5520638273053" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-4">4</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-5">5</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-6">6</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-7">7</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-8">8</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-9">9</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-10">10</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-11">11</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-12">12</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-13">13</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-14">14</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-15">15</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5520638273053-16">16</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5520638273053-17">17</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a5520638273053-1" class="crayon-line"><span class="crayon-r">vim</span> <span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">keepalived</span><span class="crayon-o">/</span><span class="crayon-v">ck_ng</span><span class="crayon-e">.sh</span></div>
<div id="crayon-5690f2a3a5520638273053-2" class="crayon-line crayon-striped-line"><span class="crayon-c">#!/bin/bash</span></div>
<div id="crayon-5690f2a3a5520638273053-3" class="crayon-line"><span class="crayon-c">#检查nginx进程是否存在</span></div>
<div id="crayon-5690f2a3a5520638273053-4" class="crayon-line crayon-striped-line"><span class="crayon-v">count</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">ps</span> <span class="crayon-o">&#8211;</span><span class="crayon-i">C</span> <span class="crayon-v">nginx</span> <span class="crayon-o">&#8212;</span><span class="crayon-v">no</span><span class="crayon-o">&#8211;</span><span class="crayon-v">heading</span><span class="crayon-o">|</span><span class="crayon-r">wc</span> <span class="crayon-o">&#8211;</span><span class="crayon-v">l</span><span class="crayon-sy">)</span></div>
<div id="crayon-5690f2a3a5520638273053-5" class="crayon-line"><span class="crayon-c">#进程数等于0的时候</span></div>
<div id="crayon-5690f2a3a5520638273053-6" class="crayon-line crayon-striped-line"><span class="crayon-st">if</span> <span class="crayon-sy">[</span> <span class="crayon-s">&#8220;${count}&#8221;</span> <span class="crayon-o">=</span> <span class="crayon-s">&#8220;0&#8221;</span> <span class="crayon-sy">]</span><span class="crayon-sy">;</span> <span class="crayon-st">then</span></div>
<div id="crayon-5690f2a3a5520638273053-7" class="crayon-line"><span class="crayon-c">#尝试启动一次nginx，停止2秒后再次检测</span></div>
<div id="crayon-5690f2a3a5520638273053-8" class="crayon-line crayon-striped-line"><span class="crayon-h">    </span><span class="crayon-e">service </span><span class="crayon-e">nginx </span><span class="crayon-e">start</span></div>
<div id="crayon-5690f2a3a5520638273053-9" class="crayon-line"><span class="crayon-e">    </span><span class="crayon-r">sleep</span> <span class="crayon-cn">2</span></div>
<div id="crayon-5690f2a3a5520638273053-10" class="crayon-line crayon-striped-line"><span class="crayon-h">   </span><span class="crayon-v">count</span><span class="crayon-o">=</span><span class="crayon-sy">$</span><span class="crayon-sy">(</span><span class="crayon-r">ps</span> <span class="crayon-o">&#8211;</span><span class="crayon-i">C</span> <span class="crayon-v">nginx</span> <span class="crayon-o">&#8212;</span><span class="crayon-v">no</span><span class="crayon-o">&#8211;</span><span class="crayon-v">heading</span><span class="crayon-o">|</span><span class="crayon-r">wc</span> <span class="crayon-o">&#8211;</span><span class="crayon-v">l</span><span class="crayon-sy">)</span></div>
<div id="crayon-5690f2a3a5520638273053-11" class="crayon-line"><span class="crayon-h">    </span><span class="crayon-st">if</span> <span class="crayon-sy">[</span> <span class="crayon-s">&#8220;${count}&#8221;</span> <span class="crayon-o">=</span> <span class="crayon-s">&#8220;0&#8221;</span> <span class="crayon-sy">]</span><span class="crayon-sy">;</span> <span class="crayon-st">then</span></div>
<div id="crayon-5690f2a3a5520638273053-12" class="crayon-line crayon-striped-line"><span class="crayon-c">#如果启动没成功，就杀掉keepalive触发主备切换</span></div>
<div id="crayon-5690f2a3a5520638273053-13" class="crayon-line"><span class="crayon-h">        </span><span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">init</span><span class="crayon-e">.d</span><span class="crayon-o">/</span><span class="crayon-e">keepalived </span><span class="crayon-e">stop</span></div>
<div id="crayon-5690f2a3a5520638273053-14" class="crayon-line crayon-striped-line"><span class="crayon-e">    </span><span class="crayon-st">fi</span></div>
<div id="crayon-5690f2a3a5520638273053-15" class="crayon-line"><span class="crayon-st">fi</span></div>
<div id="crayon-5690f2a3a5520638273053-16" class="crayon-line crayon-striped-line"><span class="crayon-c">#增加脚本的执行权限</span></div>
<div id="crayon-5690f2a3a5520638273053-17" class="crayon-line"><span class="crayon-r">chmod</span> <span class="crayon-o">+</span><span class="crayon-i">x</span> <span class="crayon-r">vim</span> <span class="crayon-o">/</span><span class="crayon-v">etc</span><span class="crayon-o">/</span><span class="crayon-v">keepalived</span><span class="crayon-o">/</span><span class="crayon-v">ck_ng</span><span class="crayon-e">.sh</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div id="crayon-5690f2a3a5526070782078" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a5526070782078-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5526070782078-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5526070782078-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5526070782078-4">4</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a5526070782078-1" class="crayon-line"><span class="crayon-c">#分别启动nginx1和nginx2的nginx&amp;keepalived服务：</span></div>
<div id="crayon-5690f2a3a5526070782078-2" class="crayon-line crayon-striped-line"><span class="crayon-sy">[</span><span class="crayon-v">root</span><span class="crayon-sy">@</span><span class="crayon-v">Nginx1</span> <span class="crayon-o">~</span><span class="crayon-sy">]</span><span class="crayon-c"># /etc/init.d/nginx start;/etc/init.d/keepalived start</span></div>
<div id="crayon-5690f2a3a5526070782078-3" class="crayon-line"><span class="crayon-e">Starting </span><span class="crayon-v">nginx</span><span class="crayon-o">:</span><span class="crayon-h">                                            </span><span class="crayon-sy">[</span><span class="crayon-h">  </span><span class="crayon-i">OK</span><span class="crayon-h">  </span><span class="crayon-sy">]</span></div>
<div id="crayon-5690f2a3a5526070782078-4" class="crayon-line crayon-striped-line"><span class="crayon-e">Starting </span><span class="crayon-v">keepalived</span><span class="crayon-o">:</span><span class="crayon-h">                                       </span><span class="crayon-sy">[</span><span class="crayon-h">  </span><span class="crayon-i">OK</span><span class="crayon-h">  </span><span class="crayon-sy">]</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<div>测试：</div>
<div>NGINX1/192.168.1.1的priority 为101，NGINX2/192.168.1.2的priority为100，这时候访问HAVIP绑定的EIP：http://121.43.187.37/可以看到访问到了服务器NGINX1,如下：</div>
<div>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/5.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/5.jpg" alt="5" width="485" height="205" /></a></p>
<p>到HAVIP控制台查看，192.168.1.1的服务器为主服务器</p>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/111.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/111.png" alt="111" width="596" height="330" /></a></p>
<p>这时候我们KILL掉nginx1服务器的nginx服务</p>
</div>
</div>
<div>
<div>查看日志，发送了移除VIP的报文：</div>
<div>
<div id="crayon-5690f2a3a552c031875935" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a552c031875935-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a552c031875935-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a552c031875935-3">3</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a552c031875935-1" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">20</span><span class="crayon-o">:</span><span class="crayon-cn">01</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25019</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-i">sending</span> <span class="crayon-cn">0</span> <span class="crayon-e">priority</span></div>
<div id="crayon-5690f2a3a552c031875935-2" class="crayon-line crayon-striped-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">20</span><span class="crayon-o">:</span><span class="crayon-cn">01</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25019</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">removing </span><span class="crayon-e">protocol </span><span class="crayon-v">VIPs</span><span class="crayon-sy">.</span></div>
<div id="crayon-5690f2a3a552c031875935-3" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">20</span><span class="crayon-o">:</span><span class="crayon-cn">01</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_healthcheckers</span><span class="crayon-sy">[</span><span class="crayon-cn">25018</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">Netlink </span><span class="crayon-e">reflector </span><span class="crayon-e">reports </span><span class="crayon-i">IP</span> <span class="crayon-cn">192.168.1.3</span> <span class="crayon-v">removed</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>这时候访问<a href="http://121.43.187.37/%EF%BC%8C%E5%8F%AF%E4%BB%A5%E7%9C%8B%E5%88%B0%E8%AE%BF%E9%97%AE%E8%87%AA%E5%8A%A8%E5%88%87%E6%8D%A2%E5%88%B0%E4%BA%86NGINX2">http://121.43.187.37/，可以看到访问自动切换到了NGINX2</a><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/6.jpg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/6.jpg" alt="6" width="473" height="194" /></a></p>
</div>
<div>
<div>到HAVIP控制台查看，192.168.1.2的服务器为主服务器</div>
</div>
</div>
<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/2222.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/2222.png" alt="2222" width="603" height="354" /></a></p>
<div>
<div>重新启动nginx1的nginx和keepalive服务</div>
<div>查看日志可以看到keepalive重新发送了IP宣告的报文</div>
<div>
<div id="crayon-5690f2a3a5533945876468" class="crayon-syntax crayon-theme-familiar crayon-font-droid-sans-mono crayon-os-pc print-yes notranslate crayon-wrapped" data-settings=" minimize scroll-mouseover wrap">
<div class="crayon-plain-wrap"></div>
<div class="crayon-main">
<table class="crayon-table">
<tbody>
<tr class="crayon-row">
<td class="crayon-nums " data-settings="show">
<div class="crayon-nums-content">
<div class="crayon-num" data-line="crayon-5690f2a3a5533945876468-1">1</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5533945876468-2">2</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5533945876468-3">3</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5690f2a3a5533945876468-4">4</div>
<div class="crayon-num" data-line="crayon-5690f2a3a5533945876468-5">5</div>
</div>
</td>
<td class="crayon-code">
<div class="crayon-pre">
<div id="crayon-5690f2a3a5533945876468-1" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">Entering </span><span class="crayon-e">MASTER </span><span class="crayon-e">STATE</span></div>
<div id="crayon-5690f2a3a5533945876468-2" class="crayon-line crayon-striped-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">setting </span><span class="crayon-e">protocol </span><span class="crayon-v">VIPs</span><span class="crayon-sy">.</span></div>
<div id="crayon-5690f2a3a5533945876468-3" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">Sending </span><span class="crayon-e">gratuitous </span><span class="crayon-e">ARPs </span><span class="crayon-e">on </span><span class="crayon-e">eth0 </span><span class="crayon-st">for</span> <span class="crayon-cn">192.168.1.3</span></div>
<div id="crayon-5690f2a3a5533945876468-4" class="crayon-line crayon-striped-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">14</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_healthcheckers</span><span class="crayon-sy">[</span><span class="crayon-cn">25609</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">Netlink </span><span class="crayon-e">reflector </span><span class="crayon-e">reports </span><span class="crayon-i">IP</span> <span class="crayon-cn">192.168.1.3</span> <span class="crayon-e">added</span></div>
<div id="crayon-5690f2a3a5533945876468-5" class="crayon-line"><span class="crayon-i">Oct</span> <span class="crayon-cn">23</span> <span class="crayon-cn">17</span><span class="crayon-o">:</span><span class="crayon-cn">22</span><span class="crayon-o">:</span><span class="crayon-cn">19</span> <span class="crayon-e">iZ239aqzdi7Z </span><span class="crayon-v">Keepalived_vrrp</span><span class="crayon-sy">[</span><span class="crayon-cn">25610</span><span class="crayon-sy">]</span><span class="crayon-o">:</span> <span class="crayon-e">VRRP_Instance</span><span class="crayon-sy">(</span><span class="crayon-v">VI_1</span><span class="crayon-sy">)</span> <span class="crayon-e">Sending </span><span class="crayon-e">gratuitous </span><span class="crayon-e">ARPs </span><span class="crayon-e">on </span><span class="crayon-e">eth0 </span><span class="crayon-st">for</span> <span class="crayon-cn">192.168.1.3</span></div>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<p>重新访问http://121.43.187.37/测试，重新访问到了服务器NGINX1，到HAVIP控制台查看，192.168.1.1的服务器重新夺回了控制权，成为了为主服务器</p></div>
<div><a href="https://www.fuwuqiok.com/wp-content/uploads/2016/01/1111.png"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2016/01/1111.png" alt="1111" width="596" height="330" /></a></div>
<div>这样就实现了阿里云环境下的HA切换。</div>
<div>实际测试，阿里云的多个HAVIP可以绑定到同样的两台机器，可以配置多组vrrp_instance来实现双主。或者两台服务器同时为两个业务服务，避免资源浪费。同时能够做到主备</div>
</div>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha/">阿里云下配置keepalive，利用HAVIP实现HA</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/%e9%98%bf%e9%87%8c%e4%ba%91%e4%b8%8b%e9%85%8d%e7%bd%aekeepalive%ef%bc%8c%e5%88%a9%e7%94%a8havip%e5%ae%9e%e7%8e%b0ha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
