Rootop 服务器运维与web架构

2023-11-28
发表者 Venus
华为S5720S交换机配置策略路由已关闭评论

华为S5720S交换机配置策略路由

目的:
将内网的一台设备访问外网时通过指定的下一跳。

# 参考:
https://support.huawei.com/enterprise/zh/doc/EDOC1000069491/df424d7a

# 创建一个acl
acl 3900
rule permit ip source 192.168.12.243 0.0.0.0
quit

# 创建分类器
traffic classifier c0 operator or
if-match acl 3900
quit


# 创建行为
traffic behavior b0 
redirect ip-nexthop 192.168.12.244
quit

# 创建策略,将分类器和行为关联。
traffic policy p1
classifier c0 behavior b0
quit

# 应用到接口或者vlan
vlan 3
traffic-policy p1 inbound

此时192.168.12.243访问外网就会通过192.168.12.244这台网关出去。

2023-11-28
发表者 Venus
使用flock防止任务计划启动多次已关闭评论

使用flock防止任务计划启动多次

比如一个脚本,每隔1分钟执行一次,由于处理速度慢,导致执行时间超过1分钟,此时任务计划又启动了一个进程处理数据。
实际要求是必须单进程处理,也就是串行处理。
之前都是通过创建一个临时文件(程序运行完成后删除)判断程序是否在运行中,如果存在则不执行。

现在发现可以通过flock命令实现保证只存在一个进程。

测试脚本:

[root@localhost ~]# cat test.sh
while true
do
	date
	sleep 1
done

执行方法:

[root@localhost ~]# flock -xn /tmp/shell.lock -c "bash /root/test.sh"

-x 是排它锁
-n 是非阻塞,也就是立即返回执行失败,$? = 1,否则就会一直等待另一个执行完。
-c 是要执行的命令
/tmp/shell.lock 是锁的路径

另起一个终端测试

[root@localhost ~]# flock -xn /tmp/shell.lock -c "bash /root/test.sh"
[root@localhost ~]# echo $?
1

可以看到程序立即执行完成,返回值为1,也就是执行失败。

2023-11-14
发表者 Venus
centos7下pyenv安装测试已关闭评论

centos7下pyenv安装测试

# github仓库,下载zip包
https://github.com/pyenv/pyenv

[root@jenkins ~]# unzip pyenv-master.zip 
[root@jenkins ~]# mv pyenv-master .pyenv
[root@jenkins ~]# echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
[root@jenkins ~]# echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
[root@jenkins ~]# echo 'eval "$(pyenv init -)"' >> ~/.bashrc
[root@jenkins ~]# source .bashrc

# 查看已安装版本
[root@jenkins ~]# pyenv versions
* system (set by /root/.pyenv/version)

# 手动下载py安装包放入到pyenv下的 cache(手动新建)目录中,防止某些情况下下载慢。
https://www.python.org/downloads/
https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz

需要下载 tar.xz 压缩格式的,不能是 tgz 的。这里用3.12.0版本测试。
[root@jenkins .pyenv]# mkdir cache

# 手动上传安装包

[root@jenkins cache]# ll
total 20096
-rw-r--r-- 1 root root 20575020 Oct  2 08:33 Python-3.12.0.tar.xz

# 安装会用到的依赖包,否则可能会提示ModuleNotFoundError: No module named 'xxx'的错误。

[root@jenkins cache]# yum install gcc make patch zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel xz-devel

# 安装
[root@jenkins cache]# pyenv install 3.12.0
Installing Python-3.12.0...

可以看到是直接安装,没有下载步骤。

# 把上传的压缩包改个名,就会变为自动下载安装。
[root@jenkins cache]# mv Python-3.12.0.tar.xz Python-3.12.0.tar.xz.bak
[root@jenkins cache]# pyenv install 3.12.0
Downloading Python-3.12.0.tar.xz...
-> https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tar.xz

# 查看已安装的版本
[root@jenkins cache]# pyenv versions
* system (set by /root/.pyenv/version)
  3.8.18
  3.9.18

# 全局切换版本
[root@jenkins ~]# pyenv global 3.8.18
[root@jenkins ~]# python -V
Python 3.8.18

# 换回系统自带版本
[root@jenkins ~]# pyenv global system

这样pip下载的包都会在.pyenv目录下,方便将其传到别的服务器,无需再安装。

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