X86架构服务器/虚拟机部署中间件

文章目录

一、文件夹创建 

二、配置静态IP

三、关闭Selinux

四、关闭防火墙

五、开启包转发功能和修改内核参数

六、添加YUM的Centos源和Docker镜像源

七、安装JDK

八、安装Docker

九、安装MySQL

十、安装Redis

十一、安装MongoDB

十二、安装Nacos

十三、安装Nginx

十四、安装MinIO

十五、安装RabbitMQ

十六、Docker与Firewalld冲突解决

十七、配置Docker容器中访问容器外IP


前置条件:
1、已安装操作系统 OpenEuler 20.03 (LTS-SP3)

一、文件夹创建 

##创建文件夹
[root@localhost ~]# mkdir /home/data

##创建符号链接文件
[root@localhost ~]# ln -s /home/data /data    

二、配置静态IP

##修改参数
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=7ea10387-2576-4681-bfd0-92e57959a4eb
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.111.197
PREFIX=24
GATEWAY=192.168.111.1
DNS1=114.114.114.114
IPV6_PRIVACY=yes
 
##使配置生效。华为openeuler系统使用如下命令,其他linux系统可以使用systemctl restart network
[root@localhost ~]# nmcli con reload; nmcli con up ens33 

三、关闭Selinux

## 永久配置
[root@localhost ~]# sed -i 's/enforcing/disabled/' /etc/selinux/config 

## 临时配置
[root@localhost ~]# setenforce 0 

## 查看结果
[root@localhost ~]# getenforce   

四、关闭防火墙

说明:为了顺利完成所有中间件的安装部署,先关闭防火墙。待安装部署完成后,再启用防火墙,并进行相关配置(具体配置可以详见:Linux系统中配置防火墙-CSDN博客)。

##关闭firewalld
[root@localhost ~]# systemctl stop firewalld
##禁止开机启动firewalld
[root@localhost ~]# systemctl disable firewalld

##关闭iptables
[root@localhost ~]# systemctl stop iptables
##禁止开机启动iptables
[root@localhost ~]# systemctl disable iptables

五、开启包转发功能和修改内核参数

参数说明:

  • br_netfilter模块用于将桥接流量转发至iptables链,br_netfilter内核参数需要开启转发。
  • net.ipv4.ip_forward=1 将Linux系统作为路由或者VPN服务就必须要开启IP转发功能。当linux主机有多个网卡时,一个网卡收到的信息是否能够传递给其他的网卡 ,如果设置成1 的话 可以进行数据包转发,可以实现VxLAN 等功能。不开启会导致docker部署应用无法访问。

1、动态地向内核中加载br_netfilter模块

[root@localhost ~]# modprobe br_netfilter

2、配置开机自动加载br_netfilter模块

  • 新建rc.sysinit文件
[root@localhost ~]# vi /etc/rc.sysinit
#!/bin/bash
for file in /etc/sysconfig/modules/*.modules ; do
[ -x $file ] && $file
done
  • 在/etc/sysconfig/modules/目录下新建br_netfilter.modules文件
[root@localhost ~]# vi /etc/sysconfig/modules/br_netfilter.modules
modprobe br_netfilter
  • 配置执行权限
[root@localhost ~]# chmod +x /etc/sysconfig/modules/br_netfilter.modules
  • 查看br_netfilter模块是否加载成功
[root@localhost ~]# lsmod | grep br_netfilter  
br_netfilter          22256  0
bridge                155432  1 br_netfilter

3、修改内核参数

  • 修改/etc/sysctl.conf文件
[root@localhost ~]# vi /etc/sysctl.conf   
####注意:等号=左右不能有空格####
net.ipv4.ip_forward=1 #修改/新增这一行
#当keepalive打开的情况下,TCP发送keepalive消息的频率,默认值是7200(2小时)
net.ipv4.tcp_keepalive_time=1800
#TCP发送keepalive探测以确定该连接已经断开的次数,默认值是9
net.ipv4.tcp_keepalive_probes=5
#当探测没有确认时,重新发送探测的频度,默认值为75 
net.ipv4.tcp_keepalive_intvl=5
#将桥接的IPv4流量传递到 iptables 的链
net.bridge.bridge-nf-call-ip6tables=1
net.bridge.bridge-nf-call-iptables=1
  • 执行生效
##加载指定的文件配置内核参数,-p后通常接一个文件路径,若为空,默认加载/etc/sysctl.conf中的内核参数
[root@localhost ~]# sysctl -p  
    
##显示所有的内核参数      
[root@localhost ~]# sysctl -a    

##临时修改内核参数的值,重启后失效        
[root@localhost ~]# sysctl -w net.ipv4.tcp_keepalive_time=1800 
[root@localhost ~]# sysctl -w net.ipv4.tcp_keepalive_probes=5
[root@localhost ~]# sysctl -w net.ipv4.tcp_keepalive_intvl=5

##加载/etc/sysctl.d/目录下所有conf文件中的内核参数
[root@localhost ~]# sysctl --system      

六、添加YUM的Centos源和Docker镜像源

##下载
[root@localhost ~]# wget https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo \
                    -O /etc/yum.repos.d/CentOS-Base.repo
[root@localhost ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo \
                    -O /etc/yum.repos.d/docker-ce.repo

##更改名称
[root@localhost ~]# sed -i 's/\$releasever/8/g' /etc/yum.repos.d/docker-ce.repo 

##清除缓存
[root@localhost ~]# yum clean all 

##刷新缓存
[root@localhost ~]# yum makecache 

七、安装JDK

##安装
[root@localhost ~]# yum install java-1.8.0-openjdk* -y

#查看安装是否成功
[root@localhost ~]# java -version  

八、安装Docker

  • 安装
[root@localhost ~]# yum install docker-ce -y
  • 启动
[root@localhost ~]# systemctl start docker
  • 配置开机启动
[root@localhost ~]# systemctl enable docker
  • 配置国内镜像地址
[root@localhost ~]# cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": [
    "http://hub-mirror.c.163.com",
    "https://9ca7kqhd.mirror.aliyuncs.com",
    "https://registry.docker-cn.com"
]
}
EOF
  • 重启
[root@localhost ~]# systemctl restart docker

九、安装MySQL

##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/mysql

##运行MySQL容器
[root@localhost ~]# docker run --name 容器名 -p 3306:3306 \
                    -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=root账号的密码 \
                    -v /data/docker/mysql/conf/:/etc/mysql/conf.d \
                    -v /data/docker/mysql/logs:/var/log \
                    -v /data/docker/mysql/data:/var/lib/mysql \
                    --restart=always -d mysql:5.7

##查看MySQL容器是否运行正常
[root@localhost ~]# docker ps           

如果MySQL容器运行正常,就可以使用MySQL客户端(如:Heidisql、Navicat)访问MySQL数据库了。

十、安装Redis

##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/redis 

##运行Redis容器
[root@localhost ~]# docker run --name 容器名 -p 6379:6379 \
                    -v /etc/localtime:/etc/localtime \
                    -v /data/docker/redis/conf/redis.conf:/etc/redis/redis.conf \
                    -v /data/docker/redis/data:/data \
                    --appendonly yes --requirepass 密码 --restart=always \
                    -d redis:6.2.6 redis-server /etc/redis/redis.conf 

##查看Redis容器是否运行正常
[root@localhost ~]# docker ps

如果Redis容器运行正常,就可以使用Redis客户端(如:RedisDesktopManager)访问Redis了。

十一、安装MongoDB

##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/mongo

##运行MongoDB容器
[root@localhost ~]# docker run --name 容器名 -p 27017:27017 \
                    -v /data/docker/data/mongo/data:/data/db \
                    -v /data/docker/data/mongo/conf:/data/configdb \
                    -v /data/docker/data/mongo/logs:/data/log/ \
                    -e MONGO_INITDB_ROOT_USERNAME=你的账号 \
                    -e MONGO_INITDB_ROOT_PASSWORD=你的密码 \
                    -e MONGO_INITDB_DATABASE=数据库名 \
                    -v /etc/localtime:/etc/localtime \
                    --restart=always -d mongo:6.0.4

##查看MongoDB容器是否运行正常
[root@localhost ~]# docker ps

参数说明:

  • docker 运行时加上环境变量MONGO_INITDB_ROOT_USERNAME 和MONGO_INITDB_ROOT_PASSWORD 会自动启动授权。
  • 默认给MongoDB中的保留库(即:admin)设置账户密码。你可以通过环境变量MONGO_INITDB_DATABASE给具体的数据库启动授权。

如果MongoDB容器运行正常,就可以使用MongoDB客户端(如:Studio 3T)访问MongoDB数据库了。

十二、安装Nacos

##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/nacos

##运行Nacos容器
[root@localhost ~]# docker run -d -p 8848:8848 \
-e MODE=standalone \
-v /data/docker/nacos/conf:/home/nacos/conf \
-v /data/docker/nacos/logs:/home/nacos/logs \
-v /data/docker/nacos/data:/home/nacos/data \
-v /etc/localtime:/etc/localtime \
--name 容器名 \
--restart=always \
nacos/nacos-server:2.0.2

##查看MongoDB容器是否运行正常
[root@localhost ~]# docker ps

如果Nacos容器运行正常,就可以使用浏览器访问Nacos页面了。
URL地址:宿主机IP:8848/nacos
账号密码:nacos/nacos
注意登录后,修改Nacos的默认密码!

十三、安装Nginx

建议:不使用docker安装,而下载tar.gz文件进行编译部署。否则,性能压测时,可能会报错:句柄数不够!

##安装编译工具
[root@localhost ~]# yum install -y gcc pcre-devel openssl openssl-devel make

##下载nginx包
[root@localhost ~]# wget http://nginx.org/download/nginx-1.25.3.tar.gz

##解压
[root@localhost ~]# tar -zxvf nginx-1.25.3.tar.gz

##编译
[root@localhost ~]# cd nginx-1.25.3
[root@localhost ~]# ./configure --prefix=/usr/local/nginx \
                    --with-http_gzip_static_module \
                    --with-http_auth_request_module \
                    --with-stream --with-ipv6 \
                    --with-http_ssl_module --with-stream
[root@localhost ~]# make  & make install  

##若报错,就再执行一遍
[root@localhost ~]# make  & make install  

Nginx编译部署完成后,进入/usr/local/nginx/conf目录,基于项目实际情况配置nginx.conf。

然后,将项目前端部署包上传到/usr/local/nginx/html目录。

最后,进入/usr/local/nginx/sbin目录,执行如下命令,启动Nginx:

[root@localhost ~]# ./nginx

前端部署包或nginx.conf配置文件若有更新,执行如下命令生效:

[root@localhost ~]# ./nginx -s reload

停止Nginx,执行如下命令:

[root@localhost ~]# ./nginx -s stop

十四、安装MinIO

##创建文件夹
​[root@localhost ~]# mkdir -p /data/docker/minio 

##配置执行权限
[root@localhost ~]# chmod 777 /data/docker/minio

##运行MinIO容器
[root@localhost ~]# docker run -d --name 容器名 \
                    --restart=always -p 9000:9000,9001:9001 \
                    -e MINIO_ROOT_USER="登录账号" \
                    -e MINIO_ROOT_PASSWORD="登录密码" \
                    -v /etc/localtime:/etc/localtime \
                    -v /data/docker/minio/config:/root/.minio \
                    -v /data/docker/minio:/data minio/minio server /data \
                    --console-address ":9001" --address :9000

##查看MinIO容器是否运行正常
[root@localhost ~]# docker ps

参数说明:

  • --console-address ":9001"         // minio控制台端口
  • --address :9000                         // minio服务API端口

如果MinIO容器运行正常,就可以使用浏览器访问MinIO Web管理页面了。在该页面中,可以创建bucket,配置bucket的Access policy。
URL地址:宿主机IP:9001
账号密码:运行MinIO容器时设置的账号密码

十五、安装RabbitMQ

##创建文件夹
[root@localhost ~]# mkdir -p /data/docker/rabbitmq 

##运行RabbitMQ容器
[root@localhost ~]# docker run --name 容器名 -p 5672:5672 -p 15672:15672 \
                    -v /etc/localtime:/etc/localtime \
                    -v /data/docker/rabbitmq/data:/var/lib/rabbitmq \
                    -e RABBITMQ_DEFAULT_USER=账号 \
                    -e RABBITMQ_DEFAULT_PASS=密码 \
                    --restart=always -d rabbitmq:management  

##查看MongoDB容器是否运行正常
[root@localhost ~]# docker ps

如果RabbitMQ容器运行正常,就可以使用浏览器访问RabbitMQ Web管理页面了。
URL地址:宿主机IP:15672
账号密码:运行RabbitMQ容器时设置的账号密码

十六、Docker与Firewalld冲突解决

资料参考:docker与firewalld冲突解决_docker firewalld-CSDN博客

说明:Firewall的底层使用iptables进行数据过滤,而Docker也使用iptables来进行网络隔离和管理。这可能导致Firewall与Docker产生冲突。当Firewalld启动或者重启的时候,将会从iptables中移除 Docker的规则,从而影响了 Docker 的正常工作。

##查询iptables链
[root@localhost ~]# iptables -L

##修改docker配置,绕过iptables,添加最后2行
[root@localhost ~]# vi /etc/docker/daemon.json
{
   "registry-mirrors": [
       "http://hub-mirror.c.163.com",
       "https://9ca7kqhd.mirror.aliyuncs.com",
       "https://registry.docker-cn.com"
   ],
   "experimental" : true,    #添加此行
   "iptables": false         #添加此行
}

##重启docker
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker

##重启防火墙
[root@localhost ~]# systemctl restart firewalld

##配置防火墙开机自启
[root@localhost ~]# systemctl enable firewalld
 
##再次重启Docker
[root@localhost ~]# systemctl restart docker

此时,Docker容器的端口只能由本机(运行Docker容器的宿主机)访问,可以通过firewall-cmd命令开放其他主机访问本机的Docker容器。(详见:Linux系统中配置防火墙-CSDN博客

十七、配置Docker容器中访问容器外IP

注意:
配置Docker绕过iptables之后,有个弊端:容器内部无法访问外界IP。需要Firewalld防火墙开启NAT转发功能。

##检查是否允许 NAT 转发。若是yes,表示允许
[root@localhost ~]# firewall-cmd --query-masquerade

##开启 NAT 转发
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-masquerade

##重载,使配置生效
[root@localhost ~]# firewall-cmd --reload

1、容器中访问宿主机IP:

宿主机防火墙需要放行Docker容器的网段或IP。(详见:Linux系统中配置防火墙-CSDN博客)。

查看Docker容器的IP,可以使用命令:

[root@localhost ~]# docker inspect -f \
'{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器名

2、容器中访问其他主机:

其他主机防火墙需要放行容器所在宿主机IP。(详见:Linux系统中配置防火墙-CSDN博客

  • 29
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
/boot/grub2/i386-pc/boot.img 文件是一个针对x86架构的引导镜像文件,它包含了用于引导启动计算机的程序和参数等信息。 以下是/boot/grub2/i386-pc/boot.img文件的源码注释: ``` /* * This file contains the source code for the x86 version of the GRUB * boot loader. It is responsible for loading the operating system kernel * from the hard disk and transferring control to it. */ #include <grub/types.h> #include <grub/i386/pc/boot.h> #include <grub/i386/pc/loadfile.h> /* * The main function of the boot loader. It is called by the BIOS when the * computer is powered on or reset. It initializes the hardware, loads the * kernel from the hard disk, and transfers control to it. */ int main (void) { /* Initialize the hardware */ init_hw (); /* Load the kernel from the hard disk */ if (load_kernel () != 0) { /* Error loading the kernel */ return 1; } /* Transfer control to the kernel */ transfer_control (); /* Should never get here */ return 0; } /* * Initializes the hardware, including the console output and disk system. */ void init_hw (void) { /* Initialize the console */ init_console (); /* Initialize the disk system */ init_disk (); } /* * Loads the kernel from the hard disk into memory. */ int load_kernel (void) { /* Read the kernel from the hard disk */ if (read_kernel () != 0) { /* Error reading the kernel */ return 1; } /* Initialize the kernel */ init_kernel (); return 0; } /* * Transfers control to the kernel by jumping to its entry point. */ void transfer_control (void) { /* Jump to the kernel entry point */ jump_to_kernel (); } ``` 以上是x86架构/boot/grub2/i386-pc/boot.img文件的源码和注释。其中,主要包括了引导加载程序的主函数、硬件初始化函数、内核加载函数和转移控制函数等。通过这些函数的调用,boot.img文件可以成功地将计算机引导到操作系统内核。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值