handsome主题默认右侧广告栏滚动到顶部后是只有文章目录是置顶的,而广告栏会被滚动出可视范围,只需要在主题设置里面加一些js代码即可实现广告栏与目录同时置顶。
本文转载自网络,如若侵权,联系我

自定义JS部分

如果没开启Pjax
首先需要在主题设置的开发者设置 - 自定义JavaScript中加入如下代码:

    // 固定广告
    var sidebar = $('#a_d_sidebar'),tagToc = $('#tag_toc'), ost;
    sidebar.attr('otop', sidebar.offset().top);
    $(window).scroll(function () {
      ost = (document.body.scrollTop || document.documentElement.scrollTop) - 10;
      if (ost >= parseInt(sidebar.attr('otop'))) {
        tagToc.addClass('fixed-me');
        if (sidebar.css('position') != 'fixed' && document.body.clientWidth >= 992) {
          sidebar.css({"position": 'fixed', "top": "50px" });
          tagToc.css({"position": 'fixed', "top": "330px" });
        } else if (document.body.clientWidth < 992) {
          sidebar.css({"position": 'static' });
          tagToc.css({"position": 'static' });
          tagToc.removeClass('fixed-me');
        }
    
      } else if (sidebar.css('position') != 'static') {
        sidebar.css({"position": 'static' });
        tagToc.css({"position": 'static' });
      }
    });

加入这部分代码后,刷新页面然后上下滚动就能看到广告栏会自动置顶了

如果开启了Pjax
如果开启了主题的pjax功能的话,你会发现上面的代码设置后,虽然每次手动刷新后确实广告能固定了,不过如果是无刷新切换到其他页面,广告还是会滚动到可视范围外,因为pjax并不会重新执行上面的代码,我们需要同时在主题设置的开发者设置 - 自定义 JavaScript和PJAX - PJAX回调函数中都加入如下代码

    // 固定广告
    var sidebar = $('#a_d_sidebar'),tagToc = $('#tag_toc'), ost;
    sidebar.attr('otop', sidebar.offset().top);
    $(window).scroll(function () {
      ost = (document.body.scrollTop || document.documentElement.scrollTop) - 10;
      if (ost >= parseInt(sidebar.attr('otop'))) {
        tagToc.addClass('fixed-me');
        if (sidebar.css('position') != 'fixed' && document.body.clientWidth >= 992) {
          sidebar.css({"position": 'fixed', "top": "50px" });
          tagToc.css({"position": 'fixed', "top": "330px" });
        } else if (document.body.clientWidth < 992) {
          sidebar.css({"position": 'static' });
          tagToc.css({"position": 'static' });
          tagToc.removeClass('fixed-me');
        }
    
      } else if (sidebar.css('position') != 'static') {
        sidebar.css({"position": 'static' });
        tagToc.css({"position": 'static' });
      }
    });

自定义CSS部分

无论开没开PJAX,都请在主题设置的开发者设置 - 自定义CSS中加入如下代码:

    .fixed-me .tags{
        width: 199px;
        overflow: hidden;
    }
    
    .fixed-me #toc{
        width: 199px;
        max-height: 700px;
        overflow-x: hidden;
        position: relative;
    }

VersionRelease DateBuild Number
Horizon View Manager 7.92019-07-0213938590
Horizon View Composer 7.92019-07-0212438492
Horizon View Manager 7.82019-03-1412599301
Horizon View Composer 7.82019-03-1412438492
Horizon View Manager 7.72018-12-1311054235
Horizon View Composer 7.72018-12-1311038293
Horizon View Manager 7.62018-09-069539447
Horizon View Composer 7.62018-09-069491669
Horizon View Manager 7.5.2 (ESB Release)2019-03-0812417634
Horizon View Composer 7.5.2 (ESB Release)2019-03-0811823484
Horizon View Manager 7.5.12018-07-199122465
Horizon View Composer 7.5.12018-07-198971623
Horizon View Manager 7.52018-05-298583568
Horizon View Composer 7.52018-05-298463271
Horizon View Manager 7.42018-01-047400497
Horizon View Composer 7.42018-01-047312595
Horizon View Manager 7.3.32018-10-0410250208
Horizon View Composer 7.3.32018-10-0410250211
Horizon View Manager 7.3.22017-11-207161118
Horizon View Composer 7.3.22017-11-207161120
Horizon View Manager 7.3.12017-10-036760913
Horizon View Composer 7.3.12017-10-036744335
Horizon View Manager 7.2 ( View 7.x)2017-06-205735293
Horizon View Composer 7.22017-06-205652634
Horizon View Manager 7.12017-03-165170113
Horizon View Composer 7.12017-03-165129466
Horizon View Manager 7.0.32016-12-084709455
Horizon View Composer 7.0.32016-12-084698622
Horizon View Manager 7.0.22016-09-154356666
Horizon View Composer 7.0.22016-09-154350300
Horizon View Manager 7.0.12016-06-163988955
Horizon View Composer 7.0.12016-06-163978853
Horizon View Manager 7.02016-03-223633490
Horizon View Composer 7.02016-03-223613429
Horizon View Manager 6.2.92019-06-1113695252
Horizon View Composer 6.2.92019-06-1112619387
Horizon View Manager 6.2.82019-03-1412619382
Horizon View Composer 6.2.82019-03-1412619387
Horizon View Manager 6.2.32016-07-214126346
Horizon View Composer 6.2.32016-07-214123264
Horizon View Manager 6.2.22016-02-043508079
Horizon View Composer 6.2.22016-02-043505505
Horizon View Manager 6.2.12015-12-083284346
Horizon View Composer 6.2.12015-12-083284360
Horizon View Manager 6.2.02015-09-033005368
Horizon View Composer 6.2.02015-09-033001314
Horizon View Manager 6.1.12015-06-042769403
Horizon View Composer 6.1.12015-06-042768165
Horizon View Manager 6.1.02015-03-122509221
Horizon View Composer 6.1.02015-03-122506641
View Manager 6.0.12014-09-092088845
View Composer 6.0.12014-09-092078421
View Manager 6.0 (View 6.x)2014-06-191884746
View Composer 6.0 (View 6.x)2014-06-191884350
View Manager 5.3 (View 5.x)2014-01-281427931
View Composer 5.32014-01-281427647
View Manager 5.22013-02-05987719
View Composer 5.22013-02-05983460
View Manager 5.1.22012-12-13928164
View Manager 5.1.12012-08-13799444
View Manager 5.12012-05-02704644
View Composer 3.02012-04-20691993
View Manager 5.0.12012-03-02640055
View Manager 5.0 (View 5.x)2011-09-14481677
View Composer 2.7 (View 5.x)2011-09-14481620
View Manager 4.6.1 (View 4.x)2012-03-02640196
View Manager 4.62011-02-24366101
View Composer 2.62011-02-24349155
View Manager 4.52010-09-10293049
View Composer 2.52010-09-10291081
View Manager 4.0.22010-08-30294291
View Manager 4.0.12010-02-10233023
View Manager 4.0 (View 4.x)2009-11-18210939
View Composer 2.0 (View 4.x)2009-11-18210930

SFF-8643:Internal Mini SAS HD 4i/8i

SFF-8643是最新的HD MiniSAS连接器设计,用于实现HD SAS内部互连解决方案。
SFF-8643是一款36针“高密度SAS”连接器,采用通常用于内部连接的塑料体。典型应用是SAS HBA与SAS驱动器之间的INTERNAL SAS链路。
SFF-8643符合最新的SAS 3.0规范,并支持12Gb / s数据传输协议
SFF-8643的HD MiniSAS外部对应产品是SFF-8644,它也兼容SAS 3.0,并且还支持12Gb / s SAS数据传输速度
SFF-8643和SFF-8644都可以支持最多4端口(4通道)的SAS数据。

96665-wkwvbk5ore9.png

SFF-8644:External Mini SAS HD 4x / 8x

SFF-8644是最新的HD MiniSAS连接器设计,用于实现HD SAS外部互连解决方案。
SFF-8644是一款36针“高密度SAS”连接器,采用与屏蔽外部连接兼容的金属外壳。典型应用是SAS HBA与SAS驱动器子系统之间的SAS链路。
SFF-8644符合最新的SAS 3.0规范,并支持12Gb / s数据传输协议
SFF-8644的HD MiniSAS内部对应产品是SFF-8643,它也兼容SAS 3.0,并且还支持12Gb / s SAS数据传输速度。
SFF-8644和SFF-8643都可以支持最多4端口(4通道)的SAS数据。

90183-6e90v5mnbej.png

这些较新的SFF-8644和SFF-8643 HD SAS连接器接口基本上取代了旧的SFF-8088外部和SFF-8087内部SAS接口。

SFF-8087:Internal Mini SAS 4i

SFF-8087 Mini-SAS连接器专为实现Mini SAS内部互连解决方案而设计。
SFF-8087是一款36针“ Mini SAS ”连接器,采用兼容内部连接的塑料锁定接口。典型应用是SAS HBA与SAS驱动器子系统之间的SAS链路。
SFF-8087符合最新的6Gb / s Mini-SAS 2.0规范,支持6Gb / s数据传输协议
SFF-8087的Mini-SAS外部对应产品是SFF-8088,它也兼容Mini-SAS 2.0,并且还支持6Gb / s SAS数据传输速度。
SFF-8087和SFF-8088均可支持最多4端口(4通道)的SAS数据。

93889-xp5wfstgtj8.png

SFF-8088:External Mini SAS 4x

SFF-8088 Mini-SAS连接器专为实现Mini SAS外部互连解决方案而设计。
SFF-8088是一款26针“ Mini SAS ”连接器,采用与屏蔽外部连接兼容的金属外壳。典型应用是SAS HBA与SAS驱动器子系统之间的SAS链路。
SFF-8088符合最新的6Gb / s Mini-SAS 2.0规范,支持6Gb / s数据传输协议。
SFF-8088的Mini-SAS内部对应产品是SFF-8087,它也兼容Mini-SAS 2.0,并且还支持6Gb / s SAS数据传输速度。
SFF-8088和SFF-8087均可支持最多4端口(4通道)的SAS数据。

02752-62dtmu2t63e.png

SFF-8639(现称'U.2')

SFF-8639是最新的连接器设计,用于连接MultiLink SAS驱动器或PCIe驱动器(包括硬盘驱动器和SSD驱动器)。它最近被SSD小型工具组重新命名为“U.2”。
SFF-8639是SFF-8680的修订版,它是一个29针2通道SAS驱动器接口。SFF-8639 U.2是一款68针驱动器接口连接器,具有更高的信号质量,可支持12Gb / s SAS和Gen 3 x4 PCIe或PCI Express NVMe。
SFF-8639 / U.2连接器可以集成到多个驱动器的pcb“对接底板”上,也可以集成到单个驱动器“T-Card”适配器上。
SFF-8639 U.2连接器共有6条高速信号路径,但SAS和PCIe规格在任何时候都只能使用多达4条通道。
它符合最新的12Gb / s SAS 3.0规范以及x4 Gen3 PCIe和SSD Form Factor V 1.0。

05070-te5u99akbzd.png

SFF-8680

SFF-8680是最新的连接器设计,用于连接SAS驱动器 - SAS硬盘和SAS SSD驱动器。
SFF-8680是一个29针连接器,带有塑料主体,配置有15个引脚,支持驱动器的电源要求,以及(2)7组引脚,用于传输SAS数据信号。
SFF-8680支持2个SAS端口(通道)与驱动器之间的连接。
SFF-8680可以集成到用于多个驱动器的pcb“对接底板”上,也可以集成到单个驱动器“T-Card”适配器上。
SFF-8680符合最新的SAS 3.0规范,并支持12Gb / s数据传输协议。
这种较新的SFF-8680驱动器接口连接器接口基本上取代了旧的SFF-8482驱动器接口连接器。

66990-nk4vt2btzo.png

SFF-8482

SFF-8482是一种连接器设计,用于连接SAS驱动器,SAS硬盘驱动器和SAS SSD驱动器的连接。
SFF-8482是一个29针连接器,带有塑料主体,配置有15个引脚,可支持驱动器的电源要求;(2)7组引脚,用于传输SAS数据信号。
SFF-8482支持2个SAS端口(通道)与驱动器之间的连接。
SFF-8482可以集成到多个驱动器的pcb“对接”背板上,安装在单驱动器“T-Card”适配器上。

94756-7t6gi3mbwo.png

平时在Linux下映射存储,都是映射哪台就给哪台插线,然后在存储端扫描WWPN,简单粗暴,没技术含量。当然,光交下也可以看。

1,查看当前卡的品牌,常用的卡有两种,Emulex和Qlogic。

lspci |grep -i fibre

76728-7o51m46f8vi.png

2,查看HBA卡的驱动版本

emulex:
modinfo lpfc | grep version
qlogic:
modinfo qla2xxx | grep version

xxx是qlogic hba卡的型号

97462-q2k5m98acyg.png

3,查看HBA卡的WWPN

more /sys/class/fc_host/host*/port_name

01241-focqfvjsnc5.png

Ubuntu的虚拟桌面配置也很简单,根据步骤肯定会成功。以下基于horizon7.8 ubuntu18.04.2。

如果需要配置CentOS的桌面,参考这里 Horizon系列之安装配置CentOS7虚拟桌面

一,配置虚拟机模板

1,在线安装open vmtools

apt-get install open-vm-tools-desktop

34485-cu8eqs1ojit.png

2,安装ssh服务端,ubuntu默认自带ssh客户端,服务端需要自己安装

apt-get install openssh-server

06518-fkebqjfmsaa.png

3,卸载自带的vi编辑器,默认自带的编辑器是个精简版,非常难用,用过的都知道

apt-get remove vim-common

24653-zcew0y972pp.png

4,安装完整版本的vi编辑器

apt-get install vim

73277-4quvdxhh0b.png

5,安装必需的依赖包,

apt-get install python python-dbus python-gobject lightdm

00193-r73w4zt6scs.png

在安装过程中选择 lightdm 作为显示管理器

67400-h28aawxzffc.png

6,安装 PowerBroker Identity Services Open (PBISO) 身份验证工具

打开https://github.com/BeyondTrust/pbis-open/releases,找到以linux.x86_64.deb.sh结尾的文件,下载并安装。

wget https://github.com/BeyondTrust/pbis-open/releases/download/9.0.1/pbis-open-9.0.1.525.linux.x86_64.deb.sh
chmod +x pbis-open-9.0.1.525.linux.x86_64.deb.sh
./pbis-open-9.0.1.525.linux.x86_64.deb.sh

88634-8fd9qe00dhn.png

7,加域

[scode type="blue"]下面关键内容仅对打赏用户开放,之前通过微信打赏的用户,微信联系我获取密码,谢谢![/scode]

[ppblock ex="原创不易,打赏后即可获取文章密码!"]

执行下面的命令加域

domainjoin-cli join lzuvdi.com administrator

35669-h8mfex03fbt.png

查看加域结果

60420-io1skur3f0n.png

8,配置域环境

依次执行下面的命令

/opt/pbis/bin/config UserDomainPrefix lzuvdi 
/opt/pbis/bin/config AssumeDefaultDomain true 
/opt/pbis/bin/config LoginShellTemplate /bin/bash 
/opt/pbis/bin/config HomeDirTemplate %H/%U

[scode type="yellow"]备注:lzuvdi 是域名[/scode]

41428-f4tng7a9qpl.png

9,查找用户

id user01
id user02

91263-an4zqzmmagp.png

10,设置域用户权限,user01属于Domain Admins组,user02只属于Domain Users

编辑visudo加入下面一行,使得Domain Admins组有sudo权限

%domain^admins ALL=(ALL) NOPASSWD:ALL

46956-mzikd6yg7e.png

11,测试sudo权限

user01可以正常使用sudo权限,提示user02不在sudo文件中。

57928-sjlqnjzfh9a.png

12,编辑 /etc/pam.d/common-session 文件

session [success=ok default=ignore] pam_lsass.so

重新安装或更新 Horizon Agent for Linux 后,必须重复此步骤

13,编辑 /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf 文件并附加以下行

allow-guest=false
greeter-show-manual-login=true

75153-dcdd6e4vw2o.png

14,上传Linux系统的horizon agent解压并安装,然后重启

./install_viewagent.sh -A yes

59625-qdnr46trgq.png

15,测试域用户登录桌面

85906-mwi8c16ce3k.png

37491-q5wh82zjpbe.png

16,编辑/etc/vmware/viewagent-custom.conf文件

去除SSODesktopType=UseGnomeUbuntu前面的#

66714-959t1ax5a9m.png

17,清理之前登录测试在/home/%D/文件夹下自动创建的用户文件夹,以及horizon agent程序和pbis程序,删除在/var/lib/AccountsService/users/ 下生成的域用户文件

18,创建linux版本的客户机自定义规范,然后克隆ubuntu为模板

二,创建桌面池

选择自动完整桌面池。创建过程选择第18步创建好的客户机规范。

三,测试桌面

1,web登录

99388-5sdh65sjpq5.png

86898-oqxknuuobl.png

2,客户端登录

30056-al3iels12us.png

88246-mvpdve9u6dp.png

[/ppblock]

这几天在测试citrix 的虚拟桌面,服务器资源比较充足,所以我把Delivery Controller 和StoreFront分开建立,并建立了两个,等建立完计算机目录和交付组,登录商店地址,提示如下:

75985-po4ev7fvnfa.png

从头到尾检查一遍配置,没有任何问题,域管理用户我都给了必要的权限,VDA虚拟机也已经是注册状态,并且摘要提示可用,但receiver界面就是提示无桌面。不服输的我把VDA虚拟机又重新安装一遍,重新建立其它模式的单用户单台独立虚拟机的计算机目录,然后再次建立交付组,再次登录,还是没有桌面。我依然不放弃,百度一下,论坛的大神都是让把Delivery Controller、StoreFront安装在一起,我测试了一下,果然可以。然后我重头到尾梳理一遍配置,有一个地方引起了我的注意。

默认的传输类型为HTTPS 端口为443

66355-i5k91i6olyd.png

此时想到,Delivery Controller和StoreFront都没有给安装证书,通过https 互相通信的话,肯定是不授信的。那么就给它个证书

给StoreFront和Delivery Controller申请证书。

1,打开IIS管理器,点击http://localhost,双击进入服务器证书

84217-4bsbie7o7lx.png

2,生成密钥文件

点击右上角的创建证书申请

78565-gw59cnjouo.png

点击下一步,我这里选择2048,因为我的根证书是2048位。

51044-kpr3rizku9e.png

填写名称

80643-48q0o20j4g8.png

3,在线申请证书

打开证书颁发WEB服务界面,点击申请证书

50078-643uxrqcrqc.png

点击高级证书申请

57784-4tqf30kct6d.png

出现以下界面

26867-hyagmwrbz2v.png

打开第1步生成的密钥文件,全选复制

73308-qul51d85fsi.png

然后粘贴,证书模板选择WEB服务器

43486-96pw20656g.png

点击提交,提示颁发成功,选择Base 64 编码,然后点击下载证书

4,下载根证书

重新打开证书颁发WEB服务界面,点击 下载 CA 证书、证书链或 CRL

30019-66uumzpgxp7.png

选择Base 64,然后点击下载CA证书

04262-qc2cnakktcn.png

5,集成证书

打开IIS管理器,点击http://localhost,双击进入服务器证书,点击完成证书申请

78148-ny4d1fasfbp.png

选择申请好的证书,填写好记名称,存储为个人,单击确定。

00465-meifpcfp7ed.png

6,绑定证书

在IIS管理器界面,打开默认web site,点击右上角绑定,然后点击添加,类型选择https,SSL证书选择上一步集成的证书,点击确定。

85714-c0etuqrfv0r.png

然后重启web 服务。

63821-u3xtcvfxxn.png

在Delivery Controller和StoreFront服务器上重复上述步骤,依次绑定证书,

7,安装根证书

分别在Delivery Controller和StoreFront服务器上安装根证书,双击根证书,点击安装证书,选择本地计算机

37691-5gben9rbkp9.png

选择受信任的根证书颁发机构

75717-7qe193ukigk.png

点击下一步,完成,提示导入成功

46111-64p02qfmgho.png

8,测试证书

浏览器中小锁图标是正常的状态,并且证书可信。

30752-fpztfvt6ita.png

9,重新打开citrix receiver界面

15083-k6iee058exk.png

99237-o4o8qxepe08.png

48593-hrq39olvh9.png

一个VDI项目中,客户要求使用Linux系统。Windows的桌面,一路点鼠标下一步,没有什么难度,而Linux,搜遍全网,没有一篇正经文档,当然与我搜索的姿势也有关,参考VMware官方文档,如同嚼蜡。做完Linux桌面,其实发现并没有想象中的那么复杂,只不过步骤繁多,需要耐心。

如果需要做Ubuntu的桌面,参考这里 Horizon系列之安装配置Ubuntu18虚拟桌面

配置linux桌面,最重要的则是加域,horzion支持以下几种方式

1,OpenLDAP 服务器直通身份验证
2,针对 Microsoft Active Directory 的系统安全服务守护进程 (System Security Services Daemon, SSSD)LDAP 身份验证
3,加入 Winbind 域
4,PowerBroker Identity Services Open (PBISO) 身份验证

此文基于winbind加域,horizon 7.8,CentOS 7.6。

一,配置虚拟机模板

1,禁用ipv6,编辑文件/etc/sysctl.conf,添加下面的行:

net.ipv6.conf.all.disable_ipv6 =1
net.ipv6.conf.default.disable_ipv6 =1

保存并退出文件。
执行下面的命令来使设置生效。

sysctl -p

82041-ho7l7k4k07.png

2,禁用virbr0,

ifconfig virbr0 down
brctl delbr virbr0
systemctl disable libvirtd

12887-hce6944p2l5.png

3,禁用NMtool

systemctl stop NetworkManager
systemctl disable NetworkManager

54817-9jwos2cnjad.png

4,更改默认搜索域和DNS

在网卡配置文件加入

DNS1=192.168.80.100
DNS2=192.168.80.200
DOMAIN=lzuvdi.com

重启网络服务

28480-0pxxkr62apwb.png

5,配置yum,安装 winbind、samba 和 Kerberos 软件包,并把smb和winbind 加入开机自启

yum install -y samba samba-winbind krb5-workstation samba-winbind-clients authconfig-gtk
systemctl enable smb
systemctl enable winbind

6,图形界面加域,

authconfig-gtk

70178-fwyrgr15798.png

User Account Database:Winbind
Winbind Domain:LZUVDI
Security Model:ads
Winbind ADS Realm:LZUVDI.COM
Winbind Domain Controllers:ad1.lzuvdi.com,ad2.lzuvdi.com
Template Shell:/bin/bash

Advanced Options 勾选Create home directories on the first login

62628-xw2wzu1m6v7.png

Identiity Authentication 中点击 Join Domain

55867-mz0wnatwnpi.png

选择Save,输入域管理员密码加域,然后点击Apply,重启虚拟机系统。

7,查看加域信息

在域控中打开用户管理器,vdi虚拟机已加入域控

61730-sskvkydw0gh.png

虚拟机上查看域信息

net ads info

04329-82cpl6tih0u.png

新建用户

04553-g9ybtflxoxj.png

查找用户

id user01
id user02

08447-wax93hi8bqa.png

两个账号确实存在,虚拟机成功加域,为什么查找不到用户,换个方式

id user01@lzuvdi
id user02@lzuvdi

67439-puv4jukr2p.png

知道为什么吗?

[scode type="blue"]下面关键内容仅对打赏用户开放,之前通过微信打赏的用户,微信联系我获取密码,谢谢![/scode]

服务器时间同步是一个容易被忽视的问题,我在做虚拟化的时候,一直拿域控做NTP服务器,ESXI加域,主机自动同步时间。在同一环境,部署有些设备需要ntp,填写域控IP,也会同步域控的时间。这样,保证了域成员和域控的时间一致,那么如何保证域成员和Internet的时间一致呢,这时候就要让域控同步外部时间了。关于NTP,一些细分概念相当专业,因个人精力能力有限,不做探究。

ntp源服务器,网上粘来复去的各种域名和IP非常之多,包括国家级和各个高校的NTP服务器,但是能用的没有几个,提供ntp对网络压力和服务器压力非常之大,成千上万的ntp客户端时不时的要和ntp服务器通信一下。我自己也测试了很多ntp服务器。最后觉得,还是微软提供的靠谱。另外,阿里云也提供了外网的ntp服务器,目前来看,还算靠谱,下面配置基于域控可以访问外网的情况。

配置

1,指定域控的外部时间源并同步

w32tm /config /manualpeerlist:"time.windows.com ntp1.aliyun.com" /syncfromflags:manual /reliable:yes /update
net stop w32time
net start w32time
w32tm /resync
w32tm /query /status

至此,域控已经可以同步外网时间了,并且默认自动同步。如果想配置域成员同步策略,在成员所在OU下配置GPO即可。

35125-hekutlqr0t.png

/manualpeerlist表示外部时间源服务器列表,多个服务器之间可用空格分隔
/syncfromflags:manual表示与指定的外部时间源服务器列表中的服务器进行同步
/reliable:yes设置此计算机是一个可靠的时间源。此设置只对域控制器有意义。
/update向时间服务发出配置已更改的通知,使更改生效

域内的客户端想要同主域时间同步,执行下面的命令即可。一般情况下,都会自动同步,无需干预,除非用GPO做了限制。

命令:w32tm /resync /rediscover

2、显示本地时间与目的时间的时间差

w32tm /stripchart /computer:ntp1.aliyun.com /samples:30 /dataonly

3、显示目前服务器指定的外部时间源

w32tm /query /source

目前可用的NTP服务器

time.windows.com
ntp1.aliyun.com
ntp2.aliyun.com
ntp3.aliyun.com
ntp4.aliyun.com
ntp5.aliyun.com
ntp6.aliyun.com
ntp7.aliyun.com

一、Serverless是啥

自从互联网兴起以来,Server就成了网络的核心部件。所以围绕Server的生意圈,也发展得如火如荼。

从最早的电信托管,到虚拟机,到现在的Serverless,形成了几大阵容:

1、IaaS(基础设施即服务:Infrastructure as a Service)
2、PaaS(平台即服务:Platform as a Service)
3、SaaS(软件即服务:Software as a Service)

IaaS是包硬不包软,面对集成商,PaaS是包硬包软不包工,面对开发者,SaaS是全包,面对消费者。

52406-ymk9ax7o2c.png

三大阵营都在不断演进中,互相取长补短,甚至模糊了彼此的界限。

PaaS最新的发展就是:

1、BaaS(后端即服务:Backend as a Service)
2、Faas(函数即服务:Functions as a Service)

这两种架构被称为Severless。

BaaS与FaaS这两种架构被称为Severless,并非对开发者而言,是对服务商而言,没有一直运行的定制服务存在,不占用服务商的计算资源。同共享单车有些类似,是计算机分时租赁方式,按次按时计价。

BaaS并不存放客户代码,只提供通用的逻辑,产品的逻辑都需要在富客户端完成。这些通用的逻辑为所有客户共享,因而不浪费服务商的计算资源,也就可以做到按API调用次数计算费用。

以前叫我们把二层的富客户端都改成三层瘦客户端,现在搞个共享数据库,又叫我们改成富客户端。横竖赚钱。

18576-sv5c1w98bh.png

而FaaS存放客户代码,当访问时,调入相关资源,开始运行,运行完成后,卸载所有开销。
嘶~~~,听起来耳熟。靠,这不就是PHP吗?!

二、Serverless凭啥

看来BaaS和FaaS都是新瓶装旧酒,那么Serverless凭啥流行,又是不是未来?

Facebook 于2013年花费了 8500 万美元收购了主流的BaaS平台 Parse 。由于 Parse 一直以来未能为 Facebook 提供预期的营收,Facebook 决定一年后将其正式关闭,并将其代码开源。Facebook这不差钱的行为,直接为整个行业蒙上了阴影。可以说直接逼死了某些跟风者。

搭个共享数据库赚钱的想法基本破灭后,行业都纷纷压宝FaaS。那么FaaS的前景如何?

虽然FaaS是BaaS的“升级版”,并且与流行的微服务架构相吻合。但是无法改变它有强制所有程序按PHP方式运行这样一个可怕的设定。而这个无奈的设定所解决的是导致先行者AppEngine举步维艰的病根,那就是大量进程占用服务商过多的资源而不怎么赚钱。所以FaaS这个扭曲版AppEngine对于服务商来说是一剂良药,但是未必会是行业的未来。

这些年随着Docker平台的发展,启停一个容器的成本已经接近于启停一个进程。将AppEngine平台上的侦听进程都去掉,用一个统一的WebServer来侦听路由,当访问到来时,启动容器,运行,停止容器。这和PHP的做法一模一样,不过是把PHP.exe换成了Docker容器罢了。同一个思路,换一个环境,马上从落后变成了先进。可以你想像,FaaS是降低成本的利器,也一定会占有一部分低端市场。

但是,PHP也没有像FaaS一样强制要求所有服务达到函数这个级别,一步到位的确有点匪夷所思。函数也非FaaS最好的包装形式,不如像PHP直接对应到一个文件上。在我看来,现有FaaS平台的行为模式,只适合推广PHP,能够与PHP生态很好地对接,而其它语言则有不可调和的矛盾。

看了一下开源框架Fission的源码,想出一个兼容其它语言的方案,以Python语言为例。

要求Flask程序实现2个接口,原有的程序不加任何修改即可在FaaS框架下运行了,/register接口载入所有Route,并返回所有绑定规则,FaaS框架只需要把Route表合并就可以一次性创建所有Route。不必要一条一条调用fission function create与fission route add了。Http 请求来时调用/specialize接口,根据endpoint(即函数名)载入代码,实现FaaS功能。把框架接口开放给程序,能够实现最大的兼容现有框架,如果不放心,可以调用/specialize?endpoint=echo&echo=hello,来验证程序是否支持FaaS平台即可。

rom flask import Flask, request
app = Flask(__name__)
userfunc = None
@app.route('/register', methods=['POST'])
def register():
# 引入所有Routes,并返回所有Rules
from .main import main as main_blueprint
app.register_blueprint(main_blueprint)   
return jsonify(app.url_map._rules_by_endpoint)
@app.route('/specialize', methods=['POST'])
def load():
# 特化载入,只载入单个endpoint
body = request.get_json()
name = body['endpoint']
global userfunc
userfunc = imp.load_source(name)
return ""

三、Serverless有啥

Serverless平台一般分为如下三类:

  1. 公有云Severless平台:

A. AWS Lambda、B. Microsoft Azure Functions、C. Google Cloud Functions、D. Webtask、E. Syncano

  1. 私有云Severless框架:

A. Fission (Kubernetes)、B. Funktion (Kubernetes)、C. Kubeless (Kubernetes)、D. Gestalt (DC/OS)、E. IBM OpenWhisk (Docker)、F. Iron Functions (Docker,Swarm, Kubernetes)

3.Serverless平台的包装框架:

A. Serverless(Node,大多数平台)、B. Apex(Go,AWS)C. Zappa(Python,AWS)、D. Chalice(Python,AWS)E. Claudia.js(Node,AWS)F. Gordon (Python,AWS)

四、Serverless干啥

1、AWS Lambda的包装框架Zappa,可以使用Flask,Django等框架。

功能看下图可知:

569097-20171201153431789-1840570181.gif

2、Fission是一个Serverless开源框架。可以看看它都干了啥。

Fission是基于Kubernetes的,而Kubernetes是基于Docker的容器集群管理系统。
Kubernetes的内容太丰富,简单说来,实体对象有若干节点(Node)包含若干Pod,Pod又包含若干容器(Container),通过Pod上的标签(Label)组合成服务(Service)。

45635-c4l7b305c5l.png

Master包含如下组件:

1,apiserver:作为kubernetes系统的入口,封装了核心对象的增删改查操作。它维护的REST对象将持久化到etcd。

2,etcd:分布式强一致性的key/value存储

3,scheduler:负责集群的资源调度,为新建的pod分配机器。

4,controller-manager:负责执行各种控制器,目前有两类:

a,endpoint-controller:定期关联service和pod(关联信息由endpoint对象维护),保证service到pod的映射总是最新的。

b,replication-controller:定期关联replicationController和pod,保证replicationController定义的复制数量与实际运行pod的数量总是一致的。

Slave Node(称为Minion)包含如下组件:

1,kubelet:负责管控docker容器,如启动/停止、监控运行状态等。它会定期从etcd获取分配到本机的pod,并根据pod信息启动或停止相应的容器。同时,它也会接收apiserver的HTTP请求,汇报pod的运行状态。

2,proxy:负责为pod提供代理。它会定期从etcd获取所有的service,并根据service信息创建代理。当某个客户pod要访问其他pod时,访问请求会经过本机proxy做转发。

3,docker:docker容器引擎

Fission简单说来,就是一个Web应用,Go语言编写,使用gorilla框架。不过它的模板引擎替换成了Kubernetes中的Service。使用k8s.io/client-go/kubernetes接口来操控(k8s就是Kubernetes)。

18296-k250bpd9g4.png

参考文档:

《采用Serverless架构》:http://cloud.51cto.com/art/201703/534748.htm

《Kubernetes初探》:https://blog.csdn.net/zhangjun2915/article/details/40598151

《十分钟带你理解Kubernetes核心概念》http://www.dockone.io/article/932

《Kubernetes权威指南》

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢