RabbitMQ 镜像集群 宕机恢复、负载均衡、跨机房多活
起因:在实际项目开发过程中,需要使用RabbitMQ来实现消息队列的功能,但仅仅实现功能之后并不能对自己满足,既然学一次,就要更深的了解她,吃一吃架构方面的相关内容,提升自己。
RabbitMQ在镜像集群中,机器其实是平行关系,所有的节点都是互相复制的
场景描述:
A是Master
B是Slave
A正常运行,B宕机了,只需要启动B即可,B就会自动加入集群
A和B都宕机了,只要A在B之前启动就可以了
A和B都宕机了,A启动不起来了,即便是B启动了,有可以B直接启动不了啦
B和C都加入了A为Master的集群,这个时候都需要将B和C从A的集群中forget,B和C启动不起来了
RabbitMQv32版本以后提供了一个离线清除集群节点的命令参数,也就是节点无法启动状态下
HAProxy是一款提供高可用的负载均衡器(之前大家都是使用的Nginx居多,upstream反向代理实现负载均衡非常容易),HAProxy可以基于TCP四层(Lvs也是TCP四层的),HTTP七层(Nginx是HTTP七层)的负载均衡应用代理软件,免费高速可靠的一种LBS解决方案
HAProxy的并发连接完全可以支持以万为单位的
Nginx
优点:
1、工作在网络7层之上,可针对http应用做一些分流的策略,如针对域名、目录结构,它的正规规则比HAProxy更为强大和灵活,所以,目前为止广泛流行。
2、Nginx对网络稳定性的依赖非常小,理论上能ping通就能进行负载功能。
3、Nginx安装与配置比较简单,测试也比较方便,基本能把错误日志打印出来。
4、可以承担高负载压力且稳定,硬件不差的情况下一般能支撑几万次的并发量。
5、Nginx可以通过端口检测到服务器内部的故障,如根据服务器处理网页返回的状态码、超时等,并会把返回错误的请求重新提交到另一个节点。
6、不仅仅是优秀的负载均衡器/反向代理软件,同时也是强大的Web应用服务器。可作为静态网页和服务器,在高流量环境中稳定性也很好。
7、可作为中层反向代理使用。
缺点:
1、适应范围较小,仅能支持http、https、Email协议。
2、对后端服务器的健康检查,只支持通过端口检测,不支持url来检测
3、负载均衡策略比较少:轮询、权重、IP_hash、url_hash
HAProxy
优点:
1、HAProxy是支持虚拟主机的,可以工作在4、7层(支持多网段)
2、HAProxy的优点能够补充Nginx的一些缺点,比如支持Session的保持,Cookie的引导;同时支持通过获取指定的url来检测后端服务器的状态。
3、HAProxy跟LVS类似,本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
4、HAProxy支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后端的MySQL节点进行检测和负载均衡。
5、HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种
缺点:
1、不支持POP/SMTP协议
2、不支持SPDY协议
3、不支持HTTP cache功能。现在不少开源的lb项目,都或多或少具备HTTP cache功能。
4、重载配置的功能需要重启进程,虽然也是soft restart,但没有Nginx的reaload更为平滑和友好。
5、多进程模式支持不够好
HAProxy+Keepalived(负载均衡节点的高可用)
将上面的配置文件内容放入 /etc/haproxy/haproxycfg中
启动HAProxy
启用成功后可以到控制台进行验证
通过federation的配置来进行数据通道搭建
这个时候你需要自己定义一个上游节点upstream(166节点),一个下游节点downstream(167节点),federation是单向发送的,相当于消息发送到upstream的一个exchange上,然后转发到downstream的queue上
1、 在下游节点创建一个exchage和一个queue和binding的routingkey,用来进行数据接收
2、 在下游节点建立federation upstream规则和上游节点进行数据同步
3、 进入下游节点的federation status没有任何数据,需要建立策略来保证通道连通
4、 进入下游节点的Policy菜单,Pattern是个正则表达式,这里表示以down开头的exchange和queue都匹配
5、 这个时候看exchange和queue,规则就应用上了
6、 这个时候去federation status看,发现上游连接已经连接上了
7、 这个时候我们先去看上游的overview
8、 再看上游的exchange和queue就已经根据下游配置的upstream和policy规则将exchange和queue创建好了
灰色的这个重定向exchange不能发送消息,如果要发送则在down-exchange上进行发送
9、 我们在上游的down-exchange发送一条消息,进行测试
可以在下游查看这条消息
10、 因为上游及节点只是一个中转,如果上游及诶单也要消息down-exchange里的消息怎么办?
只需要在本地建立一个binding关系就好
不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!
现阶段openwrt官方支持的路由列表:wikiopenwrtorg/toh/start
如果要学习openwrt的话,买些列表中二手的路由器来实践下更容易学习,大部分要升级一下rom芯片和内存芯片,典型配置都是4M、64M。 大家先学习一下,等待小米开放时刻的到来,有备无患……
OpenWrt 可以被描述为一个嵌入式的 Linux 发行版,(主流路由器固件有 dd-wrt,tomato,openwrt三类)而不是试图建立一个单一的、静态的系统。OpenWrt的包管理提供了一个完全可写的文件系统,从应用程序供应商提供的选择和配置,并允许您自定义的设备,以适应任何应用程序。
对于开发人员,OpenWrt 是使用框架来构建应用程序,而无需建立一个完整的固件来支持;对于用户来说,这意味着其拥有完全定制的能力,可以用前所未有的方式使用该设备。
当Linksys释放 WRT54G/GS 的源码后,网上出现了很多不同版本的 Firmware 去增强原有的功能。大多数的 Firmware 都是99%使用 Linksys的源码,只有1%是加上去的,每一种 Firmware 都是针对特定的市场而设计,这样做有2个缺点,第一个是难以集合各版本Firmware的长处,第二个是这版本距离 Linux 正式发行版越来越远。
OpenWrt 选择了另一条路,它从零开始,一点一点的把各软件加入去,使其接近 Linksys 版 Firmware的功能,而OpenWrt 的成功之处是它的文件系统是可写的,开发者无需在每一次修改后重新编译,令它更像一个小型的 Linux 电脑系统。
OpenWrt 项目由 2004 年 1 月开始, 第一个版本是基于 Linksys 提供的 GPL 源码及 uclibc 中的 buildroot 项目, 这个版本称为 “stable” 版, 在网上至今仍有很多项目使用这个版本, 较为有名 Freifunk-Firmware 和 Sip@Home
到了2005年初, 一些新的开发人员加入了这项目, 几个月后他们释出了第一个 “experimental” 版本, 这和以前版本不同的是, 这版本差不多完全舍弃了 Linksys 的 GPL 源码, 使用了 buildroot2 作为核心技术, 将 OpenWrt 完全模块化,OpenWrt 使用 Linux 正式发行的核心源码(2430),加上了一些补丁和网络驱动,开发队伍更为OpenWrt添加了许多免费的工具,可以直接把Image写入 Flash (mtd)里面,设定无线功能和VLAN交换功能,这个版本名为“White Russian”,而10版本于2005年底公布。
OpenWRT是一个高度模块化、高度自动化的嵌入式Linux系统,拥有强大的网络组件和扩展性,常常被用于工控设备、电话、小型机器人、智能家居、路由器以及VOIP设备中。 同时,它还提供了100多个已编译好的软件,而且数量还在不断增加,而 OpenWrt SDK 更简化了开发软件的工序。
OpenWRT不同于其他许多用于路由器的发行版,它是一个从零开始编写的、功能齐全的、容易修改的路由器操作系统。实际上,这意味着您能够使用您想要的功能而不加进其他的累赘,而支持这些功能工作的linux kernel又远比绝大多数发行版来得新。
如果对 Linux 系统有一定的认识, 并想学习或接触嵌入式 Linux 的话, OpenWRT很适合。 而且OpenWRT支持各种处理器架构,无论是对ARM,X86,PowerPC或者MIPS都有很好的支持。 其多达3000多种软件包,囊括从工具链(toolchain),到内核(linux kernel),到软件包(packages),再到根文件系统(rootfs)整个体系,使得用户只需简单的一个make命令即可方便快速地定制一个具有特定功能的嵌入式系统来制作固件。
一般嵌入式 Linux 的开发过程, 无论是 ARM, PowerPC 或 MIPS 的处理器, 都必需经过以下的开发过程:
1、 创建 Linux 交叉编译环境;
2、建立 Bootloader;
3、移植 Linux 内核;
4、建立 Rootfs (根文件系统);
5、安装驱动程序;
6、安装软件;
熟悉这些嵚入式 Linux 的基本开发流程后,不再局限于 MIPS 处理器和无线路由器, 可以尝试在其它处理器, 或者非无线路由器的系统移植嵌入式 Linux, 定制合适自己的应用软件, 并建立一个完整的嵌入式产品。
由于CPU内核体系不同,造成很多应用程序移植到OpenWrt上的时候经常崩溃。
由于ADSL硬件模块的驱动程序没有开放源代码,造成很多ADSL一体无线路由的ADSL模块不能工作而造成功能缺失(RG100A和DB120除外)。
由于OpenWRT并不是官方发布的路由器固件,所以要使用(刷入该固件)有困难,而且其基于Linux,导致OpenWRT的入门门槛较高。
White RussianOpenWRT的初始版本,从2005年7月的White Russian RC1开始发展,一直到2007年1月才发布White Russian 09。
KamikazeOpenWRT的第二个版本,从2007年6月开始发布Kamikaze 706,一直更新到2010年1月的Kamikaze 8092结束。这期间OpenWRT进行了大量改进,并为它的发展打下了坚实的基础。
Backfire2010年03月04日,OpenWrt Backfire 1003 Beta发布,该版本是开源的路由器固件,基于linux,功能强大,支持很多主流的平台和路由器,甚至支持国内的君正jz4740平台,是学习和开发嵌入式,也是工业、 商业应用理想平台。更新方面: brcm-24 更新到 2437 kernel ,other targets 更新到 2630 or 2632 ,arm/mips平台的 gcc 更新到 433 ,powerpc的gcc更新到 443 ,uClibc 更新到 09301 , Broadcom 11g 芯片组的 b43 无线网卡驱动更新到 26 kernel ,支持Atheros 11n ath9k ,支持很多新的ar71xx设备,magicbox归入ppc40x平台 。
2010年03月25日,OpenWrt 发布 Backfire 1003-rc1,支持国内留下的 tp-link最新多款11n的路由器,是不是想让路由器支持万能中继呢,或者增加路由器的多wan口支持呢,更多的这些高端路由才有的功能,或许能 让家用路由轻松具备。
2010年04月07日,OpenWRT放出Backfire 1003正式版。
2010年08月29日OpenWRT放出了Backfire 10031。修正了很多BUG,提高了兼容性。TP-LINK WR841N v2 已经可以正常使用了,包括无线部分和上网部分。 自rc1之后的变动:改进了防DNS重绑定攻击,改进了uhttpd稳定性, Rootfs生成修复(Orion景象),修正了基于BRCM47XX的PCI初始化,添加了rtl8366 vlan 改变的 整合脚本,还原了一般x86镜像 GRUB控制台,提高了ar71xx系列以太网驱动程序性能,添加了ar7240 交换机驱动,一些swconfig 和 交换机驱动的改进,RDC 使用启动加载器支持波特率,允许原生HID 支持 通过添加 kmod-input-hid,6in4:适当的处理了PPPoE连接并且修复了终端隧道更新。
鉴于开源软件在国内的发展态势,目前国内有基于OpenWRT改进而来的OpenWRT-DreamBox。这个版本的OpenWRT集成了了很多常用功能(包括脱机下载等),而通过这个版本的OpenWRT便可以把一个路由器的功能发挥的淋漓尽致。
现在有越来越多的Maker开始折腾OpenWrt,但作为一个Maker新手来讲,在网上还是很难找到一份系统的入门级资料。查找资料很辛苦,而且OpenWrt的门槛相对较高,希望这篇文章所提供的从零开始学OpenWrt编译 + 刷机 + 使用教程能降低新手们的入门难度,当然,编译过程非必须,一般的路由都可找到可用的稳定固件直接刷机。
1、安装Ubuntu(编译需要Linux环境),到其官网下载,版本根据自己所需选择即可。可以选择安装到虚拟机或者物理机,图形化安装而且是中文版,连安装都搞不定的,可以关闭本页面了;(下载地址可以百度,回复贴中会提供)
2、切记不要改动软件源,同时按住Ctrl + Alt + T,调出终端;
3、逐条输入下列命令(及时验证是否安装成功):
[php]
sudo apt-get install g++
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install unzip
sudo apt-get install autoconf
sudo apt-get install gawk
sudo apt-get install make
sudo apt-get install gettext
sudo apt-get install gcc
sudo apt-get install binutils
sudo apt-get install patch
sudo apt-get install bzip2
sudo apt-get install libz-dev
sudo apt-get install asciidoc
sudo apt-get install subversion
sudo apt-get install sphinxsearch
sudo apt-get install libtool
sudo apt-get install sphinx-common
[/php]
至此编译环境搭建完成。
OpenWrt源码分两种,一种是最新但不是最稳定的Trunk开发版,一种是最稳定的Backfire版,建议下载官方源码。下载前先在本地创建文件夹:
[php]
mkdir openwrt
sudo chmod 777 openwrt
cd openwrt
[/php]
选择你想要的版本然后执行下载命令,下载结束会显示版本号:
Trunk版下载命令:
[php]
svn co svn://svnopenwrtorg/openwrt/trunk/
[/php]
Backfire版下载命令:
[php]
svn co svn://svnopenwrtorg/openwrt/branches/backfire/
[/php]
添加软件扩展包,将feedsconfdefault修改为feedsconf:
[php]
cp feedsconfdefault feedsconf
[/php]
更新扩展,安装扩展:
[php]
/scripts/feeds update -a
/scripts/feeds install –a
[/php]
注:如果不是刚下载的源码,为保持代码为最新状态,应定期运行svn update命令更新源码。
测试编译环境:
[php]
make defconfig
到这里就可以开始编译自己的固件了。进入定制界面:
[php]
make menuconfig
[/php]
如果一切正常,会出现一个配置菜单,可以选择要编译的固件平台(芯片类型)、型号,还能选择固件中要添加的功能和组件,配置好后保存并退出菜单即可。
[php]
openwrt-make
[/php]
如果你想修改源码,应该在此步进行,如支持大容量Flash之类的修改,自己上网查到修改什么文件什么地方后,就在ubuntu图形界面上进去找到文件,双击打开文本编辑器修改保存。
[php]
Make
[/php]
或者
[php]
make V=99
[/php]
或者
[php]
make -j V=99
[/php]
make是编译命令,V=99表示输出debug信息,V一定要大写,如果要让CPU全速编译,就加上 -j 参数,第一次编译最好不带-j参数。
编译过程保持联网(会从网上下载一些源码包),所以断网可能造成编译中断,编译所需时间与电脑CPU及网络环境有很大关系,第一次编译时间较久,快则半小时长则2、3个小时,之后的编译所需时间较短。编译完成后会在源码文件目录出现bin文件夹(如trunk/bin/XXXX),如果你手里的路由是原版固件需要刷OpenWrt需要选用XXX-factorybin固件,如果路由已经刷了OpenWrt,选用升级固件XXXX-sysupgradebin升级用的,在升级界面升级即可。进到文件夹找到你需要的固件传出(通过邮箱、网盘、U盘等),开始刷机吧。
要在路由器上使用OpenWrt,首先要将路由器固件刷新为OpenWrt,即相当于OpenWrt 系统的安装,不同型号的路由器的安装方法可能也会不一样,但一般常用的有三种方法:
1Web上传固件更新(就是路由器设置或管理界面的那个固件更新)
2PFTP上传固件更新(最简单的就是HFS了)
具体型号的路由器适用于哪种或哪几种方法,需自行尝试。
要对OpenWrt进行配置,一般有两条途径:
1SSH登录通过命令行控制
2Web登录通过Web界面设置
首次安装OpenWrt后,需要设置密码才可以使用SSH登录,方法是使用telnet登录或者Web登录设置密码。在Windows下面telnet和SSH登录可以使用Putty,在Linux或Mac下可分别使用如下命令:
[php]
ssh –l root 19216811 //Linux
ssh –l root@19216811 //Mac
[/php]
一般指令与常见Linux发行版相同,但是OpenWrt使用自己的包管理器:opkg,使用“opkg –help”查看帮助信息。以下是一些常用操作命令:
[php]
opkg update //更新软件包列表
opkg install //在线安装软件包
opkg remove //移除软件包
[/php]
登录Web管理界面,前提是该OpenWrt系统中要安装了Web界面,一般是Luci,登录方式与普通路由器无异,打开浏览器,输入路由器IP即可进入登录界面,OpenWrt的默认IP是19216811。
到此,OpenWrt的大门已为你敞开。接下来,开始尝试利用OpenWrt实现更多智能应用吧,比如单号多拨榨取运营商带宽、绑定域名远程控制、挂载大容量硬盘、搭建BT下载机、搭建网络摄像头、Samba/DLNA家庭NAS共享、私有云同步、FTP、个人网站/服务器…
需要学会用ssh登录路由器用linux命令查看。
ps 命令查看当前系统运行的进程信息
free 命令查看内存使用和swap挂载情况
ls 查看目录和文件
cd 进入退出目录
vi 查看编辑配置文件
安装命令:
[php]
#opkg update
#opkg install nano
uci set networklanipaddr=[lan ip]
[/php]
使用pppoe设置
Shell代码
[php]
uci set networkwanproto=pppoe //设置wan口类型为pppoe
uci set networkwanusername=[上网帐户]
uci set networkwanpassword=[上网密码] //这两行设置pppoe用户名和密码
[/php]
如果要挂在上级路由下面,就需要进行下面的设置
Shell代码
[php]
uci set networkwanproto=none //关掉wan
uci set networklangateway=[上级路由ip] //网关指向上级路由
uci set networklandns=[上级路由ip] //dns指向上级路由
uci set dhcplanignore=1 //关掉lan的dhcp
[/php]
最后对无线网络进行配置
Shell代码
[php]
uci set wireless@wifi-device[0]disabled=0 //打开无线
uci set wireless@wifi-device[0]txpower=17 //设置功率为17dbm 太高会烧无线模块
uci set wireless@wifi-device[0]channel=6 //设置无线信道为6
uci set wireless@wifi-iface[0]mode=ap //设置无线模式为ap
uci set wireless@wifi-iface[0]ssid=[自己设置SSID] //设置无线SSID
uci set wireless@wifi-iface[0]network=lan //无线链接到lan上
uci set wireless@wifi-iface[0]encryption=psk2 //设置加密为WPA2-PSK
uci set wireless@wifi-iface[0]key=[密码] //设置无线密码
[/php]
提交应用配置
Shell代码
[php]
uci commit //应用
/etc/initd/network restart //重启网络服务
[/php]
安装luci管理界面
Shell代码
[php]
opkg update // 更新软件列表
opkg list-installed // 查看已安装软件
opkg install luci // 安装LUCI
opkg install luci-i18n-chinese // 支持中文
luci-app-firewall - 0100-1
luci-i18n-english - 0100-1
luci-lib-core - 0100-1
luci-lib-ipkg - 0100-1
luci-lib-lmo - 0100-1
luci-lib-nixio - 0100-1
luci-lib-sys - 0100-1
luci-lib-web - 0100-1
luci-mod-admin-core - 0100-1
luci-mod-admin-full - 0100-1
luci-proto-core - 0100-1
luci-proto-ppp - 0100-1
luci-sgi-cgi - 0100-1
luci-theme-base - 0100-1
luci-theme-openwrt - 0100-1
[/php]
即可完成LUCI的安装。
输入以下命令开启支持web服务的uhttpd,并设置其为自启动:
Shell代码
[php]
/etc/initd/uhttpd enable # 开机自启动
/etc/initd/uhttpd start # 启动uhttpd
[/php]
- Wifidog
你可以尝试执行以下命令安装Wifidog:
[php]
opkg update # Optional
opkg install wifidog
[/php]
--sftp安装
[php]
opkg update
opkg install vsftpd openssh-sftp-server
/etc/initd/vsftpd enable
/etc/initd/vsftpd start
[/php]
小米端口转发命令:
通过修改 /etc/config/firewall 这个文件来实现开放自己需要的端口到外网。
[php]
config rule 'httpdwan'
option src 'wan'
option dest_port '8088'
option proto 'tcp'
option target 'ACCEPT'
option name ''''httpd wan accept tcp port 8088''''
[/php]
保存后,执行 /etc/initd/firewall restart 重启防火墙。
SSH工具:
1WINSCP(文件传输到路由器上严重推荐使用)
2putty中文版 中文的使用的难度相对低一点
建一个网站,费用包含4个部分:域名、主机(服务器)、网站制作、网站维护。
域名:
按年付费,普通域名每年100元以内不等。
主机(服务器):
看配置,主要包括:几个CPU核心、内存大小、磁盘容量、带宽、机房线路。有些会提供安全防护方面的增值服务,价格会高些。通常小型企业网站,500元/年以内的虚拟主机足够了;如果访问量大一些,或者、视频及其他对服务器资源消耗较多的中型网站,每年一千到几千元不等,想要访问体验好一些,还要搭配对象存储、CDN等分布式产品,价格再高一些;至于大型网站就看具体需求了,几十万每年都有可能的。
网站制作费用:看建站方式、功能多寡等。
1、自己建。自己学习用开源建站系统制作网站,就不需要网站制作费用了。开源的建站系统有不少,如:适合制作企业网站的有wordpress、DEDECMS、PHPCMS、帝国CMS;适合制作商城的ECshop;适合制作论坛社区的DISCUZ!等。这些开源建站系统通常都比较大而全,能实现各种各样的功能。当然,这种方式需要一定的技术基础和学习成本。
2、智能云建站。相比于第1点中提到的开源建站系统,智能云建站的最大特点是可视化拖拽编辑,像做PPT一样,零技术基础的人也能轻易上手。通常按功能组合划分几个不同版本,比如“知九科技”的智能云建站分基础版、标准版、营销版三个版本,价格在880~2880元之间不等,3000多套精美模板,一键替换,还配套赠送域名和主机,不需要另外购买。如果不想自己动手,也提供代建服务,比较便宜。详细价格参考:智能云建站价格。
3、模板建站。按功能、模板精美度、是否提供售后等差异,价格通常在2000~10000元不等。
4、定制建站。因需求而异,比如一般企业网站,价格在5000~20000元不等;商城型网站价格在20000~十几万不等。功能越多、页面数量越多、样式版本越多(在不同尺寸设备屏幕达到最佳显示效果)、兼容性要求越高,价格就越高。如果对这些不太懂,可以去“建站监理网”咨询下,是一个免费的第三方网站建设监理平台,好像不定期还有送服务器的活动。
网站维护费用
1、如果你能用开源建站系统自己制作网站,那一般的网站维护自己都能完成了,也就不需要额外的维护费用了。
2、如果是使用智能云建站,一般的维护自己就能轻易完成,系统和服务器方面的维护都是免费提供的,所以也是0维护费用。
3、如果是模板建站或者定制建站。定制建站通常提供一年的免费维护,模板建站不确定。不管是定制建站还是模板建站,免费维护期外的维护费用通常是该网站定制费用的15%~25%之间。
就以上这些,综合费用按照自己的需求去加总一下。
可能是手机系统不兼容的,你可以试着换其他手机试试。
BitTorrent Sync可在台式机,笔记本电脑,智能手机,平板电脑和网络连接的外围设备之间提供安全的对等共享。 通过消除中央存储库,Sync可以增强对数据的控制。 通过频繁使用局域网进行文件同步,Sync可以提供更快的性能,最高16倍。
为了共享文件,我们使用了开源的BitTorrent服务器。 最终,YouTube家伙在商业上取得了更多的成功。在Sync中,很高兴看到我们都可以利用的BitTorrent商业应用程序。实际上,我一直想知道为什么没人在BitTorrent上建立点对点播客同步服务。 微软最新的Windows 10版本将点对点技术用于其应用程序商店和更新。
同步是跨平台和设备镜像自己的内容或在团队之间共享大文件的理想选择。 同步在您的快速本地网络上运行,并且仅在必要时使用网络。Dropbox等服务提供有限的免费存储空间,监视状态可能会访问它们。 它们也是黑客的明显目标。 Sync使用分布式加密安全性将数据存储在您的设备上,从而更难以妥协。
我们运行着一些全球最大的互联网的营运,因此我们对可靠性和稳定性非常重视,是我们的第一要务。为此,我们只使用Linux来支撑顾客的系统。但是,我们应该使用哪一个Linux的发行版?答案是,CentOS。 为什么呢?\x0d\\x0d\作为一个庞大的系统运营商,在很长的一段时间里,我们需要在多种大型系统中找到一个可靠的,可预测的系统,我们需要从世界上最强大的软件供应商和开源项目中获得强有力的支持。对于那些最常用的系统,我们需要文档,工具和全球性资源。\x0d\\x0d\正因如此,RedHat / CentOS系列发行版正是我们的选择。他们能够满足以上所有需求,而且问题相对较少、长期稳定,这使得我们能够为成千上万的运行了不同配置、服务和应用的系统提供世界级的维护。\x0d\\x0d\RedHat’s Enterprise Linux \x0d\(RHEL)是黄金标准的企业发行版。它每五年左右更新一次,在系统的稳定性,前瞻性和安全性上有着极大的优势。每当新的主版本发行后,比如 \x0d\5x亦或最近的6x,所有版本和代码都将保留不变,只有安全问题或是主要的bug,例如后门,端口之类的问题,会通过发布新的子版本来修复。\x0d\\x0d\CentOS是RHEL发行版对应的开源版本,通常在RedHat的发布后就会很快发行。我们使用CentOS的原因在于RHEL发行版的标准支持服务费用非常高,大约每台服务器800美元左右,对于我们很多拥有数十台甚至上百台服务器的用户来说,这是必须要控制的成本。\x0d\\x0d\RHEL/CentOS系统有两个潜在的问题。\x0d\\x0d\首先,一旦确定了主版本,,除了安全问题和严重故障会被修复以外,其他内容将不会做任何改变。这虽然对稳定性有\x0d\好处,但是对许多服务不利。比如MySQL和PHP服务,它们在这五年的CentOS/RHEL主版本发布周期中会进行繁重的开发和大量的修改。例\x0d\如,MySQL50 是当前RHEL/CentOS主版本所默认使用的版本,但是当前MySQL已经更新到51和55版本了。\x0d\\x0d\幸运的是,这个问题被Yum软件包管理器轻易地解决了。如此以来,那些主要的软件,例如当前RHEL/CentOS中实际的组件,包括内核和所有工\x0d\具等仍然来自发行版, 但是那些附加的软件,例如Nginx,Apache,PHP,Java和MySQL等等来自更新的软件源例如Fedora; \x0d\或者直接从开发商获取更新的版本例如MySQL。 在我们这里,我们有自己专用的安装镜像来全自动的处理所有这些事情。\x0d\\x0d\其次,CentOS的发行会滞后于RedHat的发行,包括关键的补丁和修复。这在RHEL 6x的发行周期中尤为显著。但是根据我们的经验,这没什么好担心的,对我们来说永远不会成为问题。\x0d\\x0d\很多人询问我们为什么不用基于Debian的系统,例如Debian或者Ubuntu服务器。如果在别无选择的情况下,我们的确会支持这个建议,但是根据我们的经验来看,这些系统并不如RHEL/CentOS来的稳定和可靠。\x0d\\x0d\我们认为,这在某种程度上是由于他们过快的发展和各个版本、组合之间较少的测试且不成熟所导致的。然而尽管他们非常流行,但是主要的服务商和项目都\x0d\仍然首选RHEL/CentOS系统,因为这样他们就可以为企业顾客提供服务,(对Oracle和MySQL更是如此)。除此之外,基于Debian的系统有许多内核和稳定性问题,尤其是在我们的云计算服务中。\x0d\\x0d\对我们而言,唯一使用Debian/Ubuntu的原因是:\x0d\\x0d\“它们能够为一个系统提供必要的特殊服务时,尤其是当一些驱动程序或者一些IO 子系统需要一种新的内核的时候”。例如,ext4 文件系统或在最近的内核中日志的改变等;现在,所有这一切都包含在了RHEL/CentOS6x中。\x0d\\x0d\当然,多数Linux开发者都使用的是Ubuntu的桌面版,而且可以理解的是,他们更倾向在开发生产时使用相同的系统,并且还能使用很多有趣的工具。但总体上来说,我们依然认为RHEL/CentOS是一个更优越的部署平台,并且已经有十多个客户成功地转向使用CentOS 作为生产环境并且没有任何问题,但这仍然是艰巨的任务。\x0d\\x0d\总的来说,你将更乐于看到一个良好管理的CentOS 系统。我们有成千上万台服务器使用CentOS平台,而每年平均只有一台服务器崩溃。我们也很难想象它竟如此罕见,所以,挑一个优秀、迅捷、可靠的平台吧!
1 拉取镜像
sudo docker pull indexalaudacn/kiwenlau/hadoop-master:010 sudo docker pull indexalaudacn/kiwenlau/hadoop-slave:010 sudo docker pull indexalaudacn/kiwenlau/hadoop-base:010 sudo docker pull indexalaudacn/kiwenlau/serf-dnsmasq:010
3~5分钟OK~也可以直接从我的DokcerHub仓库中拉取镜像,这样就可以跳过第2步:
sudo docker pull kiwenlau/hadoop-master:010 sudo docker pull kiwenlau/hadoop-slave:010 sudo docker pull kiwenlau/hadoop-base:010 sudo docker pull kiwenlau/serf-dnsmasq:010
查看下载的镜像:
sudo docker images
运行结果:
其中hadoop-base镜像是基于serf-dnsmasq镜像的,hadoop-slave镜像和hadoop-master镜像都是基于hadoop-base镜像。所以其实4个镜像一共也就7774MB。
2 修改镜像tag
sudo docker tag d63869855c03 kiwenlau/hadoop-slave:010 sudo docker tag 7c9d32ede450 kiwenlau/hadoop-master:010 sudo docker tag 5571bd5de58e kiwenlau/hadoop-base:010 sudo docker tag 09ed89c24ee8 kiwenlau/serf-dnsmasq:010
查看修改tag后镜像:
sudo docker images
运行结果:
之所以要修改镜像,是因为我默认是将镜像上传到Dockerhub, 因此Dokerfile以及shell脚本中得镜像名称都是没有alauada前缀的,sorry for this不过改tag还是很快滴。若直接下载我在DockerHub中的镜像,自然就不需要修改tag不过Alauda镜像下载速度很快的哈~
3下载源代码
git clone https://githubcom/kiwenlau/hadoop-cluster-docker
为了防止GitHub被XX,我把代码导入到了开源中国的Git仓库:
git clone http://gitoschinanet/kiwenlau/hadoop-cluster-docker
4 运行容器
cd hadoop-cluster-docker /start-containersh
运行结果:
start master container start slave1 container start slave2 container root@master:~#
一共开启了3个容器,1个master, 2个slave。开启容器后就进入了master容器root用户的根目录(/root)。
查看master的root用户家目录的文件:
ls
运行结果:
hdfs run-wordcountsh serf_log start-hadoopsh start-ssh-serfsh
start-hadoopsh是开启hadoop的shell脚本,run-wordcountsh是运行wordcount的shell脚本,可以测试镜像是否正常工作。
5测试容器是否正常启动(此时已进入master容器)
查看hadoop集群成员:
serf members
运行结果:
masterkiwenlaucom 17217065:7946 alive slave1kiwenlaucom 17217066:7946 alive slave2kiwenlaucom 17217067:7946 alive
若结果缺少节点,可以稍等片刻,再执行“serf members”命令。因为serf agent需要时间发现所有节点。
测试ssh:
ssh slave2kiwenlaucom
运行结果:
Warning: Permanently added 'slave2kiwenlaucom,17217067' (ECDSA) to the list of known hosts Welcome to Ubuntu 1504 (GNU/Linux 3130-53-generic x86_64) Documentation: https://helpubuntucom/ The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc//copyright Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law root@slave2:~#
退出slave2:
exit
运行结果:
logout Connection to slave2kiwenlaucom closed
若ssh失败,请稍等片刻再测试,因为dnsmasq的dns服务器启动需要时间。测试成功后,就可以开启Hadoop集群了!其实你也可以不进行测试,开启容器后耐心等待一分钟即可!
6 开启Hadoop
/start-hadoopsh
上一步ssh到slave2之后,请记得回到master啊!运行结果太多,忽略,Hadoop的启动速度取决于机器性能
7 运行wordcount
/run-wordcountsh
运行结果:
input file1txt: Hello Hadoop input file2txt: Hello Docker wordcount output: Docker 1 Hadoop 1 Hello 2
wordcount的执行速度取决于机器性能
0条评论