当在Linux云服务器之上进行服务部署这个行为的时候,挑选适宜的软件安装方式,这直接关联到系统的稳定性以及维护成本了。

于许多用户在“怎样安装服务器”进程里碰到的编译依赖繁杂、RPM包缺少等状况,此文会给出一套基于RHEL/CentOS 8(兼容AlmaLinux、Rocky Linux)环境下的上游源码部署举措。

这种方法,不是要从最开始去进行编译,而是采用了借助上游构建好的RPM包来实施安装,特别适用于MongoDB、Nginx等那些存在需要特定版本这种情况,或者官方没有直接给出RPM的场景。

第一步:配置上游YUM仓库

拿安装MongoDB Community Server当作例子,我们得手动去创建一个仓库文件,这个仓库文件是指向RHEL 8构建版本的。

借助SSH登录至你的云服务器,于 /etc/yum.repos.d/ 这个目录里面新创建一个 .repo 文件,就比如说 mongodb-org-7.0.repo 这样的。

写入以下内容:

[mongodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc

这里存在一个名为 $releasever 的变量,此变量在通常情况下,会被系统以自动的方式识别成为8,且处于兼容模式。

要是你所运用的是CentOS 7系统,那么就得把 baseurl 里的路径相应地改成 7 的架构。

添加结束之后,去执行 sudo yum makecache 来生成缓存,以此保证仓库数据拉取是正常的。

第二步:安装核心元软件包

仓库配置达成成功结果之后,就能够凭借YUM包管理器直接去拉取服务器二进制文件以及与之配套的相关工具。

执行以下命令安装完整的服务器套件:

sudo yum install -y mongodb-org

这个命令,会去拉取 mongodb-org-server 这个组件,它是守护进程,还会拉取 mongodb-org-mongos 这个组件,它属于分片路由,也会拉取 mongodb-org-shell 这个组件,它是命令行客户端,并且会拉取 mongodb-org-tools 这个组件,它是数据导入导出工具。

这样的安装途径,绕开了繁杂的源码编译进程,保证了生产环境所依赖的一致性。

第三步:初始化系统配置并启动服务

安装完成后,需要对操作系统环境进行基础调优。

MongoDB 默认采用 transparent_hugepage(透明大页)以及某些文件系统预读设置,这种情况会对数据库性能产生影响。

提议于 /etc/rc.d/rc.local 之处,或者借助systemd服务单元添入一下调优指令:

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

$ sudo cat > /etc/yum.repos.d/mongodb.repo >>EOF
[mongodb-upstream]
name=MongoDB Upstream Repository
baseurl=https://repo.mongodb.org/yum/redhat/8Server/mongodb-org/4.2/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.2.asc
EOF

重载systemd管理器并启动服务:

sudo systemctl daemon-reload
sudo systemctl start mongod

要保证服务器能于云主机重新启动之后自行恢复运转,一定要去设置开机自动启动。

sudo systemctl enable mongod

Fedora安装MongoDB服务器_服务器MongoDB安装_RHEL-8安装MongoDB

第四步:验证服务状态与连通性

服务启动后,可以通过检查进程状态和端口监听来验证运行情况。

首先查看服务日志是否有错误:

$ sudo dnf install mongodb-org
......
Installed:
  mongodb-org-4.2.3-1.el8.x86_64           mongodb-org-mongos-4.2.3-1.el8.x86_64 
  mongodb-org-server-4.2.3-1.el8.x86_64    mongodb-org-shell-4.2.3-1.el8.x86_64
  mongodb-org-tools-4.2.3-1.el8.x86_64         
Complete!

sudo tail -100 /var/log/mongodb/mongod.log

然后使用本地客户端进行连接测试。

如果服务绑定在内网IP或公网IP,需要指定相应的主机地址:

mongosh --host 127.0.0.1 --port 27017

进到shell之后,去执行 db.runCommand({ connectionStatus: 1 }) ,要是可以看到 ok: 1 这样的返回结果,那就表示服务器已经成功地部署好了,并且能够对外界提供服务了。

扩展场景:Docker容器化部署

倘若你所身处的云服务器环境践行的是容器化技术,那么便能够直接去拉取官方的Docker镜像来实施部署,这种方式相较于RPM方式而言,显得更加具备隔离特性,并且在迁移方面也更为容易实现。

执行以下命令:

$ sudo systemctl status mongod
 mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2020-02-08 12:33:45 EST; 2s ago
     Docs: https://docs.mongodb.org/manual
  Process: 15768 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 15769 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 15770 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 15771 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS)
Main PID: 15773 (mongod)
   Memory: 70.4M
      CPU: 611ms
   CGroup: /system.slice/mongod.service

docker run -d 
--name mongodb-server 
--restart always 
-p 27017:27017 
-v /data/mongodb:/data/db 
-e MONGO_INITDB_ROOT_USERNAME=admin 
-e MONGO_INITDB_ROOT_PASSWORD=yourpassword 
mongo:7.0

此命令会把容器之内的27017端口,映射至宿主机,此外还会将数据库文件,持久化到宿主机的目录。

注意,生产环境务必配置强密码并开启鉴权。

域名与远程访问配置

如果希望将服务暴露给公网并通过域名访问,需要完成以下两步:

域名解析,于域名注册商的管理后台之中,你的域名倘若像有个代码db.yourdomain.com这样,要添加一条A记录去指向云服务器的公网IP。

分别在阿里云、腾讯云等云服务商的控制台其安全组策略里,对对应安全组策略进行操作流程,将27017端口予以放行,此即配置防火墙与安全组的具体做法。

若是服务器的内部存在firewalld,或者存在iptables,那么同样需要进行同步放行。

3. 进行绑定监听地址可这样操作通过修改配置文件,该配置文件为名为 /etc/mongod.conf 的文件,在其中找到名为 bindIp 的参数,把云服务器的内网IP或者 0.0.0.0 给添加进去,完成添加后重启服务。

鉴于上述系列步骤,不论是挑选传统的RPM包管理方案,亦或是选用现代化风格的Docker容器化部署模式,均可于Linux云服务器之上快捷、平稳地达成服务器软件的安装以及配置操作。

$ mongo
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("20b6e61f-c7cc-4e9b-a25e-5e306d60482f") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    http://docs.mongodb.org/
---

本文所采用的方法论,同样能够适用在Redis这种主流数据库的离线或是在线的部署场景当中,也同样适用于MySQL这类主流数据库的离线或者在线的部署场景。