VMWARE ESXI 6.7 基础内容

Xen 已经被越来越多的主流厂商抛弃了,因此我也开始全面拥抱esxi 和 kvm,本篇文章主要介绍esxi 使用方面的一些问题, 目前esi 的最新版是 esxi 6.7 u3(update 3)

关于esxi 6.7 的基本安装和配置,可以参见这篇文章,写的是非常的详细

https://www.experts-exchange.com/articles/33122/HOW-TO-Install-and-Configure-VMware-vSphere-Hypervisor-6-7-ESXi-6-7.html

连接到VMware vSphere Hypervisor 6.7:

其实自从esxi 6.5 开始,就可以使用任何浏览器使用Vmware Host Client来说管理, VMware Host Client 是基于HTML5的

当ESXi 6.7 完全启动以后,上面的画面就会出现,这个叫做Direct Console User Interface (DCUI)

在ESXi 6.5 以前,主要使用基于C#的VMware vSphere Client 来管理,但是从6.5开始, VMware 抛弃了vSphere Client,主要是用基于HTML5的 VMware Host Client 6.7,一个浏览器就可以满足我们的需求

你可以直接访问屏幕上的IP来直接访问Host Client,但是我们更建议使用FQDN来访问Host Client(一定要做好FQDN的A记录)

通过浏览器连接上Host Client 以后,屏幕上就会出现以下画面

我们注意到ESXi host 没有persistent storage, 如果我们要存储virtual machines(Guests or VMs), VM必须被存储在ESXi host 的datastore 上,类似于windows 的NTFS文件系统, VMware vSphere Hypervisor ESXi 的文件系统叫做VMFS(Virtual Machine File System), VMFS有三个版本,VMFS-3 对应vSphere 3.x 和4.x, VMFS-5 对应于vSphere 5.x 和6.0,VMFS-6 对应于vSphere 6.5和6.7

如果系统没有任何datastore,我们需要点击菜单上的Storage -> New datastore 来创建一个,VMware 的程序做的非常好,简单明了就不多说了. 需要注意的是,只有没有被分区的磁盘或者已经分过区的LVM 或者LUN 才可以被创建成VMFS.

一个tip, 最好创建比较小的disks 或者LUN,因为扩展他们很容易,但是shrink缩小disks 或者LUN 确比较难

上传VM系统的ISO到datastore:

如果本地网速够快,可以使用winscp 或者Veeam Free backup版本: https://www.veeam.com/virtual-machine-backup-solution-free.html

为了方便我们今后做管理,可以在datastore上新建一个文件夹,通过Host Client 这个很简单就可以完成,就不多说了,比如说在datastore1 下面建立一个文件夹 isos

同时单击一下datastore1 的名字,就可以看到他的属性,属性里面包含着这个datastore1 的位置,如下图所示:

可以看到datastore1 位于/vmfs/volumes/XXXXXXXX

检查文件md5,就需要Esxi 打开SSH access,登录上去用传统的shell commands 来检查

打开SSH access 的步骤:

1) 点击左边菜单中的Host

2)单击屏幕右上方的Actions,在下拉列表中, enable secure shell 和 enable console shell

 

 

XenServer 网络配置

从Xenserver 5开始用,到现在都是Xenserver 7.6了,速度真是快。

相应时代的变迁,我也需要从XEN 转移到KVM了,在此记录一下XenServer 的网络配置

Xenserver 默认的network stack 就是vswitch,可以使用如下命令查看network stack

xe host-list params=software-version

在output 中, 查看network_backend, 一般有两个结果, openvswitch 或者 bridge, 默认是openvswitch

bridge 是Linux network stack,如果我们想改回linux network stack, 可以使用如下命令:

xe-switch-network-backend bridge

PIF  represents a physical NIC

VIF represents a virtual NIC on a VM

network is a virtual Ethernet switch on a xenserver host

 

discuz 使用自定义的css

默认default模板都会有module.css 、common.css 2个全局样式表,如果是使用discuz默认default模板,并且只是想修改默认模板中的一些css,那么直接加载其扩展CSS文件中重写就行了!

扩展css文件命名格式:
extend_module.css
extend_common.css

路径为/template/default/common

需要注意的是, extend_common.css 可以直接添加自己想要的css

但是extend_module.css需要 注意他的语法,可以直接参见module.css

MYSQL Error 2061

在phpmyadmin中更新password 时,选错了auth 方式,没有选mysql-native-password, 选了一个sha256 什么的。。再用root登录,就立马出现了 error 2061

后来google 了好久,才发现在mysql 5.X 中,默认的auth 方式是mysql-native-password方式,在mysql 8 中一般会选用sha256什么的。。

现在问题的关键是root 无法登陆,这是因为root 的auth 方式被更改为了 sha256-password 的方式。 知道了问题的原因,解决起来就好说了

解决步骤:

1) 关闭mysql 服务

service mysql stop

2) start mysql without password auth

mysqld_safe --skip-grant-tables &

3) 重启mysql 服务

service mysql start

4)用root 登录

mysql -uroot -p

5) 更新root 的密码和auth 方式

mysql 5.7.5 及以前

mysql> use mysql;
mysql> update user set password=PASSWORD("NEW-ROOT-PASSWORD"), plugin="mysql_native_password" where User='root';
mysql> flush privileges;
mysql> quit

6)关闭mysql 服务

service mysql stop

7) 启动mysql 服务

service mysql start

 

 

 

discuz x3.2升级到x3.4并且开启全站SSL

discuz X从3.2升级到3.4很简单,直接按照官网的文档就可以了,主要问题升级上来的网站开启SSL会出现某些问题

首先,开启SSL的话,需要再后台把能改成https的地方全部改成https,这样对于新站就是全站SSL了

其次,对于升级上来的网站,会发现楼层点评中的头像链接仍然是http,这是因为点评头像的链接会直接缓存与pre_forum_postcache表中,我们目前只能在输出的时候对http://进行替换(在数据库中直接把http换成https, 会造成点评不显示,具体的原因还需要查看源代码才清楚)

打开模板 view_node_body.htm, 查找$comment [ avatar ], (把空格去掉)替换为:

{eval echo str_replace("http://","https://",$comment[ avatar ]);}

把avatar两侧的空格去掉

AWS EC2更改hostname

现在的很多教程都是参考官方的wiki写的,但是wiki里面写的很清楚支持Amazon Linux,各大教程改个标题就说Ubuntu 这么改,centos 这么改等等。。

对于正常的主机,确实是改下/etc/hostname就可以显示我们想要的主机名的,但是AWS EC2 比较奇葩,hostname 都是开机时自动从云端获取并写道/etc/hostname中,这就是为什么直接修改/etc/hostname无效的原因

对于centos 来说,要用hostnamectl命令来修改hostname

sudo hostnamectl set-hostname --static www.iamhippo.com

 

 

Cloudflare 推荐节点IP

Cloudflare 百度云合作节点IP:

162.159.208.4-162.159.208.103

162.159.209.4-162.159.209.103

162.159.210.4-162.159.210.103

162.159.211.4-162.159.211.103

各线路推荐列表:

电信:推荐走圣何塞,例:104.16.160.* 或者上面的百度云合作 ip。
移动:推荐走移动香港,例:172.64.32.* 141.101.115.* 或者 104.23.240.0-104.23.243.254。
联通:没发布什么好线路,可走圣何塞。例:104.16.160.* 或者 104.23.240.0-104.23.243.254。也可以试一下走亚特兰大 108.162.236.* 。

nginx 和 cgi, fcgi 以及php-cgi, php-fpm

在apache 称雄的时代,经常会看到cgi,但是随着nginx 的出现以及时代的进步, cgi 的程序越来越少了.

最近有需求安装smokeping,因此cgi 又被拿了出来

CGI是common gateway interface的缩写,大家都译作通用网关接口,但很不幸,我们无法见名知意。

我们知道,web服务器所处理的内容都是静态的,要想处理动态内容,需要依赖于web应用程序,如php、jsp、python、perl等。但是web server如何将动态的请求传递给这些应用程序?它所依赖的就是cgi协议。没错,是协议,也就是web server和web应用程序交流时的规范。换句话说,通过cgi协议,再结合已搭建好的web应用程序,就可以让web server也能”处理”动态请求(或者说,当用户访问某个特定资源时,可以触发执行某个web应用程序来实现特定功能),你肯定知道处理两字为什么要加上双引号。CGI可以是任何的可执行程序,可以是Shell脚本,二进制应用,或者其他的脚本(Python脚本,Ruby脚本等)

简单的cgi工作方式如下:

有多种方式可以执行cgi程序,但对http的请求方法来说,只有get和post两种方法允许执行cgi脚本。实际上post方法的内部本质还是get方法,只不过在发送http请求时,get和post方法对url中的参数处理方式不一样而已。

任何一种语言都能编写CGI,只不过有些语言比较擅长,有些语言则非常繁琐,例如用bash shell开发,那么需要用echo等打印语句将执行结果放在巨多无比的html的标签中输出给客户端。常用于编写CGI的语言有perl、php、python等,java也一样能写,但java的servlet完全能实现CGI的功能,且更优化、更利于开发

总体上来说,CGI(common gateway interface) 就是所谓的短生存应用程序,Fast CGI 就是所谓的长生存应用程序. FastCGI 像是一个常驻 long-live 型的CGI, 它可以一直执行者,不会每次都要话费时间去fork一次

CGI 和 fastcgi 有自己输入和输出标准,比如HTTP头部, CGI环境变量,get和post等等

CGI, Fast-CGI 是protocols, CGI 慢点, Fast-CGI 要快很多

CGI程序能够用 Python, PERL, Shell, C or C++等语言来实现,尽管没有明确的规定,但是一般用C写的cgi,我们会用.cgi作为后缀,用perl 的用.pl作为后缀,其实我们都可以用.cgi作为后缀. Perl由于其跨操作系统、易于修改的特性成为了CGI的主流编写语言,以至于一般的“cgi程序”就是Perl程序

nginx + fastcgi: nginx只能处理静态文件,对于动态文件,一般用fastcgi 来作为“沟通”的协议. fastcgi 进程由fastcgi 进程管理器管理,而不是nginx,这样就需要一个fastcgi 管理器,这里可以使用spawn-fcgi 作为fastcgi 的进程管理器

nginx + cgi: nginx 不能直接执行外部可执行程序,因此nginx天生不支持cgi的, nginx 虽然不支持cgi,但是他“支持”fastCGI, 这样我们可以fastcgi 来wrap 一下cgi,这样变相的支持cgi,常见的fastcgi wrapper 有fcgiwrap

另外其实cgi 程序也可以被当成fastCGI,因此也可以用nginx + spawn-fcgi 来执行cgi

Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题

fastcgi 是一个协议, php-fpm 实现了这个协议

通过webserver 来运行php, 一般有两种方式,一个是php-cgi, 另外一个php-fpm (php FastCGI Process Manager) (apache 的mod_php, 把php当作一个模块来执行,以及cli 和 isapi 不在考虑范围之内, php总共来说有5种执行模式)

php-fpm 比传统的CGI方式 (suPHP) 要快,

php-cgi是php自带的fastcgi进程管理器,php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。另外直接杀死php-cgi进程,php就不能运行了,但是php-fpm和 spawn-fcgi就没有此类问题

php-fpm 就是一个支持php 解析的 fastcgi进程管理器,只能适用于php,其余语言写的cgi,例如perl,python,C,都不能使用

mod_php 和 php-fpm 是运行php 的两种方式,mod_php 是running php as apache module

在segmentfault上看到了一个文章,写的很不错https://segmentfault.com/q/1010000000256516

你(PHP)去和爱斯基摩人(web服务器,如 Apache、Nginx)谈生意

你说中文(PHP代码),他说爱斯基摩语(C代码),互相听不懂,怎么办?那就都把各自说的话转换成英语(FastCGI 协议)吧。

怎么转换呢?你就要使用一个翻译机(PHP-FPM)
(当然对方也有一个翻译机,那个是他自带的)

我们这个翻译机是最新型的,老式的那个(PHP-CGI)被淘汰了。不过它(PHP-FPM)只有年轻人(Linux系统)会用,老头子们(Windows系统)不会摆弄它,只好继续用老式的那个。