Rootop 服务器运维与web架构

2023-11-01
发表者 Venus
linux中磁盘sda变成sdb,sdb变成sda,盘符混乱的问题已关闭评论

linux中磁盘sda变成sdb,sdb变成sda,盘符混乱的问题

esxi虚拟化安装的虚拟机,添加了500G数据盘,安装完系统后要创建分区,并格式化挂载数据盘发现盘符为sda。
系统盘盘符为sdb,当时并未在意这个问题。

安装完docker版的gitlab后,关闭selinux,关闭firewalld、update系统等操作后,重启系统,发现gitlab里创建的仓库不见了。

以为是docker的问题,没有做持久化,就又创建了个仓库,重启测试看看会不会丢失,发现之前的仓库又回来了。

无意间执行 df -h 看到数据盘(fstab里配置的为sda1)没有挂载。

fdisk -l 时发现数据盘已经变为sdb1,以为当时分区时记错了,实际并不是,是由于盘符混乱导致的。

原因是内核扫描硬盘分配盘符,顺序出了问题。
解决这个问题就是使用uuid的方式挂载,不再用传统的盘符方式(这么多年第一次遇到)。

# 查看硬盘uuid
[root@localhost ~]# ll /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Nov  1 11:38 0b63526f-9f3d-4695-ae2c-a6e86e2195e9 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Nov  1 11:38 79271dc0-5c38-47b1-8c24-b546c04f917e -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov  1 11:38 f14bc246-d1a7-4acb-af7c-c49df2074672 -> ../../sda2

# 或者执行 blkid 命令
[root@localhost ~]# blkid 
/dev/sdb1: UUID="0b63526f-9f3d-4695-ae2c-a6e86e2195e9" TYPE="ext4" PARTUUID="a6b8773b-01"
/dev/sda2: UUID="f14bc246-d1a7-4acb-af7c-c49df2074672" TYPE="ext4" PARTUUID="b118ae54-02"
/dev/sda1: UUID="79271dc0-5c38-47b1-8c24-b546c04f917e" TYPE="ext4" PARTUUID="b118ae54-01"

# 挂载
[root@localhost ~]# cat /etc/fstab 
UUID=0b63526f-9f3d-4695-ae2c-a6e86e2195e9	/home	ext4	defaults 0 0



# 验证重启会不会导致盘符发生变化。
[root@localhost ~]# ll /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Nov  1 12:39 0b63526f-9f3d-4695-ae2c-a6e86e2195e9 -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov  1 12:39 79271dc0-5c38-47b1-8c24-b546c04f917e -> ../../sdb1
lrwxrwxrwx 1 root root 10 Nov  1 12:39 f14bc246-d1a7-4acb-af7c-c49df2074672 -> ../../sdb2

# 重启 reboot
[root@localhost ~]# ll /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Nov  1 13:01 0b63526f-9f3d-4695-ae2c-a6e86e2195e9 -> ../../sdb1
lrwxrwxrwx 1 root root 10 Nov  1 13:01 79271dc0-5c38-47b1-8c24-b546c04f917e -> ../../sda1
lrwxrwxrwx 1 root root 10 Nov  1 13:01 f14bc246-d1a7-4acb-af7c-c49df2074672 -> ../../sda2

2023-10-12
发表者 Venus
aws DMS 数据库迁移服务已关闭评论

aws DMS 数据库迁移服务

目的:将云服务器中的mysql数据库迁移到aws的RDS(mysql)数据库中

例如将腾讯云cvm中自建的mysql数据库挪到aws 的rds中,先设置端点,一个源(腾讯云),一个目标(需要先创建aws的RDS数据库)。
1、创建 复制实例
注意先创建 子网组

2、配置端点

注意要在源端点中刷新架构。
刷新架构需要时间,重复刷新会提示:
Schema refresh is already in progress
3、迁移任务中选择源数据库(此处叫 架构)

# 官方资料:
https://repost.aws/zh-Hans/knowledge-center/migrate-mysql-rds-dms
https://docs.aws.amazon.com/zh_cn/dms/latest/userguide/Welcome.html

2023-10-07
发表者 Venus
docker挂载宿主机文件修改后容器内不同步问题已关闭评论

docker挂载宿主机文件修改后容器内不同步问题

通过docker -v 参数挂载了配置文件到容器内。
发现在宿主机上改完后,进入容器内查看此文件并没有同步过来。

实际是因为-v 挂载文件(包括文件夹)是挂载的inode号,通过vi修改文件后inode号发生变化,但容器内还是旧的inode号。

参考:https://blog.csdn.net/biao0309/article/details/105186106 文章内容。
当使用vim之类的编辑器进行保存时,它不是直接保存文件,而是采用了备份、替换的策略,
就是编辑时,是创建一个新的文件,在保存的时候,把备份文件替换源文件,这个时候文件的 inode 就发生了变化,
而原来 inode 对应的文件其实并没有修改,也就是容器内的文件没有变化。
当重启容器的时候,会挂载新的 inode

# 测试,查看当前配置文件inode号为 4068031
root@server:/data/www/rgs/conf# stat www.conf 
  File: www.conf
  Size: 810       	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 4068031     Links: 1
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2023-10-07 05:50:30.326634010 +0000
Modify: 2023-10-07 05:50:30.326634010 +0000
Change: 2023-10-07 05:50:30.326634010 +0000
 Birth: -

# 随便改点东西,添加个空行都可以。
root@server:/data/www/rgs/conf# vi www.conf 

# 再次查看inode号变为 4068032
root@server:/data/www/rgs/conf# stat www.conf 
  File: www.conf
  Size: 811       	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 4068032     Links: 1
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2023-10-07 05:58:27.874527154 +0000
Modify: 2023-10-07 05:58:27.874527154 +0000
Change: 2023-10-07 05:58:27.874527154 +0000
 Birth: -


# 在容器内查看,还是4068031
root@404b0ceb1aea:/var/www/html# cd /usr/local/etc/php-fpm.d/
root@404b0ceb1aea:/usr/local/etc/php-fpm.d# stat www.conf
  File: www.conf
  Size: 810       	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 4068031     Links: 0
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2023-10-07 05:58:22.458398126 +0000
Modify: 2023-10-07 05:50:30.326634010 +0000
Change: 2023-10-07 05:58:27.874527154 +0000
 Birth: 2023-10-07 05:50:30.326634010 +0000
root@404b0ceb1aea:/usr/local/etc/php-fpm.d# 

2023-09-28
发表者 Venus
sftp 限制目录及禁止ssh登录已关闭评论

sftp 限制目录及禁止ssh登录

需求:通过sftp拉取服务器某个目录下的文件,并禁止此用户切换目录及ssh登录。

# 创建目录,将用户锁定到此目录下。
[root@localhost ~]# mkdir -p /data/www/sftp

# ssh配置文件
[root@localhost ~]# cat /etc/ssh/sshd_config|grep -vE "^#|^$"
Include /etc/ssh/sshd_config.d/*.conf
AuthorizedKeysFile	.ssh/authorized_keys

### 最后追加下面配置 ###
Subsystem       sftp    internal-sftp
Match User sftp
ChrootDirectory /data/www/sftp
AllowTcpForwarding no
X11Forwarding no

注意把原先的 Subsystem 开头那行注释掉。
如果想配置多个账号,就再添加一段配置。

Match User user2
ChrootDirectory /data/www/user2
AllowTcpForwarding no
X11Forwarding no

Match User为要匹配的用户,也就就是针对哪个用户做限制。一定要设置,否则root账号就无法ssh登录系统了。
这里创建一个用户为sftp并设置shell为nologin

[root@localhost ~]# useradd -s /sbin/nologin sftp

这样就禁止了用户通过ssh登录服务器,但sftp可以用。

注意这个路径 /data/www/sftp 属主属组必须为root,父级目录也一样,直到/目录。
否则secure日志会报下面错误

fatal: bad ownership or modes for chroot directory component "/data/www/sftp" [postauth]

在此目录下创建一个文件夹,使php运行用户有权限写入文件。

mkdir daily_critical_file_reports
chown www-data:www-data daily_critical_file_reports

这样sftp用户就被锁定在 /data/www/sftp 目录下,且无法创建、删除文件夹及文件。

2023-09-14
发表者 Venus
安装mysql8.0.33报错已关闭评论

安装mysql8.0.33报错

系统版本:almalinux9.2

[root@db1 ~]# cat /etc/redhat-release 
AlmaLinux release 9.2 (Turquoise Kodkod)
[root@db1 ~]# uname -r
5.14.0-284.25.1.el9_2.x86_64

目的:安装mysql8.0.33二进制版本

在拷贝启动脚本时报了一个错误提示,如下:

cp: cannot create regular file '/etc/init.d/mysql': No such file or directory

在这个版本的系统中默认不安装chkconfig包用不了service命令,所以此路径不存在,需要手动安装下。

[root@db1 install-mysql8_0_33]# yum install -y chkconfig

# 在执行mysql命令进入控制台时,又报了个错

mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

# 查看mysql命令依赖的库

[root@db1 install-mysql8_0_33]# ldd /usr/local/mysql/bin/mysql |grep libtinfo
	libtinfo.so.5 => not found

# 查找系统中libtinfo开头的库文件

[root@db1 install-mysql8_0_33]# find / -name "libtinfo.so*"
/usr/lib64/libtinfo.so.6.2
/usr/lib64/libtinfo.so.6

# 做个软连接,把依赖的5版本链接到6版本上

[root@db1 install-mysql8_0_33]# ln -s /usr/lib64/libtinfo.so.6.2 /usr/lib64/libtinfo.so.5

再次执行mysql命令没有报错了。

# 查看这个库文件是哪个包提供的额

[root@db2 ~]# rpm -qf /usr/lib64/libtinfo.so.6
ncurses-libs-6.2-8.20210508.el9.x86_64

关于linux下的动态链接库资料参考:https://www.zhihu.com/tardis/bd/art/235551437