Rootop 服务器运维与web架构

2021-01-26
发表者 Venus
mongodb二进制版本命令行参数启动加身份认证已关闭评论

mongodb二进制版本命令行参数启动加身份认证

下载地址:https://www.mongodb.com/download-center/community
这里下载的版本:https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.6.tgz

这里解压到 /home/software/mongodb 目录。
然后创建2个目录用于存放日志和数据。

[root@db-mongo ~]# mkdir /home/software/mongodb/log
[root@db-mongo ~]# mkdir /home/software/mongodb/data

# 先用不带身份认证参数启动(–auth)

[root@db-mongo ~]# /home/software/mongodb/bin/mongod --logpath /home/software/mongodb/log/log.log --dbpath /home/software/mongodb/data --maxConns 65535 --bind_ip_all --port 27017 --fork

# 命令行关闭服务,需要指定db数据目录

[root@db-mongo ~]# /home/software/mongodb/bin/mongod --shutdown --dbpath /home/software/mongodb/data/

# mongo控制台关闭

[root@db-mongo ~]# /home/software/mongodb/bin/mongo
> db.shutdownServer()

或者用kill 15 发送停止信号。

# 查看库

[root@db-mongo ~]# /home/software/mongodb/bin/mongo
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

# 切换库,如果库不存在,则会创建。

> use test
switched to db test

但此时数据库为空,show dbs看不到。

# 为admin库设置用户名密码,角色为超级管理员

> use admin
switched to db admin
> db.createUser({user:'root',pwd:'111111',roles:['root']})  #只有admin数据库才有root角色

Successfully added user: { "user" : "root", "roles" : [ "root" ] }

# 修改为带认证参数启动mongodb

[root@db-mongo ~]# /home/software/mongodb/bin/mongod --logpath /home/software/mongodb/log/log.log --dbpath /home/software/mongodb/data --maxConns 65535 --bind_ip_all --port 27017 --fork --auth
[root@db-mongo ~]# /home/software/mongodb/bin/mongo
> show dbs
> 

发现看不到前面3个库了,因为需要认证后才能看。

# 控制台认证admin库的账号密码

> use admin
switched to db admin
> db.auth("root","111111")
1
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB

# 新建一个库,并设置密码,注意密码中不要带@艾特符号,mongodb是一个库一个账号。

> use rootop
> db.createUser({
user:"aaa",
pwd:"aaa###bbb",
roles:[
{"role":"readWrite","db":"rootop"},
{"role":"dbAdmin","db":"rootop"}
]})

# 插入数据

> db.rootop.insert({"user":"aaa"})
WriteResult({ "nInserted" : 1 })

# 启动关闭脚本保存为 mon.sh

#!/bin/bash
need_pass="--auth"
if [ "$2" == "false" ];then
	need_pass=""
fi

case $1 in
 start)
	/home/software/mongodb/bin/mongod --logpath /home/software/mongodb/log/log.log --dbpath /home/software/mongodb/data --maxConns 65535 --bind_ip_all --port 27017 --journal --fork $need_pass --wiredTigerCacheSizeGB=1
	;;
 stop)
	/home/software/mongodb/bin/mongod --shutdown --dbpath /home/software/mongodb/data/
	;;
	*)
	echo sh mon.sh start [false]/stop
	;;
esac

在测试环境发现mongo内存占用挺大,限制下内存。
# 限制内存参数,加到启动参数里。
比如限制为1G

--wiredTigerCacheSizeGB=1

# mongodb官方客户端
https://www.mongodb.com/download-center/compass

# 导出指定库,注意用库所对应的账密

[root@db-mongo ~]# /home/software/mongodb/bin/mongodump -h 127.0.0.1 --port 27017 -u root -p 123456 -d xxx -o /root/backup/xxx # -o 保存备份的目录

# 导入指定库,注意用库所对应的账密

[root@db-mongo ~]# /home/software/mongodb/bin/mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 -d xxx --drop /root/backup/xxx

# 备份脚本,注意备份哪个库,就用哪个库的账号

#!/bin/bash
mongodump=/home/software/mongodb/bin/mongodump 
host=127.0.0.1
port=27017
user=root
pass=123456
db=xxx
path=/home/mongobak
dir_name=$(date +%Y-%m-%d-%H-%M-%S)
$mongodump -h $host --port $port -u $user -p $pass -d $db -o $path/$db-$dir_name

2021-01-05
发表者 Venus
xshell4或者xftp连接报 找不到匹配的outgoing encryption算法已关闭评论

xshell4或者xftp连接报 找不到匹配的outgoing encryption算法

我这里用的是xmanager4版本。

解决方法一般都是修改连接配置文件,把加密里面的算法勾上。这个百度出来的大都是这个方法。

另一种方法在 https://access.redhat.com/es/solutions/895853
注释掉ssh指定的加密算法

[root@centos ~]# cat /etc/ssh/sshd_config | grep Ciphers
# Ciphers and keying
Ciphers aes128-ctr,aes192-ctr,aes256-ctr

把上面指定的加密方式参数注释掉,重启ssh服务。

最靠谱的还是升级xshell,4版本挺旧了。

2020-12-03
发表者 Venus
yum仓库配置文件变量$releaseve $arch $basearch含义已关闭评论

yum仓库配置文件变量$releaseve $arch $basearch含义

官方文档:
https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/system_administrators_guide/ch-yum#sec-Using_Yum_Variables

9.5.3. Using Yum Variables
You can use and reference the following built-in variables in yum commands and in all yum configuration files (that is, /etc/yum.conf and all .repo files in the /etc/yum.repos.d/ directory):

$releasever
You can use this variable to reference the release version of Red Hat Enterprise Linux.
Yum obtains the value of $releasever from the distroverpkg=value line in the /etc/yum.conf configuration file.
If there is no such line in /etc/yum.conf, then yum infers the correct value by deriving the version number from the redhat-releaseproduct package that provides the redhat-release file.
用 $releasever 变量可以获取rhel发行版。
yum从/etc/yum.conf配置文件中的distroverpkg参数指定的rpm包获取$releasever的值。
如果没有distroverpkg参数配置,那么yum会从 redhat-release 包提供的redhat-release文件推导出版本号。
上面是rhel的官方文档,如果是centos的话,那么就是 centos-release 这个包。

$arch
You can use this variable to refer to the system’s CPU architecture as returned when calling Python’s os.uname() function.
Valid values for $arch include: i586, i686 and x86_64.
获取cpu架构,包括i586、i686、x86_64

$basearch
You can use $basearch to reference the base architecture of the system.
For example, i686 and i586 machines both have a base architecture of i386, and AMD64 and Intel 64 machines have a base architecture of x86_64.
获取cpu架构组,比如 i386、x86_64

[root@MiWiFi-RA69-srv etc]# cat /etc/yum.conf 
略```
distroverpkg=centos-release

[root@MiWiFi-RA69-srv etc]# rpm -qi centos-release
Name        : centos-release
Version     : 7
Release     : 3.1611.el7.centos

版本号就是7
如:阿里云centos7.repo
[base]
name=CentOS-$releasever - Base - mirrors.aliyun.com
failovermethod=priority
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
        http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/
        http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/

根据变量解析出来就是
http://mirrors.aliyun.com/centos/7/os/x86_64/
http://mirrors.aliyuncs.com/centos/7/os/x86_64/
http://mirrors.cloud.aliyuncs.com/centos/7/os/x86_64/

2020-11-24
发表者 Venus
python virtualenv虚拟环境已关闭评论

python virtualenv虚拟环境

virtualenv比较合适同一个python版本下,同软件包不同版本的环境独立。

# 通过pip安装功能
[root@MiWiFi-RA69-srv]# pip install virtualenv

# 创建一个文件夹,在此生成虚拟环境
[root@MiWiFi-RA69-srv]# mkdir new && cd new

# 创建
[root@MiWiFi-RA69-srv new]# virtualenv env
ImportError: No module named zipp 得到一个报错
[root@MiWiFi-RA69-srv new]# pip install zipp==1.2.0

# 重新创建
ImportError: No module named configparser 得到一个报错
[root@MiWiFi-RA69-srv new]# pip install configparser==3.5.0

[root@MiWiFi-RA69-srv new]# virtualenv env

# 创建一个不包含任何第三方包的独立环境 --no-site-packages
[root@MiWiFi-RA69-srv new]# virtualenv --no-site-packages venv

# 进入环境
[root@MiWiFi-RA69-srv new]# source env/bin/activate
# 离开环境
(env) [root@MiWiFi-RA69-srv new]# deactivate 

# 删除环境
[root@MiWiFi-RA69-srv new]# rm -rf env

如果需要其他python版本,则需要在系统中先安装目标版本,再通过-p参数指定创建环境。
virtualenv -p /usr/bin/python2.7 env

之前有写过conda实现多个py版本,它有个好处就是可以直接指定python版本,会自己下载,免去单独安装的步骤。

2020-11-24
发表者 Venus
Cannot assign requested address已关闭评论

Cannot assign requested address

代码连接数据库报错:

根据提示是说无法分配请求地址,这个问题随便一搜就知道是端口不足造成的。
查了下系统网络连接状态,发现是连接redis造成,没有使用redis连接池,导致大量time_wait连接状态没及时释放。再加上其他服务连接造成端口不足。

# 先通过修改内核参数解决,临时生效

sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_timestamps=1
sysctl -w net.ipv4.tcp_tw_recycle=1
# 增大可用源端口范围
sysctl -w net.ipv4.ip_local_port_range="10000 65000"

注意:
4.12内核版本开始移除了 tcp_tw_recycle 配置