分类目录归档:未分类

pkg_resources.DistributionNotFound: Flask==0.10.1

现象:
装完新版mrq运行示例又报错:

[root@web4 test-mrq]# mrq-run tasks.Fetch url http://www.google.com
Traceback (most recent call last):
  File "/bin/mrq-run", line 5, in 
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 3011, in 
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 626, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: Flask==0.10.1

解决方法:
yum install python-flask

继续报错:

[root@web4 test-mrq]# mrq-run tasks.Fetch url http://www.google.com
Traceback (most recent call last):
  File "/bin/mrq-run", line 5, in 
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 3011, in 
    parse_requirements(__requires__), Environment()
  File "/usr/lib/python2.7/site-packages/pkg_resources.py", line 626, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: subprocess32==3.2.5

ImportError: cannot import name _NONE

故障现象:
运行pip示例报错

[root@i test-mrq]# mrq-run tasks.Fetch url http://www.google.com
2017-03-18 23:11:18.162884 [DEBUG] mongodb_jobs: Connecting to MongoDB at [('127.0.0.1', 27017)]/mrq...
Traceback (most recent call last):
  File "/usr/bin/mrq-run", line 9, in 
    load_entry_point('mrq==0.1.18', 'console_scripts', 'mrq-run')()
  File "/usr/lib/python2.7/site-packages/mrq/bin/mrq_run.py", line 52, in main
    job = worker_class.job_class(None)
  File "/usr/lib/python2.7/site-packages/mrq/job.py", line 52, in __init__
    self.collection = context.connections.mongodb_jobs.mrq_jobs
  File "/usr/lib/python2.7/site-packages/mrq/utils.py", line 160, in __getattr__
    value = factory(attr)
  File "/usr/lib/python2.7/site-packages/mrq/context.py", line 159, in _connections_factory
    db = MongoClient(config_obj, **kwargs)[mongo_name]
  File "/usr/lib64/python2.7/site-packages/pymongo/mongo_client.py", line 461, in __init__
    self._topology.open()
  File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 151, in open
    self._ensure_opened()
  File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 378, in _ensure_opened
    self._update_servers()
  File "/usr/lib64/python2.7/site-packages/pymongo/topology.py", line 441, in _update_servers
    server.open()
  File "/usr/lib64/python2.7/site-packages/pymongo/server.py", line 46, in open
    self._monitor.open()
  File "/usr/lib64/python2.7/site-packages/pymongo/monitor.py", line 78, in open
    self._executor.open()
  File "/usr/lib64/python2.7/site-packages/pymongo/periodic_executor.py", line 83, in open
    thread.start()
  File "/usr/lib64/python2.7/threading.py", line 746, in start
    _start_new_thread(self.__bootstrap, ())
  File "/usr/lib64/python2.7/site-packages/gevent/thread.py", line 40, in start_new_thread
    greenlet = Greenlet.spawn(function, *args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/gevent/greenlet.py", line 201, in spawn
    g = cls(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/gevent/greenlet.py", line 75, in __init__
    hub = get_hub()
  File "/usr/lib64/python2.7/site-packages/gevent/hub.py", line 169, in get_hub
    hub = _threadlocal.hub = hubtype(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/gevent/hub.py", line 268, in __init__
    loop_class = _import(self.loop_class)
  File "/usr/lib64/python2.7/site-packages/gevent/hub.py", line 198, in _import
    return _import(path[-1])
  File "/usr/lib64/python2.7/site-packages/gevent/hub.py", line 210, in _import
    x = __import__(module)
  File "/usr/lib/python2.7/site-packages/mrq/monkey.py", line 150, in mrq_safe_import
    result = orig_import(*args, **kwargs)
  File "core.pyx", line 10, in init gevent.core (gevent/gevent.core.c:41156)
  File "/usr/lib/python2.7/site-packages/mrq/monkey.py", line 150, in mrq_safe_import
    result = orig_import(*args, **kwargs)
  File "/usr/lib64/python2.7/site-packages/gevent/signal.py", line 19, in 
    from gevent._util import _NONE as _INITIAL
ImportError: cannot import name _NONE

解决方法:
cd /usr/local/src
wget https://codeload.github.com/pricingassistant/mrq/zip/master
mv master mrq-master.zip
unzip mrq-master.zip
pip install mrq -e /usr/local/src/mrq-master

原因:
gevent.coros过时了,被gevent.lock替代了

solr 突然卡死, 重启失败,kill没反应,kill -9才杀死,重启后一会儿才好了

# service solr restart
Java not found, or an error was encountered when running java.
A working Java 8 JRE is required to run Solr!
Please install latest version of Java 8 or set JAVA_HOME properly.
Command that we tried: ‘java -version’, with response:
Error occurred during initialization of VM
java.lang.OutOfMemoryError: unable to create new native threadDebug information:
JAVA_HOME: N/A
Active Path:

出现这种问题的原因时solr内存配置不足,参考:

solr内存配置,solr时区配置

LVM新加磁盘

新加磁盘为: /dev/vdc
LVM vg名称为: vg1

vgextend vg1 /dev/vdc

 

一次无损减小磁盘空间

[root@i ~]#
[root@i ~]# vgex
vgexport vgextend
[root@i ~]# vgex
vgexport vgextend
[root@i ~]# vgextend vg1 /dev/xvdb
Physical volume “/dev/xvdb” successfully created.
Volume group “vg1” successfully extended
[root@i ~]#
[root@i ~]#
[root@i ~]# ll
total 0
[root@i ~]# vg
vgcfgbackup vgchange vgconvert vgdisplay vgextend vgimportclone vgmknodes vgremove vgs vgsplit
vgcfgrestore vgck vgcreate vgexport vgimport vgmerge vgreduce vgrename vgscan
[root@i ~]# lv
lvchange lvcreate lvextend lvmchange lvmconfig lvmdump lvmpolld lvmsar lvremove lvresize lvscan
lvconvert lvdisplay lvm lvmconf lvmdiskscan lvmetad lvmsadc lvreduce lvrename lvs
[root@i ~]# pv
pvchange pvck pvcreate pvdisplay pvmove pvremove pvresize pvs pvscan
[root@i ~]# pvmove /dev/xvdb
No data to move for vg1
[root@i ~]# pvmove /dev/xvdi
Insufficient free space: 2292 extents needed, but only 1279 available
Unable to allocate mirror extents for pvmove0.
Failed to convert pvmove LV to mirrored
[root@i ~]#
[root@i ~]#
[root@i ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 41152832 2672832 36366516 7% /
devtmpfs 931496 0 931496 0% /dev
tmpfs 941156 0 941156 0% /dev/shm
tmpfs 941156 332 940824 1% /run
tmpfs 941156 0 941156 0% /sys/fs/cgroup
/dev/mapper/vg1-lvLog 3948224 16412 3708176 1% /mnt/log
/dev/mapper/vg1-lvData 5029504 453948 4297028 10% /mnt/data
tmpfs 188232 0 188232 0% /run/user/0
[root@i ~]#
[root@i ~]#
[root@i ~]# umount /mnt/log
[root@i ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 41152832 2672832 36366516 7% /
devtmpfs 931496 0 931496 0% /dev
tmpfs 941156 0 941156 0% /dev/shm
tmpfs 941156 332 940824 1% /run
tmpfs 941156 0 941156 0% /sys/fs/cgroup
/dev/mapper/vg1-lvData 5029504 453948 4297028 10% /mnt/data
tmpfs 188232 0 188232 0% /run/user/0
[root@i ~]# e2fsck -f /dev/vg
vg1/ vga_arbiter
[root@i ~]# e2fsck -f /dev/vg
vg1/ vga_arbiter
[root@i ~]# e2fsck -f /dev/vg1/lvLog
e2fsck 1.42.9 (28-Dec-2013)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/vg1/lvLog: 14/262144 files (0.0% non-contiguous), 53335/1036288 blocks
[root@i ~]# resize -f /dev/vg1/lvLog
resize2fs resizecons resizepart
[root@i ~]# resize2fs -f /dev/vg1/lvLog 500M
resize2fs 1.42.9 (28-Dec-2013)
Resizing the filesystem on /dev/vg1/lvLog to 128000 (4k) blocks.
The filesystem on /dev/vg1/lvLog is now 128000 blocks long.

[root@i ~]# lvresize -L 500M /dev/vg1/lvLog 500M
Physical Volume “500M” not found in Volume Group “vg1”.
[root@i ~]# lvresize -L 500M /dev/vg1/lvLog
WARNING: Reducing active logical volume to 500.00 MiB.
THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce vg1/lvLog? [y/n]: Y
Size of logical volume vg1/lvLog changed from 3.95 GiB (1012 extents) to 500.00 MiB (125 extents).
Logical volume vg1/lvLog successfully resized.
[root@i ~]# mount -a
[root@i ~]# df -lh
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 40G 2.6G 35G 7% /
devtmpfs 910M 0 910M 0% /dev
tmpfs 920M 0 920M 0% /dev/shm
tmpfs 920M 332K 919M 1% /run
tmpfs 920M 0 920M 0% /sys/fs/cgroup
/dev/mapper/vg1-lvData 4.8G 444M 4.1G 10% /mnt/data
tmpfs 184M 0 184M 0% /run/user/0
/dev/mapper/vg1-lvLog 364M 6.1M 323M 2% /mnt/log
[root@i ~]# ll
total 0
[root@i ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 41152832 2672836 36366512 7% /
devtmpfs 931496 0 931496 0% /dev
tmpfs 941156 0 941156 0% /dev/shm
tmpfs 941156 332 940824 1% /run
tmpfs 941156 0 941156 0% /sys/fs/cgroup
/dev/mapper/vg1-lvData 5029504 453948 4297028 10% /mnt/data
tmpfs 188232 0 188232 0% /run/user/0
/dev/mapper/vg1-lvLog 372680 6192 330652 2% /mnt/log
[root@i ~]# cd /mnt/log/
[root@i log]# ll
total 24
drwx—— 2 root root 16384 Nov 7 02:59 lost+found
drwxr-xr-x 2 redis redis 4096 Jan 13 20:10 mongodb
-rw-r–r– 1 root root 194 Mar 9 21:56 php_errors.log
[root@i log]#
[root@i log]#
[root@i log]#
[root@i log]# cd
[root@i ~]#
[root@i ~]#
[root@i ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/xvda1 41152832 2672836 36366512 7% /
devtmpfs 931496 0 931496 0% /dev
tmpfs 941156 0 941156 0% /dev/shm
tmpfs 941156 332 940824 1% /run
tmpfs 941156 0 941156 0% /sys/fs/cgroup
/dev/mapper/vg1-lvData 5029504 453948 4297028 10% /mnt/data
tmpfs 188232 0 188232 0% /run/user/0
/dev/mapper/vg1-lvLog 372680 6192 330652 2% /mnt/log
[root@i ~]#

API 的查询语言 GraphQL

GraphQL 是一个由Facebook提出的 应用层查询语言. 使用 GraphQL, 你可以基于图模式定义你的后端. 然后客户端就可以请求所需要的数据集。

因此, 你不必因为客户端数据需求的变更而改变你的后端. 这解决了管理REST API中的最大的问题.

GraphQL同样能够让客户端程序高效地批量获取数据. 例如, 看一看下面这个GraphQL请求:

{
  latestPost {
    _id,
    title,
    content,
    author {
      name
    },
    comments {
      content,
      author {
        name
      }
    }
  }
}

这个 GraphQL 请求获取了一篇博客文章和对应评论与作者信息的数据. 下面是请求的返回结果:

{
  "data": {
    "latestPost": {
      "_id""03390abb5570ce03ae524397d215713b",
      "title""New Feature: Tracking Error Status with Kadira",
      "content""Here is a common feedback we received from our users ...",
      "author": {
        "name""Pahan Sarathchandra"
      },
      "comments": [
        {
          "content""This is a very good blog post",
          "author": {
            "name""Arunoda Susiripala"
          }
        },
        {
          "content""Keep up the good work",
          "author": {
            "name""Kasun Indi"
          }
        }
      ]
    }
  }
}

如果你使用的是REST的话,你需要调用多个REST API的请求才能获取这些信息。

GraphQL是一个规范

因此, 它可以用于任何平台或语言. 它有一个参考的实现 JavaScript,  由Facebook维护. 还有许多社区维护的实现有许多种语言。

介绍内容来自 简书

文章来源:https://www.oschina.net/p/graphql?fromerr=nRJiZA8n

Threads_running=54 exceeds its critical threshold 50

一般是负载过高,自动中断

加大这个阈值即可–critical-load Threads_running=400 加到400

pt-online-schema-change –user root
–password xxxxx
–host localhost
D=XXX,t=XXXXX
–execute
–alter “ADD UNIQUE INDEX invite_code (invite_code ASC)”
–nocheck-replication-filters
–charset utf8mb4
–max-load Threads_running=10
–critical-load Threads_running=400
–chunk-time=2.0
–no-check-alter