MongDB集群部署和升级方案

******集群部署部分******

主机信息mongodb集群
192.168.1.46 
192.168.1.47 
192.168.1.48 
192.168.1.49 
192.168.1.50 
192.168.1.51 

规划
sharding 1
  192.168.1.46 
  192.168.1.47 
  192.168.1.48
  端口 28111

sharding 2
  192.168.1.49 
  192.168.1.50 
  192.168.1.51
  端口 28112

config 副本集
 192.168.1.46 
 192.168.1.47 
 192.168.1.48
  端口 28600

mongos 集群
 192.168.1.46 
 192.168.1.47 
 192.168.1.48
 端口 28700


做一个LSB 各个负载均衡IP+port
mongo:192.167.63.22:40005

[
  目前DB使用的lvs主机:
  192.167.3.169
  192.167.3.170
]

数据库版本
 3.4.24

下载
 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.4.24.tgz
 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.17.tgz[升级需要的版本]

目录规划 mkdir -p src/{a,b,c,d}
 mkdir -p /DATA/mongo_user_sale/{data,etc,logs,config,mongos}
 

部署
第一部分
1.先部署sharding副本集
  参数
  # for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  logRotate: reopen
  path: /DATA/mongo_user_sale/logs/mongo_usersale.log

# Where and how to store data.
storage:
  dbPath: /DATA/mongo_user_sale/data
  journal:
    enabled: true
  directoryPerDB: true
  engine: wiredTiger
#########storage.wiredTiger Options
  wiredTiger:
    engineConfig:
      cacheSizeGB: 24
      journalCompressor: "zlib"
      directoryForIndexes: true
    collectionConfig:
      blockCompressor: "zlib"
    indexConfig:
      prefixCompression: true

##########operationProfiling Options
operationProfiling:
   slowOpThresholdMs: 100
   mode: "all"

########ProcessManagement Options
processManagement:
  fork: true
  pidFilePath: /DATA/mongo_user_sale/data/mongod.pid

# network interfaces
net:
  port: 28111
  bindIp: 0.0.0.0
  maxIncomingConnections: 18500
  #serviceExecutor: adaptive #4.2版本
#security:
  #keyFile: /DATA/mongo_user_sale/etc/keyfile

#operationProfiling:

##########replication Options
replication:
  replSetName: usersale1Rs
  oplogSizeMB: 50240
  #secondaryIndexPrefetch: all

sharding:
  clusterRole: shardsvr    #configsvr or shardsvr

## Enterprise-Only Options

#auditLog:

#snmp:

setParameter:
  enableLocalhostAuthBypass: true
  replWriterThreadCount: 32
  wiredTigerConcurrentReadTransactions: 128
  wiredTigerConcurrentWriteTransactions: 128

第一次部署将security注释
注意:其他sharding部署注意 副本集名称和端口

2.在第一个sharding 192.168.1.46操作
  (1)编辑参数# pwd
    /DATA/mongo_user_sale/etc
     vim mongo_usersale.conf
  (2)启动
      [root@node10-133-1-46 etc]# /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/mongo_usersale.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 47385
    child process started successfully, parent exiting
      说明启动成功

  (3)配置单机副本集
    # /usr/local/mongodb-3.4.24/bin/mongo 192.168.1.46:28111/admin
    > config={_id:"usersale1Rs",members:[{_id:1,host:"192.168.1.46:28111",priority:136,tags:{'use':'user-sale-rs1-1'}}]}
    > rs.initiate(config)
    { "ok" : 1 }
    usersale1Rs:SECONDARY> 
    usersale1Rs:PRIMARY> 

  (4)创建账号
    a. 管理账号:
    usersale1Rs:PRIMARY> use admin 
      switched to db admin
    db.createUser(  
    {  
        user: "admin",  
        pwd: "tk123456",  
        roles:  
        [  
          {role: "userAdminAnyDatabase", db: "admin"},
          { role: "readAnyDatabase", db: "admin" },
          { role: "dbOwner", db: "admin" },
          { role: "userAdmin", db: "admin" },
          { role: "root", db: "admin" },
          { role: "clusterMonitor", db: "admin" },
          { role: "dbAdmin", db: "admin" },
        ]  
      }  
    )
 
  


  b. mongodb只读账号
    use admin
    db.createUser(  
    {  
        user: "readany",  
        pwd: "tk123456",  
        roles:  
        [  
          { role: "readAnyDatabase", db: "admin" },
        ]  
      }  
    )


  c. 监控用户
    use admin  
    db.createUser(  
    {  
        user: "mongodb_exporter",  
        pwd: "tk123456",  
        roles:  
        [  
          { role: "readAnyDatabase", db: "admin" },
          { role: "dbAdmin", db: "admin" }
        ]  
      }  
    )

  d. 授予抓取Oplog权限
    db.createRole({role:'sysadmin',roles:[], privileges:[ {resource:{anyResource:true},actions:['anyAction']}]})
    db.grantRolesToUser( "admin" , [ { role: "sysadmin", db: "admin" } ]) 
    db.grantRolesToUser( "readany" , [ { role: "sysadmin", db: "admin" } ]) 
       第一个admin和readany是用户名
    db.system.users.find().pretty() 查询看一下是否授权成功

  (5)重启并开启认证模块
     a. 添加认证文件
       vim keyfile
      MIIEowIBAAKCAQEAxJ4E9nfpSaEtBUUP/ypkVmzr2ORD4BUSzQXp+EMXv0oeIeW0
      vU6Jv/mvAPD0+9veCGK/LFmZGVSQZbjyYnFxx1xLCgzqkkvgX8HqaChPKySta3wi
      YHQLgBDJ4boXZoLIFlGO9UWjJTMXZSbD0Tdu4g2DL3qZLGENDLFam4gt0t2HnZ+g
      iY/9C9PKHnKqUpjfJNnWU8h09Zc4erZdM50KWxEdC4iFMKWTSOZr/AxzXC5cOYC/
      y8ALfBLlJstavp1KMG2XoQoGRRnLSX3bWqIRt60oFUq35x8slknHxOKkXxhX7583
      BfLHfWxrCU8viOp9z1yb0URUR6fotykpUz9/QwIDAQABAoIBADkCADpeRjvdCaqv
      Fl3BDttoQ5Munt7pPNljSvwxnee3ZWBRwmQqhQo85OEYcIRsXMoG2ceW71HgTlwK
      fpHLXyDIksUNUNujcbX9152/a94Fd4FU45GpcxojDwPfS+pG8GObOvNopSZzEivS
      Az21uTZ51zxwv5Jwi0cs3vDLq9/HmkPGUFpIuRq/CdZGmOh4m0HWWaKohPFHQPJ8
      lfMjAaECgYEA7RWeg6nnRzMHhNiMRw2bBURdYhDu13gorWY2wr+Xse8+oxHDrz0d
      baHbF0UWkUlTpeiQK30ygWy82/bm8v6lds12iElkY13Ua+xMxHdZkY1h2k69n/cE
      en18ESaapcX1DjWNzWCtP89g9x2p/MMljDJ/tr2xt6KxiEcxVpToo0sCgYEA1E3e
      pCLflIGbN2x3fUJkoM2aVpbaffsbLHkf8SglV9OJI7ROAvZ29xmXa7sYkN7OdXMu

        # chmod 600 keyfile 权限必须是600
     b. 将mongod shutdown
     # /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/mongo_usersale.conf  --shutdown
      将如下注释去掉
      security:
        keyFile: /DATA/mongo_user_sale/etc/keyfile
     c. 启动 /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/mongo_usersale.conf
      进入后需要认证
      db.auth('admin','tk123456')
      usersale1Rs:PRIMARY> db.auth('admin','tk123456')
      1
      usersale1Rs:PRIMARY> rs.status() 查看状态
       "members" : [
                {
                        "_id" : 1,
                        "name" : "192.168.1.46:28111",
                        "health" : 1,
                        "state" : 1,
                        "stateStr" : "PRIMARY",
                        "uptime" : 363,
                        "optime" : {
                                "ts" : Timestamp(1586659765, 1),
                                "t" : NumberLong(2)
                        },
                        "optimeDate" : ISODate("2020-04-12T02:49:25Z"),
                        "syncingTo" : "",
                        "syncSourceHost" : "",
                        "syncSourceId" : -1,
                        "infoMessage" : "",
                        "electionTime" : Timestamp(1586659413, 1),
                        "electionDate" : ISODate("2020-04-12T02:43:33Z"),
                        "configVersion" : 1,
                        "self" : true,
                        "lastHeartbeatMessage" : ""
                }
        ],
        "ok" : 1
}

  (6)复制1.46的参数文件和认证文件到47/48主机,并启动
    /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/mongo_usersale.conf 

  (7)添加节点
  rs.add({_id:2, host:"192.168.1.47:28111", priority:100,tags:{'use':'user-sale-rs1-2'}})
  rs.add({_id:3, host:"192.168.1.48:28111", priority:190,tags:{'use':'user-sale-rs1-3'}}) #添加完,该节点为primary
  注意,我设置了优先级,可以不设置


3.日志切分--每天生成一个
mongodb日志切换
mongodb日志切换路径  保留日志30天
vim /etc/logrotate.d/mongo_28111
/DATA1/mongo_28116/logs/mongo_28111.log {
    daily
    rotate 30
    dateext
    compress
    missingok
    notifempty
    sharedscripts
    copytruncate
    postrotate
        /bin/kill -SIGUSR1 `cat /DATA/mongo_user_sale/data/mongod.lock 2> /dev/null` 2> /dev/null || true
    endscript
}

启动
logrotate -vf /etc/logrotate.conf


4.压测
./ycsb load mongodb -s -P /DATA/soft/ycsb-0.12.0/workloads/workloada -threads 1024 -p recordcount=0 -p operationcount=0 -p insertstart=0 -p insertcount=330000000 -p readproportion=0.1 -p updateproportion=0.9 -p insertproportion=0 -p fieldcount=8 -p fieldlength=250 -p mongodb.url=mongodb://admin:tk123456@192.168.1.48:28111/admin?waitQueueMultiple=100 -p table=userinfo > /dev/null  2> /DATA/soft/lsbwrite &

 
 监控
 /usr/local/mongodb-3.4.24/bin//mongostat --host=192.168.1.48  --port=28111 -u admin -p "tk123456" --authenticationDatabase admin 


5.部署第二个sharding
  参考第一个部署步骤
  端口和副本集修改
  > config={_id:"usersale2Rs",members:[{_id:1,host:"192.168.1.49:28112",priority:136,tags:{'use':'user-sale-rs2-1'}}]}
    > rs.initiate(config)
  rs.add({_id:2, host:"192.168.1.50:28112", priority:100,tags:{'use':'user-sale-rs2-2'}})
  rs.add({_id:3, host:"192.168.1.51:28112", priority:90,tags:{'use':'user-sale-rs2-3'}}) 


第二部分
 部署config副本集
1.配置参数
# fordocumentation of all options, see:
#  http://docs.mongodb.org/manual/reference/configuration-options/

# where to writelogging data.
systemLog:
  destination: file
  logAppend: true
  logRotate: reopen
  path: /DATA/mongo_user_sale/logs/configsvr.log

# Where and howto store data.
storage:
  dbPath: /DATA/mongo_user_sale/config
  journal:
    enabled: true
  directoryPerDB: true
  engine: wiredTiger
#########storage.wiredTigerOptions
  wiredTiger:
    engineConfig:
      cacheSizeGB: 4
      directoryForIndexes: true
    indexConfig:
      prefixCompression: true

##########operationProfilingOptions
#operationProfiling:
   #slowOpThresholdMs: 50
   #mode: "all"

########ProcessManagementOptions
processManagement:
  fork: true
  pidFilePath: /DATA/mongo_user_sale/config/config.pid

# networkinterfaces
net:
  port: 28600
  bindIp: 0.0.0.0
  maxIncomingConnections: 15000
security:
  keyFile: /DATA/mongo_user_sale/etc/keyfile

#operationProfiling:

##########replicationOptions
replication:
  replSetName: configRS
  oplogSizeMB: 20480
  #secondaryIndexPrefetch: all

sharding:
  clusterRole: configsvr    #configsvr or shardsvr

2.启动
 # /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/config.conf
3.配置副本集
> rs.initiate( {_id: "configRS",
...    configsvr: true,
...    members: [
...       { _id: 1, host: "192.168.1.46:28600", priority:100, tags:{'use':'config-1' }}
...    ]
... } )
{ "ok" : 1 }
configRS:SECONDARY> 
configRS:PRIMARY> 

3.创建账号
 管理账号:
    usersale1Rs:PRIMARY> use admin 
      switched to db admin
    db.createUser(  
    {  
        user: "admin",  
        pwd: "tk123456",  
        roles:  
        [  
          {role: "userAdminAnyDatabase", db: "admin"},
          { role: "readAnyDatabase", db: "admin" },
          { role: "dbOwner", db: "admin" },
          { role: "userAdmin", db: "admin" },
          { role: "root", db: "admin" },
          { role: "clusterMonitor", db: "admin" },
          { role: "dbAdmin", db: "admin" },
        ]  
      }  
    )

4.启停止后,将认证参数打开
5.添加节点
rs.add({_id:2, host:"192.168.1.47:28600", priority:90, tags:{'use':'config-2'}})
rs.add({_id:3, host:"192.168.1.48:28600", priority:30, tags:{'use':'config-3'}})

【或者
 rs.initiate( {_id: "configReplSet",
   configsvr: true,
   members: [
      { _id: 1, host: "192.168.1.46:28600", priority:100, tags:{'use':'config-1' }},
      { _id: 2, host: "192.168.1.47:28600", priority:90, tags:{'use':'config-2' }},
      { _id: 3, host: "192.168.1.48:28600", priority:30, tags:{'use':'config-3' }}
   ]
} )

第二部分
 部署mongos
1.参数配置
 systemLog:
  destination: file
  path: /DATA/mongo_user_sale/logs/mongos.log
  logAppend: true
processManagement:
  fork: true
  pidFilePath: /DATA/mongo_user_sale/mongos/mongos.pid
net:
  port: 28700
  bindIp: 0.0.0.0
sharding:
  configDB: configRS/192.168.1.46:28600,192.168.1.47:28600,192.168.1.48:28600
security:
  keyFile: "/DATA/mongo_user_sale/etc/keyfile"

2.启动
  /usr/local/mongodb-3.4.24/bin/mongos -f /DATA/mongo_user_sale/etc/mongos.conf

说明:
 mongos和config创建的账号密码一致,可以和sharding不一样

 /usr/local/mongodb-3.4.24/bin/mongo 192.168.1.46:28700/admin

集群添加副本集*****
>use admin 
 db.runCommand({addshard:"usersale1Rs/192.168.1.46:28111,192.168.1.47:28111,192.168.1.48:28111",name:"usersale1_tag"});
 db.runCommand({addshard:"usersale2Rs/192.168.1.49:28112,192.168.1.50:28112,192.168.1.51:28112",name:"usersale2_tag"});
 如果有同名的数据库则添加失败:
  "errmsg" : "can't add shard 'sale2Rs/192.168.1.49:28116,192.168.1.50:28116,192.168.1.51:28116' because a local database 'ycsb' exists in another sale1_tag",
  
  >sh.status()
  databases:
        {  "_id" : "ycsb",  "primary" : "usersale1_tag",  "partitioned" : false }

 >db.runCommand({listshards:1}) 


******集群升级部分******
2. 登录mognos禁用balance
  mongos> sh.stopBalancer()

mongos> sh.isBalancerRunning()
true
mongos> sh.getBalancerState()
true

mongos> sh.status()
--- Sharding Status --- 
  sharding version: {
        "_id" : 1,
        "minCompatibleVersion" : 5,
        "currentVersion" : 6,
        "clusterId" : ObjectId("5e92898736edafe6acf3f45c")
  }
  shards:
        {  "_id" : "usersale1_tag",  "host" : "usersale1Rs/192.168.1.46:28111,192.168.1.47:28111,192.168.1.48:28111",  "state" : 1 }
        {  "_id" : "usersale2_tag",  "host" : "usersale2Rs/192.168.1.49:28112,192.168.1.50:28112,192.168.1.51:28112",  "state" : 1 }
  active mongoses:
        "3.4.24" : 3
  autosplit:
        Currently enabled: yes
  balancer:
        Currently enabled:  yes
        Currently running:  yes
NaN
        Collections with active migrations: 
                ycsb.userinfo started at Sun Apr 12 2020 11:55:04 GMT+0800 (CST)
        Failed balancer rounds in last 5 attempts:  0
        Migration Results for the last 24 hours: 
                32 : Success
  databases:
        {  "_id" : "ycsb",  "primary" : "usersale1_tag",  "partitioned" : true }
                ycsb.userinfo
                        shard key: { "_id" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                usersale1_tag   309
                                usersale2_tag   32
                        too many chunks to print, use verbose if you want to force print

mongos> sh.stopBalancer()
{ "ok" : 1 }
mongos> sh.getBalancerState()
false

3. 升级config server

  3.1 从节点 先使用3.6版本依次替换3.4 版本,并依次重启
   主节点查看 configRS:PRIMARY> rs.status()


  3.2 关闭secondary config server
    # /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/config.conf --shutdown
killing process with pid: 14654
[root@node10-133-1-48 operation]# /usr/local/mongodb-3.6.17/bin/mongod -f /DATA/mongo_user_sale/etc/config.conf
about to fork child process, waiting until server is ready for connections.
forked process: 25427
child process started successfully, parent exiting

  3.3 对于主节点,先切换成从节点
      rs.stepDown() 或调整优先级
      cfg = rs.conf()
cfg.members[1].priority = 136
rs.reconfig(cfg)

# /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/config.conf --shutdown
killing process with pid: 14654
[root@node10-133-1-48 operation]# /usr/local/mongodb-3.6.17/bin/mongod -f /DATA/mongo_user_sale/etc/config.conf


4. 升级shard
  按复制集依次处理
  3.1 从节点 先使用3.6版本依次替换3.4 版本,并依次重启
  3.2 关闭secondary shard1 server
       设置为隐藏节点
cfg = rs.conf()
cfg.members[1].priority = 0
cfg.members[1].hidden = true
rs.reconfig(cfg)
使用mongostat查看是否select还有值>1
    [root@node10-133-1-46 operation]# /usr/local/mongodb-3.4.24/bin/mongod -f /DATA/mongo_user_sale/etc/mongo_usersale.conf --shutdown
killing process with pid: 48861
[root@node10-133-1-46 operation]# 
[root@node10-133-1-46 operation]# /usr/local/mongodb-3.6.17/bin/mongod -f /DATA/mongo_user_sale/etc/mongo_usersale.conf
cfg = rs.conf()
cfg.members[1].priority = 10
cfg.members[1].hidden = false
rs.reconfig(cfg)

  3.3 
    对于主节点,先切换成从节点
    先调整优先级,让其他一台secondary成为primaryk
    然后将该节点设置为隐藏节点
      

sharding2升级步骤参考sharding1即可

5. 升级mongos 实例
  5.1 使用kill 或者 kill -2 杀掉mognos实例
    kill -2 17739
  5.2  使用3.6代替3.4 重启
    //usr/local/mongodb-3.6.17/bin/mongos -f /DATA/mongo_user_sale/etc/mongos.conf
    其他mognos 实例类似
    
6. 登录任一mongos实例重启启用balancer
  /usr/local/mongodb-3.4.18/bin/mongo --port 5080
  mongos> sh.startBalancer()
  
7. 启用后台不兼容3.6 特性
  mongos> 
  mongos>  db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
{ "ok" : 1 }

   mongos执行不输出任何: db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
   可以在sharding上执行和config执行


usersale2Rs:PRIMARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{
        "featureCompatibilityVersion" : {
                "version" : "3.4"
        },
        "ok" : 1,
        "$gleStats" : {
                "lastOpTime" : Timestamp(0, 0),
                "electionId" : ObjectId("7fffffff0000000000000004")
        },
        "$configServerState" : {
                "opTime" : {
                        "ts" : Timestamp(1586669968, 1),
                        "t" : NumberLong(3)
                }
        }
}
usersale2Rs:PRIMARY> db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
{
        "featureCompatibilityVersion" : {
                "version" : "3.6"
        },
        "ok" : 1,
        "operationTime" : Timestamp(1586670057, 521),
        "$gleStats" : {
                "lastOpTime" : Timestamp(0, 0),
                "electionId" : ObjectId("7fffffff0000000000000004")
        },
        "$configServerState" : {
                "opTime" : {
                        "ts" : Timestamp(1586670058, 589),
                        "t" : NumberLong(3)
                }
        },
        "$clusterTime" : {
                "clusterTime" : Timestamp(1586670060, 2502),
                "signature" : {
                        "hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
                        "keyId" : NumberLong(0)
                }
        }
}


重启 mongos 实例。
更改featureCompatibilityVersion后,需要重新启动所有mongos实例以获取因果一致性行为的更改。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/611972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript与Swift的异同,python像vb6

其实很多主流的编程语言都是大同小异,魔改了一下罢了。 JavaScript与Swift一样,是动态语言类型,即不用指定变量类型,会根据赋值的内容动态的判断出它的类型。与Swift不同的是,JavaScript定义变量的时候,也不需要指定变…

【已解决】c语言为什么函数运算顺序从右往左

本博文主要源于笔者正在调试的c程序,c语言的函数运算顺序一直是从右往左int a 5;add(a,a);如果按照正常思维就是(5,5),运行结果确是(6,5),这是为什么呢 问题起源 对c语言的函数运算顺序产生怀疑 问题解释原因 函数从右到左依次入栈,出栈时可以很方便…

12.1SPI驱动框架

SPI硬件基础 总线拓扑结构 引脚含义 DO(MOSI):Master Output, Slave Input, SPI主控用来发出数据,SPI从设备用来接收数据 DI(MISO) :Master Input, Slave Output, SPI主控用来发出数据,SPI从设备用来接收…

SpringMVC配置文件上传解析器实现文件上传项目实例

SpringMVC配置文件上传解析器实现文件上传项目实例 1、在pom.xml文件中添加相关依赖 <!--文件上传--> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</versio…

threejs 光带扩散动画

目录 一、创建光带 (1) 设置光带顶点 (2) 设置光带顶点透明度属性 二、光带动画 完整代码 html文件代码 js文件代码 最后展示一下项目里的效果&#xff1a; 最近项目中要求做一段光带效果动画&#xff0c;尝试着写了一下&#xff0c;下面是本次分享光带扩散动画的效果预…

C++11之智能指针

C11之智能指针 前言1、智能指针概念2. 智能指针的定义和使用2.1 auto_ptr&#xff08;C11已经抛弃&#xff09;2.2 share_ptr2.3 unique_ptr2.4 weak_ptr 前言 C程序设计中&#xff0c;动态内存的管理式通过一对运算符来完成的&#xff1a;new和delete。 使用堆内存是非常频繁…

代码随想录算法训练营第一天|数组理论基础、704二分查找、27移除元素

数组理论基础 一维数组 数组中的元素在内存空间中是连续的数组名与数组中第一个元素的地址相同&#xff08;一维数组&#xff09;数组的下标从0开始删除数组的元素其实是用后面的元素覆盖掉要删除的元素数组的长度不能改变 二维数组 二维数组是按照行存储的&#xff0c;也是…

关于json.dumps()写入文件时是utf8

json.dumps()默认情况下&#xff0c;该函数会自动处理Unicode编码。 不要直接在json.dumps()设置encodingutf-8&#xff0c;会报错 json.dumps got an unexpected keyword argument encoding 需要将json.dumps()中设置ensure_asciiFalse&#xff0c;结合open函数中的encodin…

Java解析第三方接口返回的json

在实际开发过程中&#xff0c;免不了和其他公司进行联调&#xff0c;调用第三方接口&#xff0c;这个时候我们就需要根据对方返回的数据进行解析&#xff0c;获得我们想要的字段 第一种 //这种是data里面有个list的格式 {"data": {"username": "s…

linux 网络设备驱动之报文接收

从网络上接收报文比发送它要难一些, 因为必须分配一个 sk_buff 并从一个原子性上下 文中递交给上层. 网络驱动可以实现 2 种报文接收的模式: 中断驱动和查询. 大部分驱 动采用中断驱动技术, 这是我们首先要涉及的. 有些高带宽适配卡的驱动也可能采用查询 技术; 我们在"接收…

Kali Linux——aircrack-ng无线教程

目录 一、准备 二、案例 1、连接usb无线网卡 2、查看网卡信息 3、开启网卡监听 4、扫描wifi信号 5、抓取握手包 6、强制断开连接 7、破解握手包 三、预防 一、准备 1、usb无线网卡&#xff08;笔记本也是需要用到&#xff09; 2、密码字典&#xff08;Kali 系统自带…

java句柄数过多解决办法

java句柄数过多解决办法 使用file-leak-detector指定为应用程序的javaagent&#xff0c;然后重启程序&#xff0c;通过file-leak-detector提供能力&#xff0c;可以查看句柄和线程名称的信息&#xff0c;可直接排查出是哪行代码问题 包下载地址&#xff1a;http://search.mav…

项目整体管理

整体管理之10大项目管理&#xff1a; 核心域&#xff1a;进度&#xff0c;成本&#xff0c;质量&#xff0c;范围 辅助域&#xff1a;风险&#xff0c;沟通&#xff0c;采购&#xff0c;人力资源&#xff0c;干系人 项目管理相关方&#xff1a; 招标&#xff1a;买方&#x…

Acrel-5000重点用能单位能耗在线监测系统的实际应用分析-安科瑞 蒋静

摘要&#xff1a;根据《重点用能节能办法》&#xff08;国家发展改革委等第七部委2018年15号令&#xff09;、《重点用能单位能耗在线监测系统推广建设工作方案》&#xff08;发改环资[2017]1711号&#xff09;和《关于加速推进重点用能单位能耗在线监测系统建设的通知》&#…

评估LLM在细胞数据上的实用性(1)-基本概述

基于LLM的基础模型在工业和科学领域都取得了重大进展。本报告通过八个与单细胞数据相关的下游任务的综合实验&#xff0c;评估了LLM在单细胞测序数据分析中的性能。通过将七种不同的单细胞LLM与特定任务下的baselines进行比较&#xff0c;结果发现单细胞LLMs在所有任务中可能并…

Js-基础语法(二)

运算符 赋值运算符 赋值运算符&#xff1a;对变量进行赋值的运算符 已经学过的赋值运算符&#xff1a; 将等号右边的值赋予给左边, 要求左边必须是一个容器 其他赋值运算符&#xff1a; - */% 使用这些运算符可以在对变量赋值时进行快速操作 一元运算符 众多的 JavaScrip…

固定翼仿真的切换

delta固定翼飞行器模型 接着这篇文章文章链接&#xff0c;我们对飞行器模型进行改进&#xff0c; 我们知道&#xff0c;我们打开仿真模型 gazebo --verbose zephyr_ardupilot_demo.world 我们注意这最后一个语句 <model name"zephyr_delta_wing_demo">//加载z…

图像分类任务的可视化脚本,生成类别json字典文件

1. 前言 之前的图像分类任务可视化&#xff0c;都是在train脚本里&#xff0c; 用torch中dataloader将图片和类别加载&#xff0c;然后利用matplotlib库进行可视化。 如这篇文章中&#xff1a;CNN 卷积神经网络对染色血液细胞分类(blood-cells) 在分类任务中&#xff0c;必定…

零基础学习数学建模——(一)什么是数学建模

本篇博客将详细介绍什么是数学建模。 文章目录 个人简介什么是数学建模&#xff08;一&#xff09;引例&#xff1a;高中数学里的简单线性规划问题数学建模的定义及用途数学建模的定义数学建模的用途 正确认识数学建模 个人简介 ​ 本人在本科阶段获得过国赛省一、mathorcup数…

ssm基于Web的汽车客运订票系统的设计与实现论文

毕业设计&#xff08;论文&#xff09; 汽车客运订票系统 姓 名 ______________________ 学 号 ______________________ 班 级 ______________________ 专 业 ______________________ 院 部 ______________________ 指导教师 ______________________ 年 月 日 目 录 目 录 …