first commit

This commit is contained in:
iProbe 2022-10-18 16:59:37 +08:00
commit ba848e218d
1001 changed files with 152333 additions and 0 deletions

Binary file not shown.

View file

@ -0,0 +1,255 @@
RabbitMQ集群安装配置
环境:
CentOS 6.5 x64
otp_src_19.1.tar.gz
rabbitmq-server-generic-unix-3.6.6.tar.xz
集群信息:
①节点1172.16.4.93 主机名SHVM-RMQ01-4-93
②节点2172.16.4.94 主机名SHVM-RMQ02-4-94
③节点3172.16.4.95 主机名SHVM-RMQ03-4-95
准备工作
注意:所有以下步骤在三台主机上都要操作
①配置本地解析
在/etc/hosts中添加对三台主机的解析如下ip都为各主机对应主机名
172.16.4.93 SHVM-RMQ01-4-93
172.16.4.94 SHVM-RMQ02-4-94
172.16.4.95 SHVM-RMQ03-4-95
②关闭selinux
setenfore 0
③开放1567225672567256714369端口
编辑/etc/sysconfig/iptables添加如下
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4369 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5671 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 5672 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 15672 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 25672 -j ACCEPT
④安装依赖及编译环境
yum -y install install make gcc gcc-c++ kernel-devel ncurses ncurses-devel openssl openssl-devel unixODBC unixODBC-devel perl
⑤新建用户
useradd -u 1880 -g 1500 rmq
安装配置erlang
注意:所有以下步骤在三台主机上都要操作
①解压
tar -xf otp_src_19.1.tar.gz
②编译安装erlang
cd otp_src_19.1
./configure --prefix=/usr/local/erlang --with-ssl
make && make install
③配置环境变量
编辑/etc/profile在最后添加如下行
ERLANG_HOME=/usr/local/erlang
PATH=$PATH:$ERLANG_HOME/bin
export PATH
④测试erlang
erl
如果出现类似下图的情况说明erlang安装成功
退出方法Ctrl+c然后输入a回车
如果不成功请检查erlang编译安装是否有问题环境变量是否配置正确
安装配置rabbitMQ
注意:所有以下步骤在三台主机上都要操作
①解压
xz -d rabbitmq-server-generic-unix-3.6.6.tar.xz
tar -xf rabbitmq-server-generic-unix-3.6.6.tar
②配置环境变量
编辑/home/rmq/.bash_profile添加如下行
RMQ_HOME=/opt/appl/rabbitmq/rmq
PATH=$PATH:$RMQ_HOME/sbin
export PATH
cd $RMQ_HOME
③切换到rmq用户测试erl是否正常
sudo su - rmq
erl
如果提示找不到这个命令,尝试修改/usr/local/erlang/lib/erlang/bin目录权限为755解决。
因为erl这个文件是/usr/local/erlang/lib/erlang/bin/erl的链接文件。
④安装web管理界面
rabbitmq-plugins enable rabbitmq_management
配置rabbitMQ集群
①设置.erlang.cookie
用节点1中的/home/rmq/.erlang.cookie文件中的值替换其他两个节点相同文件中的值
②停止rabbitMQ并后台启动
rabbitmqctl stop
rabbitmq-server -detached
③将节点2节点3于节点1组成集群
节点2
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@SHVM-RMQ01-4-93
rabbitmqctl start_app
节点3
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@SHVM-RMQ01-4-93
rabbitmqctl start_app
④测试集群是否配置成功
rabbitmqctl cluster_status
⑤设置镜像队列策略(任一个节点执行都可以)
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
配置HAProxy
安装haproxy修改 /etc/haproxy/haproxy.cfg
listen rabbitmq_cluster 0.0.0.0:5672
mode tcp
balance roundrobin
server node1 172.16.4.93:5672 check inter 2000 rise 2 fall 3
server node2 172.16.4.94:5672 check inter 2000 rise 2 fall 3
server node2 172.16.4.95:5672 check inter 2000 rise 2 fall 3
登录rabbitMQ后台监控
默认已经有一个guest的管理员用户密码guest但是这个用户不能远程登录只能在本机访问登录所以必须添加一个用户可以远程登录
①添加admin用户
rabbitmqctl add_user admin rabbitmq
②赋予权限
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
③修改角色
rabbitmqctl set_user_tags admin administrator
④远程登录后台
通过http://172.16.4.93:15672 http://172.16.4.94:15672 http://172.16.4.95:15672 访问各节点
其他一些命令与说明
应用和集群管理(先启动集群各个服务,再启动应用)
1.停止RabbitMQ应用关闭节点
# rabbitmqctl stop
2.停止RabbitMQ应用
# rabbitmqctl stop_app
3.启动RabbitMQ应用
# rabbitmqctl start_app
4.显示RabbitMQ中间件各种信息
# rabbitmqctl status
5.重置RabbitMQ节点
# rabbitmqctl reset
# rabbitmqctl force_reset
6.查看所有队列信息
# rabbitmqctl list_queues
7.启动服务
# rabbitmq-server detached
8.查看集群状态
# rabbitmqctl cluster_status
9.Binding信息
# rabbitmqctl list_bindings
10.Connection信息
# rabbitmqctl list_connections
11.Exchange信息
# rabbitmqctl list_exchanges
12.后台启动所有服务
# rabbitmq-server -detached
13.查看队列
# rabbitmqctl list_policies
14.开启某个插件
#rabbitmq-plugins enable xxx
15.关闭某个插件
#rabbitmq-plugins disable xxx
16.新建用户
#rabbitmqctl add_user xxx pwd
17.删除用户
#rabbitmqctl delete_user xxx
18.修改密码
#rabbimqctl change_password {username} {newpassword}
19.设置用户角色
#rabbitmqctl set_user_tags {username} {tag ...}
Tag可以为 administrator,monitoring, management
RabbitMQ端口说明
端口4369 、5672、5671 、25672、15672 、61613、61614 、1883、8883
4369 (epmd)
5672, 5671 (AMQP 0-9-1 and 1.0 without and with TLS)
25672. This port used by Erlang distribution for inter-node and CLI tools communication and is allocated from a dynamic range (limited to a single port by default, computed as AMQP port + 20000). See networking guide for details.
15672 (if management plugin is enabled)
61613, 61614 (if STOMP is enabled)
1883, 8883 (if MQTT is enabled)
HAProxy常用的算法有如下8种
balance roundrobin表示简单的轮询建议关注
balance static-rr表示根据权重建议关注
balance leastconn表示最少连接者先处理建议关注
balance source表示根据请求源IP跟Nginx的ip_hash算法相似建议关注
balance uri表示根据请求的URI
balance url_param表示根据请求的URl参数
balance hdr(name)表示根据HTTP请求头来锁定每一次HTTP请求
balance rdp-cookie(name)表示根据据cookie(name)来锁定并哈希每一次TCP请求。
登录rabbitMQ后台监控
默认已经有一个guest的管理员用户密码guest但是这个用户不能远程登录只能在本机访问登录所以必须添加一个用户可以远程登录

Binary file not shown.

View file

@ -0,0 +1,337 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="tool" content="leanote-desktop-app">
<title>nginx+keepalive主从双机热备+自动切换解决方案</title>
<style>
*{font-family:"lucida grande","lucida sans unicode",lucida,helvetica,"Hiragino Sans GB","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;}
body {
margin: 0;
}
/*公用文字样式*/
h1{font-size:30px}h2{font-size:24px}h3{font-size:18px}h4{font-size:14px}
.note-container{
width:850px;
margin:auto;
padding: 10px 20px;
box-shadow: 1px 1px 10px #eee;
}
#title {
margin: 0;
}
table {
margin-bottom: 16px;
border-collapse: collapse;
}
table th, table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
table th {
font-weight: bold;
}
table tr {
background-color: none;
border-top: 1px solid #ccc;
}
table tr:nth-child(2n) {
background-color: rgb(247, 247, 249);
}
.mce-item-table, .mce-item-table td, .mce-item-table th, .mce-item-table caption {
border: 1px solid #ddd;
border-collapse: collapse;
padding: 6px 13px;
}
blockquote {
border-left-width:10px;
background-color:rgba(128,128,128,0.05);
border-top-right-radius:5px;
border-bottom-right-radius:5px;
padding:15px 20px;
border-left:5px solid rgba(128,128,128,0.075);
}
blockquote p {
margin-bottom:1.1em;
font-size:1em;
line-height:1.45
}
blockquote ul:last-child,blockquote ol:last-child {
margin-bottom:0
}
pre {
padding: 18px;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
border-radius: 3px;
display: block;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
white-space: nowrap;
background-color: #f9f2f4;
border-radius: 4px;
}
.footnote {
vertical-align: top;
position: relative;
top: -0.5em;
font-size: .8em;
}
hr {
margin:2em 0
}
img {
max-width:100%
}
pre {
word-break:break-word
}
p,pre,pre.prettyprint,blockquote {
margin:0 0 1.1em
}
hr {
margin:2em 0
}
img {
max-width:100%
}
.sequence-diagram,.flow-chart {
text-align:center;
margin-bottom:1.1em
}
.sequence-diagram text,.flow-chart text {
font-size:15px !important;
font-family:"Source Sans Pro",sans-serif !important
}
.sequence-diagram [fill="#ffffff"],.flow-chart [fill="#ffffff"] {
fill:#f6f6f6
}
.sequence-diagram [stroke="#000000"],.flow-chart [stroke="#000000"] {
stroke:#3f3f3f
}
.sequence-diagram text[stroke="#000000"],.flow-chart text[stroke="#000000"] {
stroke:none
}
.sequence-diagram [fill="#000"],.flow-chart [fill="#000"],.sequence-diagram [fill="#000000"],.flow-chart [fill="#000000"],.sequence-diagram [fill="black"],.flow-chart [fill="black"] {
fill:#3f3f3f
}
ul,ol {
margin-bottom:1.1em
}
ul ul,ol ul,ul ol,ol ol {
margin-bottom:1.1em
}
kbd {
padding:.1em .6em;
border:1px solid rgba(63,63,63,0.25);
-webkit-box-shadow:0 1px 0 rgba(63,63,63,0.25);
box-shadow:0 1px 0 rgba(63,63,63,0.25);
font-size:.7em;
font-family:sans-serif;
background-color:#fff;
color:#333;
border-radius:3px;
display:inline-block;
margin:0 .1em;
white-space:nowrap
}
.toc ul {
list-style-type:none;
margin-bottom:15px
}
</style>
<!-- 该css供自定义样式 -->
<link href="../leanote-html.css" rel="stylesheet">
</head>
<body>
<div class="note-container">
<h1 class="title" id="leanote-title">nginx+keepalive主从双机热备+自动切换解决方案</h1>
<div class="content-html" id="leanote-content"><p>环境采集cenots&nbsp;6.3&nbsp;64位迷你安装因为安装前你需要做一些工作</p><pre id="leanote_ace_1480070528557_0" class="ace-tomorrow">yum&nbsp;install&nbsp;-y&nbsp;make wget</pre><p>如果你愿意可以更新下系统更换下yum源.</p><h3>1.安装keepalive</h3><p>官方最新版&nbsp;&nbsp;keepalived-1.2.7&nbsp;</p><pre id="leanote_ace_1480070528573_0" class="ace-tomorrow">tar&nbsp;zxvf&nbsp;keepalived-1.2.7.tar.gz
cd&nbsp;keepalived-1.2.7</pre><p>在此之前。请安装一下一些简单的工具&nbsp;</p><pre id="leanote_ace_1480070528584_0" class="ace-tomorrow">yum&nbsp;install&nbsp;-y&nbsp;gcc&nbsp;openssl-devel&nbsp;popt-devel</pre><p>不然会编译不成功的。然后:</p><pre id="leanote_ace_1480070528593_0" class="ace-tomorrow ace_focus">./configure
make&nbsp;&amp;&amp;&nbsp;make&nbsp;install&nbsp;
cp&nbsp;/usr/local/etc/rc.d/init.d/keepalived&nbsp;/etc/init.d/
cp&nbsp;/usr/local/etc/sysconfig/keepalived&nbsp;/etc/sysconfig/
chmod&nbsp;+x&nbsp;/etc/init.d/keepalived
chkconfig&nbsp;--add&nbsp;keepalived
chkconfig&nbsp;keepalived&nbsp;on
mkdir&nbsp;/etc/keepalived
ln&nbsp;-s&nbsp;/usr/local/sbin/keepalived&nbsp;/usr/sbin/</pre><h3>2.安装<a title="Nginx" href="http://www.linuxde.net/tag/nginx" target="_blank" data-mce-href="http://www.linuxde.net/tag/nginx">Nginx</a>&nbsp;</h3><pre id="leanote_ace_1480070528614_0" class="ace-tomorrow">tar&nbsp;zxvf&nbsp;&nbsp;nginx-1.2.5.tar.gz
cd&nbsp;nginx-1.2.5</pre><p>安装一下相关组件.</p><pre id="leanote_ace_1480070528627_0" class="ace-tomorrow">yum&nbsp;install&nbsp;-y&nbsp;pcre-devel
./configure&nbsp;--prefix=/usr/local/nginx&nbsp;--user=www&nbsp;--group=www&nbsp;&nbsp;--with-http_stub_status_module&nbsp;--with-http_ssl_module
make&nbsp;&amp;&amp;&nbsp;make&nbsp;install</pre><h3>3.配置keepalive</h3><p>两台服务器端keepalived.conf内容都为如下都设置为backup不抢占注意修改优先级不同,更详细的keepalived配置文件说明可以执行<a title="man命令" href="http://man.linuxde.net/man" target="_blank" data-mce-href="http://man.linuxde.net/man">man</a>&nbsp;keepalived.conf查看</p><pre id="leanote_ace_1480070528640_0" class="ace-tomorrow">!&nbsp;Configuration&nbsp;file&nbsp;for&nbsp;keepalived
global_defs&nbsp;{
&nbsp;&nbsp;&nbsp;notification_email&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;admin@lvtao.net
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;notification_email_from&nbsp;admin@lvtao.net
&nbsp;&nbsp;&nbsp;smtp_server&nbsp;127.0.0.1
&nbsp;&nbsp;&nbsp;smtp_connect_timeout&nbsp;30
&nbsp;&nbsp;&nbsp;router_id&nbsp;LVS_DEVEL
}
#监控服务.NGINX&nbsp;mysql等
vrrp_script&nbsp;chk_nginx&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;script&nbsp;"/home/check_nginx.sh"
&nbsp;&nbsp;&nbsp;&nbsp;interval&nbsp;2
&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;2
}
vrrp_instance&nbsp;VI_1&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;BACKUP&nbsp;&nbsp;#主从设置&nbsp;MASTER
&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;eth2&nbsp;&nbsp;#网卡名
&nbsp;&nbsp;&nbsp;&nbsp;virtual_router_id&nbsp;51
&nbsp;&nbsp;&nbsp;&nbsp;mcast_src_ip&nbsp;10.0.1.133&nbsp;#本机ip
&nbsp;&nbsp;&nbsp;&nbsp;priority&nbsp;50&nbsp;&nbsp;#从机小于主机
&nbsp;&nbsp;&nbsp;&nbsp;advert_int&nbsp;1
&nbsp;&nbsp;&nbsp;&nbsp;authentication&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth_type&nbsp;PASS
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth_pass&nbsp;chtopnet
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;virtual_ipaddress&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.0.1.2&nbsp;&nbsp;#VIP&nbsp;的IP
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;track_script&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chk_nginx&nbsp;&nbsp;#检测脚本
&nbsp;&nbsp;&nbsp;&nbsp;}
}
virtual_server&nbsp;10.0.1.2&nbsp;80&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;delay_loop&nbsp;6
&nbsp;&nbsp;&nbsp;&nbsp;lb_algo&nbsp;rr
&nbsp;&nbsp;&nbsp;&nbsp;lb_kind&nbsp;DR
&nbsp;&nbsp;&nbsp;&nbsp;persistence_timeout&nbsp;50
&nbsp;&nbsp;&nbsp;&nbsp;protocol&nbsp;TCP
&nbsp;&nbsp;&nbsp;&nbsp;real_server&nbsp;10.0.1.132&nbsp;80&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCP_CHECK&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_timeout&nbsp;10
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nb_get_retry&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_before_retry&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_port&nbsp;80
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;real_server&nbsp;10.0.1.133&nbsp;80&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCP_CHECK&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_timeout&nbsp;10
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nb_get_retry&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_before_retry&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_port&nbsp;80
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}</pre><p>启动相关服务。我在这儿使用的是nginx&nbsp;每个上面开了一个站点通过IP可以直接访问的。启动keepalive后就可以通过VIP的虚拟IP&nbsp;10.0.1.2来访问站点了,测试方法就是&nbsp;停止任何其中一个站点,看它是否能自动切换到从服务器上。</p><p>上面代码中&nbsp;nginx的检测脚本如下&nbsp;</p><pre id="leanote_ace_1480070528660_0" class="ace-tomorrow">#!/bin/bash
if&nbsp;[&nbsp;"$(ps&nbsp;-ef&nbsp;|&nbsp;grep&nbsp;"nginx:&nbsp;master&nbsp;process"|&nbsp;grep&nbsp;-v&nbsp;grep&nbsp;)"&nbsp;==&nbsp;""&nbsp;]
then
&nbsp;/usr/local/nginx/sbin/nginx
&nbsp;sleep&nbsp;5
&nbsp;if&nbsp;[&nbsp;"$(ps&nbsp;-ef&nbsp;|&nbsp;grep&nbsp;"nginx:&nbsp;master&nbsp;process"|&nbsp;grep&nbsp;-v&nbsp;grep&nbsp;)"&nbsp;==&nbsp;""&nbsp;]
&nbsp;then
&nbsp;killall&nbsp;keepalived
&nbsp;fi
fi</pre><p>在两台Web&nbsp;Server上执行realserver.sh脚本为lo:0绑定VIP地址10.0.1.2、抑制<a title="arp命令" href="http://man.linuxde.net/arp" target="_blank" data-mce-href="http://man.linuxde.net/arp">arp</a>广播。</p><pre id="leanote_ace_1480070528673_0" class="ace-tomorrow">#!/bin/bash
#description:&nbsp;Config&nbsp;realserver
VIP=10.0.1.2
&nbsp;
/etc/rc.d/init.d/functions
&nbsp;
case&nbsp;"$1"&nbsp;in
start)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/sbin/ifconfig&nbsp;lo:0&nbsp;$VIP&nbsp;netmask&nbsp;255.255.255.255&nbsp;broadcast&nbsp;$VIP
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/sbin/route&nbsp;add&nbsp;-host&nbsp;$VIP&nbsp;dev&nbsp;lo:0
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"1"&nbsp;&gt;/proc/sys/net/ipv4/conf/lo/arp_ignore
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"2"&nbsp;&gt;/proc/sys/net/ipv4/conf/lo/arp_announce
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"1"&nbsp;&gt;/proc/sys/net/ipv4/conf/all/arp_ignore
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"2"&nbsp;&gt;/proc/sys/net/ipv4/conf/all/arp_announce
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sysctl&nbsp;-p&nbsp;&gt;/dev/null&nbsp;2&gt;&amp;1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"RealServer&nbsp;Start&nbsp;OK"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
stop)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/sbin/ifconfig&nbsp;lo:0&nbsp;down
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/sbin/route&nbsp;del&nbsp;$VIP&nbsp;&gt;/dev/null&nbsp;2&gt;&amp;1
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"0"&nbsp;&gt;/proc/sys/net/ipv4/conf/lo/arp_ignore
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"0"&nbsp;&gt;/proc/sys/net/ipv4/conf/lo/arp_announce
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"0"&nbsp;&gt;/proc/sys/net/ipv4/conf/all/arp_ignore
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"0"&nbsp;&gt;/proc/sys/net/ipv4/conf/all/arp_announce
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"RealServer&nbsp;Stoped"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;;
*)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Usage:&nbsp;$0&nbsp;{start|stop}"
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1
esac
&nbsp;
exit&nbsp;0</pre><p>分别在主从机上执行&nbsp;&nbsp;&nbsp;sh&nbsp;realserver.sh&nbsp;start&nbsp;&nbsp;就可实现负载均衡及高可用集群了;</p><h3>keepalive相关参数说明</h3><pre id="leanote_ace_1480070528686_0" class="ace-tomorrow">&nbsp;!&nbsp;Configuration&nbsp;File&nbsp;for&nbsp;keepalived
global_defs&nbsp;{
&nbsp;&nbsp;&nbsp;notification_email&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;admin@lvtao.net&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置报警邮件地址,可以设置多个,每行一个。&nbsp;需开启本机的sendmail服务
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;notification_email_from&nbsp;&nbsp;admin@lvtao.net&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置邮件的发送地址
&nbsp;&nbsp;&nbsp;smtp_server&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置smtp&nbsp;server地址
&nbsp;&nbsp;&nbsp;smtp_connect_timeout&nbsp;30&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置连接smtp&nbsp;server的超时时间
&nbsp;&nbsp;&nbsp;router_id&nbsp;LVS_DEVEL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#表示运行keepalived服务器的一个标识。发邮件时显示在邮件主题的信息
}
vrrp_instance&nbsp;VI_1&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;MASTER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#指定keepalived的角色MASTER表示此主机是主服务器BACKUP表示此主机是备用服务器
&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;eth0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#指定HA监测网络的接口
&nbsp;&nbsp;&nbsp;&nbsp;virtual_router_id&nbsp;51&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#虚拟路由标识这个标识是一个数字同一个vrrp实例使用唯一的标识。即同一vrrp_instance下MASTER和BACKUP必须是一致的
&nbsp;&nbsp;&nbsp;&nbsp;priority&nbsp;100&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#定义优先级数字越大优先级越高在同一个vrrp_instance下MASTER的优先级必须大于BACKUP的优先级
&nbsp;&nbsp;&nbsp;&nbsp;advert_int&nbsp;1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设定MASTER与BACKUP负载均衡器之间同步检查的时间间隔单位是秒
&nbsp;&nbsp;&nbsp;&nbsp;authentication&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置验证类型和密码
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth_type&nbsp;PASS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置验证类型主要有PASS和AH两种
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth_pass&nbsp;1111&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置验证密码在同一个vrrp_instance下MASTER与BACKUP必须使用相同的密码才能正常通信
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;virtual_ipaddress&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置虚拟IP地址可以设置多个虚拟IP地址每行一个
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10.0.0.148
&nbsp;&nbsp;&nbsp;&nbsp;}
}
virtual_server&nbsp;10.0.0.148&nbsp;80&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置虚拟服务器需要指定虚拟IP地址和服务端口IP与端口之间用空格隔开
&nbsp;&nbsp;&nbsp;&nbsp;delay_loop&nbsp;6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置运行情况检查时间,单位是秒
&nbsp;&nbsp;&nbsp;&nbsp;lb_algo&nbsp;rr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置负载调度算法这里设置为rr即轮询算法
&nbsp;&nbsp;&nbsp;&nbsp;lb_kind&nbsp;DR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#设置LVS实现负载均衡的机制有NAT、TUN、DR三个模式可选
&nbsp;&nbsp;&nbsp;&nbsp;persistence_timeout&nbsp;50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#会话保持时间单位是秒。这个选项对动态网页是非常有用的为集群系统中的session共享提供了一个很好的解决方案。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#需要注意的是这个会话保持时间是最大无响应超时时间也就是说用户在操作动态页面时如果50秒内没有执行任何操作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#那么接下来的操作会被分发到另外的节点但是如果用户一直在操作动态页面则不受50秒的时间限制
&nbsp;&nbsp;&nbsp;&nbsp;protocol&nbsp;TCP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#指定转发协议类型有TCP和UDP两种
&nbsp;&nbsp;&nbsp;&nbsp;real_server&nbsp;10.0.0.137&nbsp;80&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#配置服务节点1需要指定real&nbsp;server的真实IP地址和端口IP与端口之间用空格隔开
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCP_CHECK&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#realserver的状态检测设置部分单位是秒
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_timeout&nbsp;10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#表示3秒无响应超时
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nb_get_retry&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#表示重试次数
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_before_retry&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;#表示重试间隔
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_port&nbsp;80
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;real_server&nbsp;10.0.0.139&nbsp;80&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TCP_CHECK&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_timeout&nbsp;10
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;nb_get_retry&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delay_before_retry&nbsp;3
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;connect_port&nbsp;80
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}
}</pre><p><br></p></div>
</div>
<!-- 该js供其它处理 -->
<script src="../leanote-html.js"></script>
</body>
</html>

View file

@ -0,0 +1,349 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="tool" content="leanote-desktop-app">
<title>基于Keepalived+Haproxy搭建四层负载均衡器</title>
<style>
*{font-family:"lucida grande","lucida sans unicode",lucida,helvetica,"Hiragino Sans GB","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;}
body {
margin: 0;
}
/*公用文字样式*/
h1{font-size:30px}h2{font-size:24px}h3{font-size:18px}h4{font-size:14px}
.note-container{
width:850px;
margin:auto;
padding: 10px 20px;
box-shadow: 1px 1px 10px #eee;
}
#title {
margin: 0;
}
table {
margin-bottom: 16px;
border-collapse: collapse;
}
table th, table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
table th {
font-weight: bold;
}
table tr {
background-color: none;
border-top: 1px solid #ccc;
}
table tr:nth-child(2n) {
background-color: rgb(247, 247, 249);
}
.mce-item-table, .mce-item-table td, .mce-item-table th, .mce-item-table caption {
border: 1px solid #ddd;
border-collapse: collapse;
padding: 6px 13px;
}
blockquote {
border-left-width:10px;
background-color:rgba(128,128,128,0.05);
border-top-right-radius:5px;
border-bottom-right-radius:5px;
padding:15px 20px;
border-left:5px solid rgba(128,128,128,0.075);
}
blockquote p {
margin-bottom:1.1em;
font-size:1em;
line-height:1.45
}
blockquote ul:last-child,blockquote ol:last-child {
margin-bottom:0
}
pre {
padding: 18px;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
border-radius: 3px;
display: block;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
white-space: nowrap;
background-color: #f9f2f4;
border-radius: 4px;
}
.footnote {
vertical-align: top;
position: relative;
top: -0.5em;
font-size: .8em;
}
hr {
margin:2em 0
}
img {
max-width:100%
}
pre {
word-break:break-word
}
p,pre,pre.prettyprint,blockquote {
margin:0 0 1.1em
}
hr {
margin:2em 0
}
img {
max-width:100%
}
.sequence-diagram,.flow-chart {
text-align:center;
margin-bottom:1.1em
}
.sequence-diagram text,.flow-chart text {
font-size:15px !important;
font-family:"Source Sans Pro",sans-serif !important
}
.sequence-diagram [fill="#ffffff"],.flow-chart [fill="#ffffff"] {
fill:#f6f6f6
}
.sequence-diagram [stroke="#000000"],.flow-chart [stroke="#000000"] {
stroke:#3f3f3f
}
.sequence-diagram text[stroke="#000000"],.flow-chart text[stroke="#000000"] {
stroke:none
}
.sequence-diagram [fill="#000"],.flow-chart [fill="#000"],.sequence-diagram [fill="#000000"],.flow-chart [fill="#000000"],.sequence-diagram [fill="black"],.flow-chart [fill="black"] {
fill:#3f3f3f
}
ul,ol {
margin-bottom:1.1em
}
ul ul,ol ul,ul ol,ol ol {
margin-bottom:1.1em
}
kbd {
padding:.1em .6em;
border:1px solid rgba(63,63,63,0.25);
-webkit-box-shadow:0 1px 0 rgba(63,63,63,0.25);
box-shadow:0 1px 0 rgba(63,63,63,0.25);
font-size:.7em;
font-family:sans-serif;
background-color:#fff;
color:#333;
border-radius:3px;
display:inline-block;
margin:0 .1em;
white-space:nowrap
}
.toc ul {
list-style-type:none;
margin-bottom:15px
}
</style>
<!-- 该css供自定义样式 -->
<link href="../leanote-html.css" rel="stylesheet">
</head>
<body>
<div class="note-container">
<h1 class="title" id="leanote-title">基于Keepalived+Haproxy搭建四层负载均衡器</h1>
<div class="content-html" id="leanote-content"><h2>一、前言</h2><p>Haproxy是稳定、高性能、高可用性的负载均衡解决方案支持HTTP及TCP代理后端服务器池因支持强大灵活的7层acl规则广泛作为HTTP反向代理。本文则详细介绍如何利用它的四层交换与Keepalived实现一个负载均衡器适用于Socket、ICE、<a title="mail命令" href="http://man.linuxde.net/mail" target="_blank" data-mce-href="http://man.linuxde.net/mail">mail</a><a title="mysql命令" href="http://man.linuxde.net/mysql" target="_blank" data-mce-href="http://man.linuxde.net/mysql">mysql</a>、私有通讯等任意TCP服务。系统架构图如下</p><p><img src="基于Keepalived-Haproxy搭建四层负载均衡器_files/599b462cd01cce1c4d000016.png" alt="" data-mce-src="/api/file/getImage?fileId=599b462cd01cce1c4d000016"></p><h2>二、平台环境</h2><pre id="leanote_ace_1479781780621_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 105px;">OS:Centos5.4(64X)
MASTER:192.168.0.20
BACKUP:192.168.0.21
VIP:192.168.0.100
Serivce&nbsp;Port:11231</pre><h2>三、平台安装配置</h2><p><strong>1、添加非本机<a title="ip命令" href="http://man.linuxde.net/ip" target="_blank" data-mce-href="http://man.linuxde.net/ip">ip</a>邦定支持</strong></p><pre id="leanote_ace_1479781780643_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 63px;">#vi&nbsp;/etc/sysctl.conf
net.ipv4.ip_nonlocal_bind=1
#sysctl&nbsp;p</pre><p><strong>2、配置平台日志支持</strong></p><pre id="leanote_ace_1479781780653_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 189px;">#vi&nbsp;/etc/syslog.conf
添加:
local3.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/log/haproxy.log
local0.*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/var/log/haproxy.log
#vi&nbsp;/etc/sysconfig/syslog
修改:
SYSLOGD_OPTIONS="-r&nbsp;-m&nbsp;0"
#/etc/init.d/syslog&nbsp;restart</pre><p><strong>3、关闭SELINUX</strong></p><pre id="leanote_ace_1479781780663_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 84px;">vi&nbsp;/etc/sysconfig/selinux
修改:
SELINUX=disabled
#setenforce&nbsp;0</pre><p><strong>4、配置<a title="iptables命令" href="http://man.linuxde.net/iptables" target="_blank" data-mce-href="http://man.linuxde.net/iptables">iptables</a>添加VRRP通讯支持</strong></p><pre id="leanote_ace_1479781780673_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 21px;">iptables&nbsp;-A&nbsp;INPUT&nbsp;-d&nbsp;224.0.0.18&nbsp;-j&nbsp;accept</pre><p><strong>5、Keepalived的安装、配置</strong></p><pre id="leanote_ace_1479781780682_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 1239px;">#mkdir&nbsp;-p&nbsp;/home/install/keepalivedha
#cd&nbsp;/home/install/keepalivedha
#wget&nbsp;http://www.keepalived.org/software/keepalived-1.2.2.tar.gz
#tar&nbsp;zxvf&nbsp;keepalived-1.2.2.tar.gz
#cd&nbsp;keepalived-1.2.2
#./configure
#make&nbsp;&amp;&amp;&nbsp;make&nbsp;install
#cp&nbsp;/usr/local/etc/rc.d/init.d/keepalived&nbsp;/etc/rc.d/init.d/
#cp&nbsp;/usr/local/etc/sysconfig/keepalived&nbsp;/etc/sysconfig/
#mkdir&nbsp;/etc/keepalived
#cp&nbsp;/usr/local/etc/keepalived/keepalived.conf&nbsp;/etc/keepalived/
#cp&nbsp;/usr/local/sbin/keepalived&nbsp;/usr/sbin/
#vi&nbsp;/etc/keepalived/keepalived.conf
!&nbsp;Configuration&nbsp;file&nbsp;for&nbsp;keepalived&nbsp;&nbsp;
&nbsp;&nbsp;
global_defs&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;notification_email&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;liutiansi@gmail.com&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;notification_email_from&nbsp;liutiansi@gmail.com&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;smtp_connect_timeout&nbsp;3&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;smtp_server&nbsp;127.0.0.1&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;router_id&nbsp;LVS_DEVEL&nbsp;&nbsp;
}&nbsp;&nbsp;
vrrp_script&nbsp;chk_haproxy&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;script&nbsp;"killall&nbsp;-0&nbsp;haproxy"&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;interval&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;weight&nbsp;2&nbsp;&nbsp;
}&nbsp;&nbsp;
vrrp_instance&nbsp;VI_1&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;interface&nbsp;eth1&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;state&nbsp;MASTER&nbsp;#&nbsp;从为BACKUP&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;priority&nbsp;101&nbsp;#&nbsp;从为100&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;virtual_router_id&nbsp;50&nbsp;#路由ID可通过#tcpdump&nbsp;vrrp查看。&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;garp_master_delay&nbsp;1&nbsp;#主从切换时间,单位为秒。&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;authentication&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth_type&nbsp;PASS&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;auth_pass&nbsp;KJj23576hYgu23IP&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;track_interface&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth0&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eth1&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;virtual_ipaddress&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;192.168.0.100&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;track_script&nbsp;{&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chk_haproxy&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;#状态通知&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;notify_master&nbsp;"/etc/keepalived/Mailnotify.py&nbsp;master"&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;notify_backup&nbsp;"/etc/keepalived/Mailnotify.py&nbsp;backup"&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;notify_fault&nbsp;"/etc/keepalived/Mailnotify.py&nbsp;fault"&nbsp;&nbsp;
}</pre><p><strong>6、Haproxy的安装与配置</strong></p><pre id="leanote_ace_1479781780693_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 231px;">#cd&nbsp;/home/install/keepalivedha
#wget&nbsp;http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.11.tar.gz
#tar&nbsp;-zxvf&nbsp;haproxy-1.4.11.tar.gz
#cd&nbsp;haproxy-1.4.11
#make&nbsp;install
#mkdir&nbsp;-p&nbsp;/usr/local/haproxy/etc
#mkdir&nbsp;-p&nbsp;/usr/local/haproxy/sbin
#cp&nbsp;examples/haproxy.cfg&nbsp;/usr/local/haproxy/etc
#ln&nbsp;-s&nbsp;/usr/local/sbin/haproxy&nbsp;/usr/local/haproxy/sbin/haproxy&nbsp;
#vi&nbsp;/usr/local/haproxy/etc/haproxy.cfg</pre><pre id="leanote_ace_1479781780704_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 924px;">#&nbsp;this&nbsp;config&nbsp;needs&nbsp;haproxy-1.1.28&nbsp;or&nbsp;haproxy-1.2.1&nbsp;&nbsp;
&nbsp;&nbsp;
global&nbsp;&nbsp;
#&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;local0&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log&nbsp;127.0.0.1&nbsp;&nbsp;&nbsp;local1&nbsp;notice&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxconn&nbsp;5000&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uid&nbsp;99&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;gid&nbsp;99&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;daemon&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pidfile&nbsp;/usr/local/haproxy/haproxy.pid&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;
defaults&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;global&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode&nbsp;&nbsp;&nbsp;&nbsp;http&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#option&nbsp;httplog&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option&nbsp;&nbsp;dontlognull&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retries&nbsp;3&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;option&nbsp;redispatch&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxconn&nbsp;2000&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;contimeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5000&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clitimeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50000&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srvtimeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;50000&nbsp;&nbsp;
&nbsp;&nbsp;
listen&nbsp;&nbsp;ICE01&nbsp;&nbsp;&nbsp;192.168.0.100:11231&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mode&nbsp;tcp&nbsp;#配置TCP模式&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxconn&nbsp;2000&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;balance&nbsp;roundrobin&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;ice-192.168.0.128&nbsp;192.168.0.128:11231&nbsp;check&nbsp;inter&nbsp;5000&nbsp;fall&nbsp;1&nbsp;rise&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;ice-192.168.0.129&nbsp;192.168.0.129:11231&nbsp;check&nbsp;inter&nbsp;5000&nbsp;fall&nbsp;1&nbsp;rise&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;ice-192.168.0.130&nbsp;192.168.0.130:11231&nbsp;check&nbsp;inter&nbsp;5000&nbsp;fall&nbsp;1&nbsp;rise&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;ice-192.168.0.131&nbsp;192.168.0.131:11231&nbsp;check&nbsp;inter&nbsp;5000&nbsp;fall&nbsp;1&nbsp;rise&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;ice-192.168.0.132&nbsp;192.168.0.132:11231&nbsp;check&nbsp;inter&nbsp;5000&nbsp;fall&nbsp;1&nbsp;rise&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server&nbsp;&nbsp;ice-192.168.0.34&nbsp;192.168.0.34:11231&nbsp;check&nbsp;inter&nbsp;5000&nbsp;fall&nbsp;1&nbsp;rise&nbsp;2&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;srvtimeout&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;20000&nbsp;&nbsp;
&nbsp;&nbsp;
listen&nbsp;stats_auth&nbsp;192.168.0.20:80&nbsp;&nbsp;
#&nbsp;listen&nbsp;stats_auth&nbsp;192.168.0.21:80&nbsp;#&nbsp;backup&nbsp;config&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stats&nbsp;enable&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stats&nbsp;uri&nbsp;&nbsp;/admin-status&nbsp;#管理地址&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stats&nbsp;auth&nbsp;&nbsp;admin:123456&nbsp;#管理帐号:管理密码&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stats&nbsp;admin&nbsp;if&nbsp;TRUE</pre><p><strong>7、邮件通知程序(python实现)<br></strong></p><pre id="leanote_ace_1479781780716_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 21px;">#vi&nbsp;/etc/keepalived/Mailnotify.py</pre><pre id="leanote_ace_1479781780725_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 1113px;">#!/usr/local/bin/python&nbsp;&nbsp;
#coding:&nbsp;utf-8&nbsp;&nbsp;
from&nbsp;email.MIMEMultipart&nbsp;import&nbsp;MIMEMultipart&nbsp;&nbsp;
from&nbsp;email.MIMEText&nbsp;import&nbsp;MIMEText&nbsp;&nbsp;
from&nbsp;email.MIMEImage&nbsp;import&nbsp;MIMEImage&nbsp;&nbsp;
from&nbsp;email.header&nbsp;import&nbsp;Header&nbsp;&nbsp;
import&nbsp;sys&nbsp;&nbsp;
import&nbsp;smtplib&nbsp;&nbsp;
&nbsp;
#---------------------------------------------------------------&nbsp;&nbsp;
#&nbsp;Name:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mailnotify.py&nbsp;&nbsp;
#&nbsp;Purpose:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mail&nbsp;notify&nbsp;to&nbsp;SA&nbsp;&nbsp;
#&nbsp;Author:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Liutiansi&nbsp;&nbsp;
#&nbsp;Email:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;liutiansi@gamil.com&nbsp;&nbsp;
#&nbsp;Created:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2011/03/09&nbsp;&nbsp;
#&nbsp;Copyright:&nbsp;&nbsp;&nbsp;(c)&nbsp;2011&nbsp;&nbsp;
#--------------------------------------------------------------&nbsp;&nbsp;
strFrom&nbsp;=&nbsp;'admin@domain.com'&nbsp;&nbsp;
strTo&nbsp;=&nbsp;'liutiansi@gmail.com'&nbsp;&nbsp;
smtp_server='smtp.domain.com'&nbsp;&nbsp;
smtp_pass='123456'&nbsp;&nbsp;
&nbsp;&nbsp;
if&nbsp;sys.argv[1]!="master"&nbsp;and&nbsp;sys.argv[1]!="backup"&nbsp;&nbsp;and&nbsp;sys.argv[1]!="fault":&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;sys.exit()&nbsp;&nbsp;
else:&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;notify_type=sys.argv[1]&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;
mail_title='[紧急]负载均衡器邮件通知'&nbsp;&nbsp;
mail_body_plain=notify_type+'被激活,请做好应急处理。'&nbsp;&nbsp;
mail_body_html='&lt;b&gt;&lt;font&nbsp;color=red&gt;'+notify_type+'被激活,请做好应急处理。&lt;/font&gt;&lt;/b&gt;'&nbsp;&nbsp;
&nbsp;&nbsp;
msgRoot&nbsp;=&nbsp;MIMEMultipart('related')&nbsp;&nbsp;
msgRoot['Subject']&nbsp;=Header(mail_title,'utf-8')&nbsp;&nbsp;
msgRoot['From']&nbsp;=&nbsp;strFrom&nbsp;&nbsp;
msgRoot['To']&nbsp;=&nbsp;strTo&nbsp;&nbsp;
&nbsp;&nbsp;
msgAlternative&nbsp;=&nbsp;MIMEMultipart('alternative')&nbsp;&nbsp;
msgRoot.attach(msgAlternative)&nbsp;&nbsp;
&nbsp;&nbsp;
msgText&nbsp;=&nbsp;MIMEText(mail_body_plain,&nbsp;'plain',&nbsp;'utf-8')&nbsp;&nbsp;
msgAlternative.attach(msgText)&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;
msgText&nbsp;=&nbsp;MIMEText(mail_body_html,&nbsp;'html','utf-8')&nbsp;&nbsp;
msgAlternative.attach(msgText)&nbsp;&nbsp;
&nbsp;&nbsp;
&nbsp;&nbsp;
smtp&nbsp;=&nbsp;smtplib.SMTP()&nbsp;&nbsp;
smtp.connect(smtp_server)&nbsp;&nbsp;
smtp.login(smtp_user,smtp_pass)&nbsp;&nbsp;
smtp.sendmail(strFrom,&nbsp;strTo,&nbsp;msgRoot.as_string())&nbsp;&nbsp;
smtp.quit()</pre><p>修改成系统python实际路径“#!/usr/local/bin/python”(第一行)</p><pre id="leanote_ace_1479781780738_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 63px;">#chmod&nbsp;+x&nbsp;/etc/keepalived/Mailnotify.py
#/usr/local/haproxy/sbin/haproxy&nbsp;-f&nbsp;/usr/local/haproxy/etc/haproxy.cfg
#service&nbsp;keepalived&nbsp;start</pre><p><strong>8、查看VRRP通讯记录<br></strong></p><pre id="leanote_ace_1479781780748_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 21px;">#tcpdump&nbsp;vrrp</pre><pre id="leanote_ace_1479781780758_0" class="ace-tomorrow" data-mce-style="line-height: 1.5; font-size: 14px; height: 63px;">tcpdump:&nbsp;verbose&nbsp;output&nbsp;suppressed,&nbsp;use&nbsp;-v&nbsp;or&nbsp;-vv&nbsp;for&nbsp;full&nbsp;protocol&nbsp;decode
listening&nbsp;on&nbsp;eth0,&nbsp;link-type&nbsp;EN10MB&nbsp;(Ethernet),&nbsp;capture&nbsp;size&nbsp;96&nbsp;bytes
15:49:05.270017&nbsp;IP&nbsp;192.168.0.20&nbsp;&gt;&nbsp;VRRP.MCAST.NET:&nbsp;VRRPv2,&nbsp;Advertisement,&nbsp;vrid&nbsp;50,&nbsp;prio&nbsp;100,&nbsp;authtype&nbsp;simple,&nbsp;intvl&nbsp;1s,&nbsp;length&nbsp;20</pre><h2>四、Haproxy界面</h2><p>访问http://192.168.0.20/admin-status输入帐号admin密码123456进入管理监控平台。</p><p><img src="基于Keepalived-Haproxy搭建四层负载均衡器_files/599b462cd01cce1c4d000015.png" alt="" data-mce-src="/api/file/getImage?fileId=599b462cd01cce1c4d000015"></p><p>haproxy-1.4.9以后版本最大的亮点是添加了手工启用/禁用功能,对升级变更应用时非常有用。</p><h2>五、邮件通知</h2><p><img src="基于Keepalived-Haproxy搭建四层负载均衡器_files/599b462cd01cce1c4d000014.png" alt="" data-mce-src="/api/file/getImage?fileId=599b462cd01cce1c4d000014"></p></div>
</div>
<!-- 该js供其它处理 -->
<script src="../leanote-html.js"></script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,165 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="tool" content="leanote-desktop-app">
<title>搭建分布式集群环境准备</title>
<style>
*{font-family:"lucida grande","lucida sans unicode",lucida,helvetica,"Hiragino Sans GB","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;}
body {
margin: 0;
}
/*公用文字样式*/
h1{font-size:30px}h2{font-size:24px}h3{font-size:18px}h4{font-size:14px}
.note-container{
width:850px;
margin:auto;
padding: 10px 20px;
box-shadow: 1px 1px 10px #eee;
}
#title {
margin: 0;
}
table {
margin-bottom: 16px;
border-collapse: collapse;
}
table th, table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
table th {
font-weight: bold;
}
table tr {
background-color: none;
border-top: 1px solid #ccc;
}
table tr:nth-child(2n) {
background-color: rgb(247, 247, 249);
}
.mce-item-table, .mce-item-table td, .mce-item-table th, .mce-item-table caption {
border: 1px solid #ddd;
border-collapse: collapse;
padding: 6px 13px;
}
blockquote {
border-left-width:10px;
background-color:rgba(128,128,128,0.05);
border-top-right-radius:5px;
border-bottom-right-radius:5px;
padding:15px 20px;
border-left:5px solid rgba(128,128,128,0.075);
}
blockquote p {
margin-bottom:1.1em;
font-size:1em;
line-height:1.45
}
blockquote ul:last-child,blockquote ol:last-child {
margin-bottom:0
}
pre {
padding: 18px;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
border-radius: 3px;
display: block;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
white-space: nowrap;
background-color: #f9f2f4;
border-radius: 4px;
}
.footnote {
vertical-align: top;
position: relative;
top: -0.5em;
font-size: .8em;
}
hr {
margin:2em 0
}
img {
max-width:100%
}
pre {
word-break:break-word
}
p,pre,pre.prettyprint,blockquote {
margin:0 0 1.1em
}
hr {
margin:2em 0
}
img {
max-width:100%
}
.sequence-diagram,.flow-chart {
text-align:center;
margin-bottom:1.1em
}
.sequence-diagram text,.flow-chart text {
font-size:15px !important;
font-family:"Source Sans Pro",sans-serif !important
}
.sequence-diagram [fill="#ffffff"],.flow-chart [fill="#ffffff"] {
fill:#f6f6f6
}
.sequence-diagram [stroke="#000000"],.flow-chart [stroke="#000000"] {
stroke:#3f3f3f
}
.sequence-diagram text[stroke="#000000"],.flow-chart text[stroke="#000000"] {
stroke:none
}
.sequence-diagram [fill="#000"],.flow-chart [fill="#000"],.sequence-diagram [fill="#000000"],.flow-chart [fill="#000000"],.sequence-diagram [fill="black"],.flow-chart [fill="black"] {
fill:#3f3f3f
}
ul,ol {
margin-bottom:1.1em
}
ul ul,ol ul,ul ol,ol ol {
margin-bottom:1.1em
}
kbd {
padding:.1em .6em;
border:1px solid rgba(63,63,63,0.25);
-webkit-box-shadow:0 1px 0 rgba(63,63,63,0.25);
box-shadow:0 1px 0 rgba(63,63,63,0.25);
font-size:.7em;
font-family:sans-serif;
background-color:#fff;
color:#333;
border-radius:3px;
display:inline-block;
margin:0 .1em;
white-space:nowrap
}
.toc ul {
list-style-type:none;
margin-bottom:15px
}
</style>
<!-- 该css供自定义样式 -->
<link href="../leanote-html.css" rel="stylesheet">
</head>
<body>
<div class="note-container">
<h1 class="title" id="leanote-title">搭建分布式集群环境准备</h1>
<div class="content-html" id="leanote-content"></div>
</div>
<!-- 该js供其它处理 -->
<script src="../leanote-html.js"></script>
</body>
</html>

View file

@ -0,0 +1,165 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="tool" content="leanote-desktop-app">
<title>日志监控系统流程图</title>
<style>
*{font-family:"lucida grande","lucida sans unicode",lucida,helvetica,"Hiragino Sans GB","Microsoft YaHei","WenQuanYi Micro Hei",sans-serif;}
body {
margin: 0;
}
/*公用文字样式*/
h1{font-size:30px}h2{font-size:24px}h3{font-size:18px}h4{font-size:14px}
.note-container{
width:850px;
margin:auto;
padding: 10px 20px;
box-shadow: 1px 1px 10px #eee;
}
#title {
margin: 0;
}
table {
margin-bottom: 16px;
border-collapse: collapse;
}
table th, table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
table th {
font-weight: bold;
}
table tr {
background-color: none;
border-top: 1px solid #ccc;
}
table tr:nth-child(2n) {
background-color: rgb(247, 247, 249);
}
.mce-item-table, .mce-item-table td, .mce-item-table th, .mce-item-table caption {
border: 1px solid #ddd;
border-collapse: collapse;
padding: 6px 13px;
}
blockquote {
border-left-width:10px;
background-color:rgba(128,128,128,0.05);
border-top-right-radius:5px;
border-bottom-right-radius:5px;
padding:15px 20px;
border-left:5px solid rgba(128,128,128,0.075);
}
blockquote p {
margin-bottom:1.1em;
font-size:1em;
line-height:1.45
}
blockquote ul:last-child,blockquote ol:last-child {
margin-bottom:0
}
pre {
padding: 18px;
background-color: #f7f7f9;
border: 1px solid #e1e1e8;
border-radius: 3px;
display: block;
}
code {
padding: 2px 4px;
font-size: 90%;
color: #c7254e;
white-space: nowrap;
background-color: #f9f2f4;
border-radius: 4px;
}
.footnote {
vertical-align: top;
position: relative;
top: -0.5em;
font-size: .8em;
}
hr {
margin:2em 0
}
img {
max-width:100%
}
pre {
word-break:break-word
}
p,pre,pre.prettyprint,blockquote {
margin:0 0 1.1em
}
hr {
margin:2em 0
}
img {
max-width:100%
}
.sequence-diagram,.flow-chart {
text-align:center;
margin-bottom:1.1em
}
.sequence-diagram text,.flow-chart text {
font-size:15px !important;
font-family:"Source Sans Pro",sans-serif !important
}
.sequence-diagram [fill="#ffffff"],.flow-chart [fill="#ffffff"] {
fill:#f6f6f6
}
.sequence-diagram [stroke="#000000"],.flow-chart [stroke="#000000"] {
stroke:#3f3f3f
}
.sequence-diagram text[stroke="#000000"],.flow-chart text[stroke="#000000"] {
stroke:none
}
.sequence-diagram [fill="#000"],.flow-chart [fill="#000"],.sequence-diagram [fill="#000000"],.flow-chart [fill="#000000"],.sequence-diagram [fill="black"],.flow-chart [fill="black"] {
fill:#3f3f3f
}
ul,ol {
margin-bottom:1.1em
}
ul ul,ol ul,ul ol,ol ol {
margin-bottom:1.1em
}
kbd {
padding:.1em .6em;
border:1px solid rgba(63,63,63,0.25);
-webkit-box-shadow:0 1px 0 rgba(63,63,63,0.25);
box-shadow:0 1px 0 rgba(63,63,63,0.25);
font-size:.7em;
font-family:sans-serif;
background-color:#fff;
color:#333;
border-radius:3px;
display:inline-block;
margin:0 .1em;
white-space:nowrap
}
.toc ul {
list-style-type:none;
margin-bottom:15px
}
</style>
<!-- 该css供自定义样式 -->
<link href="../leanote-html.css" rel="stylesheet">
</head>
<body>
<div class="note-container">
<h1 class="title" id="leanote-title">日志监控系统流程图</h1>
<div class="content-html" id="leanote-content"></div>
</div>
<!-- 该js供其它处理 -->
<script src="../leanote-html.js"></script>
</body>
</html>