开头照例,锅乱我又来编故事骗金币了
前段时间淘汰了几台老旧,炖老堆在仓库里怪可惜,旧服不如拿来练手玩玩。再利正好前段时间大妈这边好多大神在玩Proxmox虚拟平台,锅乱而我一直用的炖老是VMware的产品,所谓肥肉吃多了,旧服换点瘦肉尝尝看。再利
这几台服务器分别是锅乱:两台Dell PowerEdge R200、一台Dell PowerEdge R710、炖老一台IBM System x3850 X5、旧服一台曙光天阔A950,再利看图说话吧:
都是锅乱老机器了,其中R200配置为:单颗四核 Intel(R) Xeon(R) CPU X3330 @ 2.66GHz、炖老4GB内存、旧服两块147GB硬盘、双千兆网卡;R710配置为:四颗六核 Intel(R) Xeon(R) CPU E7- 4807 @ 1.87GHz、64GB内存、三块300GB硬盘、四千兆网卡;x3850 X5配置为:两颗六核 Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz、8GB内存、五块300GB硬盘、双千兆网卡;A950配置为:四颗AMD Opteron处理器(具体型号忘记了,因为机器挂掉无法开机了)、8GB内存、八块300GB硬盘、双千兆网卡。
说实话,Dell和IBM的机器都很好用,这些年都没关过机。除了IBM那台坏过两块硬盘,就再没出过毛病。而曙光那台则命运多舛,从一开始就磕磕绊绊的,时不时启动不了,坏过一块硬盘,噪音还超级大,可能是个体差异吧,这么多年就用过这一台曙光的。
System找不到货了,就其他俩牌子吧。怎么说都是在大妈家,还得按大妈的家规行事。
本来一切正常,系统都做好了,结果隔了一天过去一看,先是曙光那台系统启动不了,也没有任何报错,得,默哀吧。第二天过去一看,R710也挂了,信息屏上提示说找不到内存,WTF,拆机拔插内存也不行,上网一查估计是硬件坏鸟,算了,本来也是瞎折腾,没必要修了,尸体留着当备件吧。
就在我准备继续折腾其他三台时,同事在库房的破烂堆里发现了一台旧的曙光服务器和一台连箱子都没拆过的长城服务器(由于某些历史原因,我们和别的单位合并了,所以继承了一些他们遗留的物资)。什么鬼?搬出来看看先。两台都看不到具体型号,其中长城的配置是:两颗六核 Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz、8GB内存、五块300GB硬盘、双千兆网卡;曙光的配置是:两颗四核 AMD Opteron(TM) Processor 6212、8GB内存、五块300GB硬盘、双千兆网卡。这俩机器长得太像了,跟双胞胎似的,尤其是屁股后面,不仔细看都分辨不出来(双兔傍地走安能辩我是雌雄?)长城的稍微短一点点。我估计是一个模具做出来的,省了开模钱了。话说回来,曙光咋这么喜欢用AMD的处理器?
这几台机器共同的特点,一是都有千兆网卡,二是都带Raid卡,且都不能直通。
我是想折腾一下PVE的ceph,如果能直通,每块硬盘都能独立的挂到ceph上,现在只能折中了。R200最绝,连单块盘做 Raid 0 都不行,只能两块盘做 Raid 1,当做一块盘来用好了。其他几台机器都是单块盘做 Raid 0 的,相当于直通了。
为了不浪费可怜的硬盘空间,我把系统都装在了 U盘里,每台服务器插一个。反正启动之后都加载到内存中了,对系统盘读写不怎么频繁。
装系统没啥特别的,到官网下载最新的 PVE,用 UltraISO 之类的软件写到一个 U盘中,用这个 U盘启动服务器,按照安装界面提示填好相关信息就行了。注意把系统盘位置选到作为系统盘的那个 U盘。
值得一提的是,挂掉的那台曙光天阔A950,竟然进不到安装界面,有一条错误提示忘记拍照了,网上查到的原因是不兼容?管他呢,反正后来也挂掉了。另外就是x3850和R710在安装界面看不到鼠标指针,但是明显感觉鼠标是活动的,因为右键有反应。这个事儿浪费了我一下午,上网查询后学会了按住 alt 键调出快捷键提示,这才继续下去,可是到选择系统盘位置那里又卡住了,因为没有下拉菜单的快捷键只好用看不到的鼠标右键乱点来定位,摸瞎点出来下拉菜单,这才顺利装完。谁承想R710第二天也给挂了呢。
还有就是长城那台和后来的曙光那台,用 USB键鼠怎么都不好使,最后还是插了PS/2口的键鼠才顺利装完。唉,老服务器不好惹呀。
装好系统,插上,先把系统更新一下:
rm /etc/apt/sources.list.d/pve-enterprise.list
wget http://mirrors.ustc.edu.cn/proxmox/debian/proxmox-ve-release-6.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-6.x.gpg
echo 'deb http://mirrors.ustc.edu.cn/proxmox/debian buster pve-no-subscription'>/etc/apt/sources.list.d/pve-install-repo.list
sed -i 's/ftp.debian.org/mirrors.163.com/g' /etc/apt/sources.list
sed -i 's/security.debian.org/mirrors.163.com/debian-security/g' /etc/apt/sources.list
apt update && apt dist-upgrade
更新完最好重启一下。推荐设置一下SSH,就能远程管理了。我懒,反正也是玩,就没弄。
为了不在登录时看到讨厌的“无有效订阅”提示:
还得编辑俩文件:“/usr/share/pve-manager/js/pvemanagerlib.js”和”/usr/share/javascript/proxmox-widget-toolkit/proxmoxlib.js“。用系统自带的”nano“编辑就行,蛮好用的,用”Ctrl + w“查找”if (data.status !== 'Active') { “这一句,注释掉,换成”if (false) { “。俩文件都是这么改。
据说ceph的数据吞吐量比较大,所以单独给它一块网卡用吧。单击“网络”,创建一个“Linux Bridge”:
ceph 集群对时间同步的要求很高,需要安装 ntp 服务: “apt-get install ntp -y”。安装完成之后会自动启动并同步时间服务器。注意,是联网的情况下,如果不连接外网,需要设定内网的 ntp 服务。
到这里就可以开始设置集群和高可用了。
PVE有个好处:去中心化管理。也就是说建好集群后,随便登录一台主机都能管理整个集群,不像VM那种中心化管理,一旦vCenter挂掉就不好玩了。
用浏览器访问第一台服务器的IP,加上端口号”8006“,单机左侧菜单里的”数据中心“,然后单击右边菜单的”集群“,然后单击右边的”创建集群“:
输入一个集群名称,然后单击”创建“按钮。貌似不能用中文名:
稍等片刻,看到”TASK OK“,集群就创建好了:
能看到建好的集群信息,现在有一个节点:
单击”加入信息“,这里显示的内容是供其他服务器加入这个集群用的验证信息,单击”拷贝信息“就行:
现在用浏览器登录到其他几台服务器,单击”数据中心“->”集群“中的”加入集群“按钮,在”信息“栏中粘贴刚才复制的信息,然后填入第一台服务器的 root 用户密码,单击”加入“按钮就可以加入集群了:
稍等片刻,浏览器会退出登录并提示重新登录,这时就可以看到刚才的集群里有两个节点了:
以此把所有的服务器都加入到这个集群中来:
其实用命令行效率更高,在其中一台机器上输入“pvecm create ***”来创建集群,其中的“***”是集群名称。在其他的服务器上输入“pvecm add *.*.*.*”来加入集群,其中的“*.*.*.*”是建立集群的那台服务器的IP地址。建好以后,可以在任意一台服务器上用命令“pvecm status”来查看集群状态。
集群建好之后,就可以开整 ceph 了,这是一种分布式文件系统,百度的介绍跟没说一样:
前面说过,PVE是去中心化管理的,所以登录任意一台服务器,都能看到和管理集群中所有的节点。单击每一台主机,在主机菜单中单击”ceph“,然后会弹出提示让安装:
直接点安装,然后按照提示来就好了:
如果遇到网络很慢,一直下载失败的情况,可以根据屏幕提示,把需要的安装包文件用工具下载下来,上传到服务器的“/var/cache/apt/archives”目录中,然后用命令“pveceph install”来安装。
装好之后就到了配置界面,这里可以给ceph单独设置一块网卡,在“Cluster Network”里填写第二块网卡的IP地址(这个Cluster指的是ceph的集群,并非前面为服务器建立的集群),记得要输掩码个数:
ceph最少需要三个监视器(mon),刚才“初始化配置”那张图里可以看到已经建立了第一个监视器,再另外添加两个,或者把所有的服务器都当作监视器也未尝不可:
接下来就是创建“OSD”,也就是ceph用于存储数据的磁盘,单击“Ceph”->“OSD”->“创建”:OSD”,一块一块的把服务器上的空闲磁盘都添加为OSD:
有人看了上图可能会有疑问,是不是没做完呢?不,你没看错,我翻车了。先是发现用U盘当系统盘超级慢,估计是服务器老了,U口速率不好,还有U盘也不是啥好鸟,综合起来速度奇慢,没法用。所以只好用硬盘来装系统。这样一来,两台R200就没有空余的磁盘可以贡献给OSD了。另外就是,给服务器重装好系统后,x3850就挂了,是的,就挂了,信息屏显示PCI故障。算了,就用4台玩吧,顺便把牺牲的三台机器的内存拔下来看看能不能利旧。
OSD创建完之后就可以创建pool供服务器使用了,单击“Ceph” -> “Pools” --> “创建”,给pool起个名字,“pg_num”这个数值比较关键,如果不合适的话,Ceph会告警,官方建议:若少于5个OSD, 设置pg_num为128;5~10个OSD,设置pg_num为512;10~50个OSD,设置pg_num为4096:
创建后,每台服务器下的存储就会多出一个:
建立高可用的目的在于,当一台服务器或一块磁盘出故障时,虚拟机可以动态漂移到其他正常服务器上去,对业务冲击较小。单击“数据中心”->“HA”->“群组”->“创建”,添加资源,把服务器都添加进来:
然后在“数据中心”->“HA”->“资源”里把需要的虚拟机添加进来就可以了:
之前在VMWare环境下搞过NextCloud,这东西还是有一定可玩性的。这次在PVE环境下再搞一遍,理论上应该没有什么区别。大妈上好多人都是用docker来弄,我没怎么玩过docker,还是用传统方式来安装吧。
拷贝一段文字简单介绍一下NextCloud吧,貌似还是有人不知道这东西的:
Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、iOS、Linux 等各种平台,也提供了网页端以及 WebDAV接口,所以你几乎可以在各种设备上方便地访问你的云盘。Nextcloud也提供了许多应用安装,包括但不限于Markdown在线编辑、OnlyOffice(需另外部署服务端)、思维导图、日历等,你可以自行选择以丰富个人网盘的功能。
所以呢,这次需要两台虚拟机,一台装NextCloud做网盘服务器,一台装OnlyOffice给NextCloud提供在线编辑文档功能。我喜欢FreeBSD,所以还是用它装NextCloud。OnlyOffice官方并没有提供FreeBSD的安装手册,我还是不折腾了,就用Debian吧。
新建两个虚拟机,一个装FreeBSD,一个装Debian。从官网下载ISO文件,上传到PVE里,然后新建虚拟机,选择上传好的ISO文件,开机运行就好了:
按照同样的方法再创建一个Debian的虚拟机。
启动系统,在启动选项中按回车键进入系统安装界面。
(01)在“Welcome”界面选择“Install”
(02)在“Keymap Selection”界面选择“Continue with default keymap”
(03)在“Set Hostname”界面输入主机名
(04)在“Distribution Select”界面选择“lib32”、“ports”和“src”三项
(05)在“Partitioning”界面选择“Auto(UFS)”自动分区(也可以选择“Manual”手动分区)
(06)在“Partition”界面选择“Entire Disk”全部磁盘空间
(07)在“Partition Scheme”界面选择“MBR”或“GPT”(磁盘大于2T或BIOS只支持EFI时必选)
(08)在“Partition Editor”界面对分区进行调整后选择“Finish”
(09)在“Confirmation”界面选择“Commit”进行确认,等待分区完成
(10)分区完成后,在“New Password:”提示符后输入root用户的密码,再输一遍予以确认
(11)在“Network Configuration”界面选择要设置的网卡,本例中为“em0”
(12)选择“Yes”配置网卡的IPv4
(13)选择“No”手工配置IP信息(选择“Yes”启用DHCP,自动获取IP)
(14)手工输入IP地址,子网掩码和默认网关
(15)选择“No”不启用网卡的IPv6
(16)手工输入DNS信息
(17)在“Time Zone Selector”界面依次选择“5 Asia”-“9 China”-“1 Beijing Time”
(18)在“Confirmation”界面选择“Yes”确认
(19)在“Time & Date”校准日期和时间
(20)在“System Configuration”界面选择“moused”、“powerd”两项(按需选择sshd远程控制)
(21)在“System Hardening”界面设置系统强化选项,推荐全选
(22)在“Add User Accounts”界面选择“No”(“Yes”为添加用户登录账户)
(23)在“Final Configuration”界面选择“Exit”退出安装
(24)在“Manual Configuration”界面选择“No”
(25)在“Complete”界面选择“Reboot”重新启动
FreeBSD属于UNIX类操作系统,建议在初次安装时仅安装基本系统,然后更新系统源代码和软件ports树(注意,此操作需要连接互联网)。用root用户登录系统,然后修改“ /etc/rc.conf”文件,去掉不必要的启动项,比如“sendmail”,添加必要的选项,如“SSH”。
然后配置一下SSH,这样后续操作可以用ssh登录上去做(当然也可以在浏览器虚拟出来的控制台做,或者用虚拟桌面工具登上去,按需食用)。输入命令“ssh-keygen-t dsa”产生连接密匙,按照提示输入一个“Passphrase”密码,此密码用于防止陌生人使用ssh客户端进行远程连接:
编辑“/etc/ssh/sshd_config”文件:
找到“#PermitRootLogin no”,改为“PermitRootLogin yes”
去掉“#PasswordAuthentication no”前面的“#”
进入“/root/.ssh/”,把“id_dsa.pub”复制一份为“authorized_keys”:
重启系统使之生效。然后将“id_dsa”和“id_dsa.pub”文件复制到客户端电脑上,用SSH客户端软件加载之后即可通过SSH方式远程登录操作,SSH客户端可以选择SecureCRT、SSH Secure Shell Client、Bitvise SSH Client等。
登录之后,先把前面给服务器分配的另一块硬盘初始化一下:
# gpart create -s GPT da1
# gpart add -t freebsd-ufs -a 1M da1
# newfs -U /dev/da1p1
按照本文后面的方法安装的NextCloud,安装位置是在“/usr/local/www/nextcloud”,我们把这块新硬盘专门给他存数据,所以要新建一个挂载点:
# mkdir /NextCloudData
# mkdir /NextCloudData/DataBase
//存放数据库文件
# mkdir /NextCloudData/Data
//存放数据文件
然后把新硬盘挂载上“mount /dev/da1p1 /NextCloudData/Data”,还需要给“/etc/fstab”文件里添加一句“/dev/da1p1 /NextCloudData/Data ufs rw 2 2”,以便于重启系统以后能够自动挂载:
接下来输入命令“ freebsd-update fetch”获取更新,当看到“(END)”时,按“q”键退出,然后输入命令“freebsd-update install”更新系统。下面的几个步骤可能都得等很久,冲杯咖啡休息一下眼睛吧。
更新完之后,编辑文件“/etc/portsnap.conf”,将ports源“SERVERNAME=portsnap.freebsd.org”改为国内的镜像,比如“portsnap.hshh.org”。然后输入命令“portsnap fetch && portsnap extract && portsnap update”更新ports树。
安装subversion用以更新系统代码“cd /usr/ports/devel/subversion && make install clean”。
安装完成后输入以下命令更新系统代码:“svn checkout svn://svn.FreeBSD.org/base/stable/12 /usr/src && svn update /usr/src”。
FreeBSD可以根据需要自定义系统核心,例如将不需要的设备驱动剔除,添加某些优化命令,使系统核心尽可能的小巧高效和安全稳定。FreeBSD的优点之一就在于此,那么我们现在来精简一下核心吧!要定义一个专用的系统核心,首先需要复制一份核心配置文件,对其进行修改:
# cd /usr/src/sys/amd64/conf
//64位系统为amd64,32为系统为i386
# mkdir /root/kernels
# cp GENERIC /root/kernels/MYKERNEL
//默认核心配置为GENERIC,复制一份为MYKERNEL
# ln -s /root/kernels/MYKERNEL
//将新复制的核心文件连接到核心所在地
# ee MYKERNEL
核心配置文件的内容可以参考《FreeBSD Handbook》,这里不骗大家流量了。优化定制好的核心需要重新安装才能生效,以下命令用于安装新的核心:
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
//建立新核心
# make installkernel KERNCONF=MYKERNEL
//安装新核心
# rm -rf /usr/obj/usr/src/sys/MYKERNEL
//删除临时文件
核心装好之后,编辑一下“/etc/rc.conf”文件,添加一些必要项,例如防火墙什么的。如果用的是“IPFilter”防火墙,顺带编辑一下策略文件,防止联不了网。
MySQL被Oracle收购了以后,它的创始人另外开了一家分店,起名叫MariaDB,据说比MySQL优化的更好。
输入命令“cd /usr/ports/databases/mariadb104-server && make install clean”进行安装。过程有点慢,别着急。FreeBSD的ports方式安装,好处是可以一并把缺少的组件安装好,缺点是,一环套一环,需要不停的点同意安装。安装完成后进行必要的设置:
# echo ‘mysql_enable=”YES”’ >> /etc/rc.conf
//让MySQL随系统启动
# /usr/local/etc/rc.d/mysql-server start
//启动MySQL服务
# /usr/local/bin/mysqladmin –u root password YourPassword
//修改MySQL的root用户密码
移动一下数据库文件的存储目录。先看看当前数据库文件存在哪里“more /usr/local/etc/rc.d/mysql-server”:
开始转移:
# /usr/local/etc/rc.d/mysql-server stop
# mysqladmin -u root -p shutdown
//停止相关服务
# mv /var/db/mysql /NextCloudData/DataBase/
//移动源数据到新位置
修改数据库启动脚本“/usr/local/etc/rc.d/mysql-server”,把“: ${ mysql_dbdir="/var/db/mysql"}”改为“: ${ mysql_dbdir="/NextCloudData/DataBase/mysql"}”。
这个不用解释了吧?可以换成别的Http服务器。输入命令“cd /usr/ports/www/apache24 && make install clean”进行安装。装好之后,把“apache24_enable="YES"”和“apache24_http_accept_enable="YES"”写进“/etc/rc.conf”,确保apache能够跟随系统启动。当然,还有一些其他的安全设置,可以参考其他资料来设置。
编辑“ /usr/local/etc/apache24/httpd.conf”文件,配置一下apache运行参数:
找到“Options Indexes FollowSymLinks”,改为“Options FollowSymLinks”,禁止浏览网站文件列表;
找到“Listen 80”,改为“Listen Your IP:80”,开放服务器地址的80端口给Web功能;
找到“ServerAdmin you@example.com”,改为管理员的邮箱地址,此为非必要设置;
找到“ServerName www.example.com:80”,改为“ServerName Your IP:80”,设置服务器地址;
找到“#Include etc/apache24/extra/httpd-mpm.conf”,去掉前面的“#”号,启用mpm提高性能;
找到“DocumentRoot”,将后面的内容改为“DocumentRoot "/usr/local/www/nextcloud"”,指定网站根目录;
找到“<Directory "/usr/local/www/apache24/data">”,改为“<Directory "/usr/local/www/nextcloud">”,设置根目录参数;
找到“Options FollowSymLinks”,将其下方的“AllowOverride None”改为“AllowOverride All”;
找到“<IfModule alias_module>”,设置phpmyadmin的虚拟目录,为之后安装phpmyadmin做准备。
NextCloud是由PHP语言写成的,所以我们也必须安装PHP。输入命令“cd /usr/ports/lang/php74 && make install clean”安装。然后安装php7的apache24支持模块“cd /usr/ports/www/mod_php74 && make install clean”。
PHP安装后需要配置两个文件,分别是PHP的配置文件“php.ini”和apache的配置文件“httpd.conf”。“php.ini”需要手工建立,或者复制一份范例“ cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini”,然后编辑这个文件:
找到“file_uploads”,将其参数改为“on”,打开文件上传功能;
找到“upload_max_filesize”,设置最大可上传文件大小;
找到“post_max_size”,设置网页“post”方式可传输的最大文件;
找到“max_input_time”,设置最大网页输入等待时间;
找到“memory_limit”,设置PHP脚本最大可用内存数;
找到“max_execution_time”,设置PHP脚本最大可执行时间;
找到“open_basedir =”,设置PHP脚本可访问目录:“/usr/local/www/apache24/data/:/dev/urandom:/usr/local/www/nextcloud:/var/log/nextcloud:/usr/local/bin/clamscan:/tmp/:/usr/local/bin:/usr/local/lib/X11/fonts/TTF/:/NextCloudData/Data/”;
找到“expose_php =”,将其参数改为“off”,隐藏PHP版本号输出;
找到“opcache.enable”将其设置为“opcache.enable=1”;
找到“opcache.enable_cli” 将其设置为“opcache.enable_cli =1”;
找到“date.timezone =”,将其参数改为“"Asia/Shanghai"(包括英文引号)”,更改时区。
然后编辑“/usr/local/etc/apache24/httpd.conf”文件。找到类似“AddType application/x