brctl 命令详解

安装网桥管理工具包:bridge-utile

“`
# yum install bridge-utils -y
“`

命令参数

Usage: brctl [commands]
commands:
        addbr           <bridge>                add bridge
        delbr           <bridge>                delete bridge
        addif           <bridge> <device>       add interface to bridge
        delif           <bridge> <device>       delete interface from bridge
        setageing       <bridge> <time>         set ageing time
        setbridgeprio   <bridge> <prio>         set bridge priority
        setfd           <bridge> <time>         set bridge forward delay
        sethello        <bridge> <time>         set hello time
        setmaxage       <bridge> <time>         set max message age
        sethashel       <bridge> <int>          set hash elasticity
        sethashmax      <bridge> <int>          set hash max
        setmclmc        <bridge> <int>          set multicast last member count
        setmcrouter     <bridge> <int>          set multicast router
        setmcsnoop      <bridge> <int>          set multicast snooping
        setmcsqc        <bridge> <int>          set multicast startup query count
        setmclmi        <bridge> <time>         set multicast last member interval
        setmcmi         <bridge> <time>         set multicast membership interval
        setmcqpi        <bridge> <time>         set multicast querier interval
        setmcqi         <bridge> <time>         set multicast query interval
        setmcqri        <bridge> <time>         set multicast query response interval
        setmcqri        <bridge> <time>         set multicast startup query interval
        setpathcost     <bridge> <port> <cost>  set path cost
        setportprio     <bridge> <port> <prio>  set port priority
        setportmcrouter <bridge> <port> <int>   set port multicast router
        show            [ <bridge> ]            show a list of bridges
        showmacs        <bridge>                show a list of mac addrs
        showstp         <bridge>                show bridge stp info
        stp             <bridge> {on|off}       turn stp on/off

“`
使用brctl命令创建网桥br1
“`
# brctl addbr br1
“`

删除网桥br1
“`
# brctl delbr br1
“`

将eth0端口加入网桥br1
“`
# brctl addif br1 eth0
“`

删除eth0端口加入网桥br1
“`
# brctl delif br1 eth0
“`
查询网桥信息

“`
# brctl show
# brctl show br1
“`

利用Ambari进行hdp小版本升级

* 注意事项:

  • 升级描述:当前HDP版本2.2.0.0,升级版本2.2.6.0;
  • 手动升级(命令行)方式官方文档:http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.2.6/bk_upgrading_hdp_manually/content/ch_upgrade_2_1.html

1. 升级前准备工作

1.1 重启服务* 注:因为上次升级Ambari metrics没有重启服务,所以这次重启所有服务以应用上一次的配置更新;

1.2 备份所有服务的配置文件:

mkdir /root/backup
tar -cvf /root/backup/hdp_config_backup.tar /etc/

1.3 检查 Hive Server 节点端口使用情况,如果端口被占用,需要手动修改;

netstat -anp | grep 1001[01]

1.4 备份 Hive 元数据库

备份
mysqldump hive > /root/backup/backup_hive.sql

还原
mysql hive < /root/backup/backup_hive.sql

1.5 关闭正在运行的 Mapreducecrontab 定时任务、Kill掉所有已经发布的 Storm topology

1.6 将升级安装包解压到YUM主机。

tar -xzvf HDP-2.2.6.0-centos6-rpm.tar.gz
mv HDP /var/www/html/HDP2.2.6

2. 升级

2.1 登录到 Ambari,添加新的HDP版本;

UpgradeSetp_img

http://public-repo-1.hortonworks.com/HDP2.2.6/centos6/2.x/updates/2.2.6.0/
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos6

UpgradeSetp_img

 

2.2 保存后,点击安装,Ambari 将为所有节点安装新的HDP组件;

UpgradeSetp_img
UpgradeSetp_img

2.3 等待安装后,点击更新,Ambari 将为所有节点更新HDP组件;

UpgradeSetp_img

2.4 更新过程中,Ambari 将提示6次需要干预的操作,因为升级前已经准备好了,所以当遇到提示时直接确认即可,整个升级过程将持续1小时左右;

UpgradeSetp_img

升级完成

UpgradeSetp_img

3. 恢复应用服务

3.1 升级完成后,Hive server thrift 端口将改为 10010,所以需要检查相关应用的配置,修改对应的端口参数值;

4. 其他

HDP 升级过程中的提示

  1. Before continuing, please backup the Hive Metastore database located on the following host(s): hadoop002.icccuat.com.
  2. The initial batch of DataNode, RegionServer and NodeManager hosts have been upgraded. You are advised to check the hosts and perform cluster/workload-specific tests against your cluster to ensure proper operation before proceeding with upgrade of the remaining services.
  3. Please note that the HiveServer port will now change to 10010 if hive is using a binary transfer mode or 10011 if hive is using an http transport mode. You can use “netstat -anp | grep 1001[01]” to determine if the port is available on each of following HiveServer host(s): hadoop002.icccuat.com. If the port is not available, the process using it must be terminated.
    Updated ‘hive-site’ with ‘hive.server2.thrift.port=10010’
  4. Before continuing, please deactivate and kill any currently running topologies.
  5. Please rebuild your topology using the new Storm version dependencies and resubmit it using the newly created jar.
  6. Your cluster version has been upgraded. Click on Finalize when you are ready to finalize the upgrade and commit to the new version. You are strongly encouraged to run tests on your cluster to ensure it is fully operational before finalizing. You cannot go back to the original version once the upgrade is finalized.

HDP ambari 的10条使用经验

Hortonworks 使用 ambari 作为其 hadoop 生态圈的管理工具,界面美观,配置方便。以下是我最近使用ambari做hadoop环境配置的时候遇到的一些使用问题,希望对刚接触的童鞋有用。

1.

hbase 启动不起来,通常是因为节点日期不同步。

2.

HDFS 无法启动,通常是因为hdfs 进入了安全模式,需要先退出来,再启动。

3.

repo源的地址是可以随时更改的。

更改路径:admin -> stacks and Versions -> Versions -> 点击框的右上角笔样编辑图标 . 替换对应repo的url即可。

4.

如何删除节点(hosts)

顶部hosts 菜单 -> 点选相应的主机名 -> 右上角 host Actions -> delete host

5.

新增节点如果是基于原有的镜像创建,需要做host cleanup .

如果发现datanode启动,但是不是live , 很可能是新节点和其他节点配置冲突。这也就是为什么要做host cleanup 的原因。

另外,新添加的节点为非live, 不要试图通过调整namenode所在节点来解决,否则问题越来越多。

6.

ambari.repo 指定了ambari的源; 通过在ambari web配置HDP源,自动生成 “HDP*.repo” 文件。

7.

提示 /var/log/ambari-metrics-monitor/ambari-metrics-monitor.out 没有权限修改之类

这个问题,可以采取两种解决办法:

  1. 赋权: chown ams:hadoop  /var/log/ambari-metrics-monitor/ambari-metrics-monitor.out
  2. 在安装ambari metrics monitor 之前,先把这个文件删除。

8.

ambari 界面上的 hdfs balancer 有时不管用。

可以通过手工执行命令来平衡:

 hadoop balancer 

9.

ambari 可以通过 RESTful api 访问,例如:

 curl --user admin:admin http://10.0.2.11:8080/api/v1/clusters

10.

ambari 每个组件的页面中间上方都有外部链接可以指向组件本身的管理和监控页面。

CentOS7安装KVM虚拟机

一.前期准备

1.确定机器有VT
终端输入命令:

grep ‘(vmx|svm)’ /proc/cpuinfo
如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法使用KVM虚拟机。

2.确保BIOS里开启VT: Intel(R) Virtualization Tech [Enabled] 使用如下命令

lsmod | grep kvm
modprobe kvm-intel
二.桥接网络

使用桥接网络,虚拟机即可与其他机器互相访问。 1.复制ifcfg-em1 为 ifcfg-br0,并将ifcfg-br0改为如下配置

TYPE=Bridge
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.1.116
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
2.原网卡ifcfg-em1只保留如下配置,其他都注释掉:

NAME=em1
DEVICE=em1
ONBOOT=yes
BRIDGE=br0
3.重启网络

service network restart
三.安装kvm

1.安装kvm

yum -y install libcanberra-gtk2 qemu-kvm.x86_64 qemu-kvm-tools.x86_64 libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 libiscsi-1.7.0-5.el6.x86_64 dbus-devel virt-clone tunctl virt-manager libvirt libvirt-python python-virtinst
2.安装x-windows,使用图形界面管理虚拟机

yum groupinstall “X Window System”
3.安装中文字符,解决界面乱码问题

yum install dejavu-lgc-sans-fonts
yum groupinstall “Fonts” -y
错误: 1. couldn’t connect to accessibility bus failed to connect to socket /tmp/dbus 解决方法:

export NO_AT_BRIDGE=1
四.使用 1.使用virt-manager管理虚拟机,可以完成克隆,安装,开启,关闭等大部分的动作 如是ssh命令登录服务器,需加上XC参数。 如是在windows环境下通过putty登录服务器,需打开x-windows,方法如下:

在http://sourceforge.net/projects/xming/下载Xming,并安装运行。
putty.exe ==> Connection/SSH/X11 ==> X11 forwarding/Enable打勾即可,X dispaly location可以空着
2.创建预分配文件

qemu-img create -f qcow2 -o preallocation=metadata /data/test.qcow2 80G
3.让虚拟机开机自动启动

virsh list –all 查看虚拟机名称及状态
virsh autostart +虚拟机名称
设置后可在/etc/libvirt/qemu/autostart下看到已设置自动启动KVM配置文件链接

linux配置文件调优

Linux中所有东西都是文件,一个socket就对应着一个文件描述符,因此系统配置的最大打开文件数以及单个进程能够打开的最大文件数就决定了socket的数目上限;但是linux是有文件句柄限制的,而且默认不是很高,一般都是1024,生产服务器用其实很容易就达到这个数量

一、limits.conf文件

工作原理

limits.conf文件实际是Linux PAM(插入式认证模块,Pluggable Authentication Modules 中 pam_limits.so 的配置文件),突破系统的默认限制,对系统访问资源有一定保护作用,当用户访问服务器时,服务程序将请求发送到PAM模块,PAM模块根据服务名称在/etc/pam.d目录下选择一个对应的服务文件,然后根据服务文件的内容选择具体的PAM模块进行处理

limits.conf 和sysctl.conf区别在于limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置

文件格式

1
username|@groupname   type  resource  limit

1)username|@groupname

设置需要被限制的用户名,组名前面加@和用户名区别。也可用通配符*来做所有用户的限制

2)type

类型有soft,hard 和 –

  • soft 指的是当前系统生效的设置值
  • hard 表明系统中所能设定的最大值,soft 的限制不能比 hard 限制高
  • – 就表明同时设置了 soft 和 hard 的值

3)resource: 表示要限制的资源

  • core – 限制内核文件的大小
  • core file : 当一个程序崩溃时,在进程当前工作目录的core文件中复制了该进程的存储映像。core文件仅仅是一个内存映象(同时加上调试信息),主要是用来调试的。core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像,系统默认core文件的大小为0,所以没有被创建。可以用ulimit命令查看和修改core文件的大小。 #ulimit -c 0 #ulimit -c 1000 #ulimit -c unlimited 注意:如果想让修改永久生效,则需要修改配置文件,如 .bash_profile、/etc/profile或/etc/security/limits.conf
  • date – 最大数据大小
  • fsize – 最大文件大小
  • memlock – 最大锁定内存地址空间
  • nofile – 打开文件的最大数目
  • 对于需要做许多套接字连接并使它们处于打开状态的应用程序而言,最好通过使用ulimit -n,或者通过设置nofile参数,为用户把文件描述符的数量设置得比默认值高一些
  • rss – 最大持久设置大小
  • stack – 最大栈大小
  • cpu – 以分钟为单位的最多 CPU 时间
  • noproc – 进程的最大数目
  • as – 地址空间限制
  • maxlogins – 此用户允许登录的最大数目

示例

限制admin用户登录到sshd的服务不能超 过2个

1
2
echo session required pam_limits.so >> /etc/pam.d/sshd
echo admin - maxlogins 2 >> /etc/security/limits.conf
  • 查看应用程序能否被PAM支持,用ldd
  • 同理limits.conf要使用就必须保证/etc/pam.d/login 中有下面:session required pam_***.so

二、ulimit命令

ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小、进程数据块的大小、Shell 进程创建文件的大小、内存锁住的大小、常驻内存集的大小、打开文件描述符的数量、分配堆栈的最大大小、CPU 时间、单个用户的最大线程数、Shell 进程所能使用的最大虚拟内存,同时它支持硬资源和软资源的限制

作为临时限制,ulimit 可以作用于通过使用其命令登录的 shell 会话,在会话终止时便结束限制,并不影响于其他 shell 会话,对于长期的固定限制,ulimit 命令语句又可以被添加到由登录 shell 读取的文件中,作用于特定的 shell 用户,该命令总结如下:

  • 一般只对当前tty(终端有效),若要每次都生效的话,可以把ulimit参数放到对应用户的.bash_profile里面
  • ulimit命令本身就有分软硬设置,加-H就是硬,加-S就是软
  • 默认显示的是软限制,如果运行ulimit命令修改的时候没有加上的话,就是两个参数一起改变生效

ulimit命令用来限制系统用户对shell资源的访问,常用参数解释如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ulimit(选项)
-a:显示目前资源限制的设定;
-c <core文件上限>:设定core文件的最大值,单位为区块;
-d <数据节区大小>:程序数据节区的最大值,单位为KB;
-f <文件大小>:shell所能建立的最大文件,单位为区块;
-H:设定资源的硬性限制,也就是管理员所设下的限制;
-m <内存大小>:指定可使用内存的上限,单位为KB;
-n <文件数目>:指定同一时间最多可开启的文件数;
-p <缓冲区大小>:指定管道缓冲区的大小,单位512字节;
-s <堆叠大小>:指定堆叠的上限,单位为KB;
-S:设定资源的弹性限制;
-t <CPU时间>:指定CPU使用时间的上限,单位为秒;
-u <程序数目>:用户最多可开启的程序数目;
-v <虚拟内存大小>:指定可使用的虚拟内存上限,单位为KB。

如何修改ulimit最大限制

1)使用命令修改

查询当前终端的文件句柄数: ulimit -n,一般的系统默认的1024;修改文件句柄数为65535,ulimit -n 65535

2)将ulimit 值添加到/etc/profile文件中(适用于有root权限登录的系统),为了每次系统重新启动时,都可以获取更大的ulimit值,将ulimit 加入到/etc/profile 文件底部

1
2
3
echo ulimit -n 65535 >>/etc/profile
source /etc/profile
ulimit -n

3)好多朋友都以为大功告成了,可以突然发现自己再次登录进来的时候,ulimit的值还是1024,这是为什么呢 ?

关键的原因是你登录的用户是什么身份,是不是root用户,由于服务器的root用户权限很大,一般是不能用来登录的,都是通过自己本人的登录权限进行登录,并通过sudo方式切换到root用户下进行工作。 用户登录的时候执行shell脚本的顺序:

1
2
3
4
5
/etc/profile.d/file
/etc/profile
/etc/bashrc
/home/.admin/.bashrc
/home/.admin/.bash_profile

由于ulimit -n的脚本命令加载在第二部分,用户登录时由于权限原因在第二步还不能完成ulimit的修改,所以ulimit的值还是系统默认的1024

解决办法: 修改linux的软硬件限制文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo '
* soft nproc 11000
* hard nproc 11000
* soft nofile 655350
* hard nofile 655350' >> /etc/security/limits.conf
    
/*
这里针对的是所有用户
nproc 打开的最大进程数
nofile 打的开最大文件数
所有进程打开的文件描述符数不能超过/proc/sys/fs/file-max
单个进程打开的文件描述符数不能超过user limit中nofile的soft limit
nofile的soft limit不能超过其hard limit
nofile的hard limit不能超过/proc/sys/fs/nr_open
*/

4)经过以上修改,在有些系统中,用一般用户再登陆,仍然没有修改过来,那么需要检查是否有如下文件,如果没有,则要添加如下内容:

1
2
echo session required /lib/security/pam_limits.so >> /etc/pam.d/sshd
service sshd reload

5)如果仍然不行,那么需要修改如下文件

1
echo UsePrivilegeSeparation no >>  /etc/ssh/sshd_config

三、File Descriptors的设置

设置多少合适?

a、/proc/sys/fs/filemax

决定了当前内核可以打开的最大的文件句柄数

The value  in  file-max  denotes  the  maximum number of file handles that the Linux kernel will allocate. When you get a lot of error messages about running out of  file handles, you might want to raise this limit. The default value is 10% of  RAM in kilobytes.  To  change it, just  write the new number  into the file

意思是file-max一般为内存大小(KB)的10%来计算,如果使用shell,可以这样计算

1
grep -r MemTotal /proc/meminfo | awk '{printf("%d",$2/10)}'

b、/proc/sys/fs/file-nr

file-nr 中的值由三部分组成,分别为:

  • 已经分配的文件句柄数
  • 已经分配单没有使用的文件句柄数
  • 最大文件句柄数

第二项的值总为0,这并不是一个错误,它实际上意味着已经分配的文件句柄无一浪费的都已经被使用了

Historically, the three values in file-nr denoted the number of allocated file handles,  the number of  allocated but  unused file  handles, and  the maximum number of file handles. Linux 2.6 always  reports 0 as the number of free file handles — this  is not an error,  it just means that the  number of allocated file handles exactly matches the number of used file handles.

查找文件句柄问题的时候,还有一个很实用的程序lsof,可以很方便看到某个进程开了那些句柄,也可以看到某个文件/目录被什么进程占用了

1
lsof -n |awk '{print $2}'|sort|uniq -c |sort -nr|more

这两个参数可以让你来决定设置多少比较合适

如何设置?

系统级别的设置

1
2
3
4
5
6
7
8
sysctl -w fs.file-max=100000  //临时生效
vi /etc/sysctl.conf  +fs.file-max = 100000 //永久生效
//查看
cat /proc/sys/fs/file-max
or
sysctl fs.file-max

用户级别的设置

  • 在/etc/security/limits.conf文件,可以对系统用户组,进行cpu、文件数等限制的,通过它可以针对某个用户或全部进行限制
  • (*表示所有用户、soft表示可以超出,但只是警告;hard表示绝对不能超出,unlimited用于表示不限制)也可以放在/etc/profile文件里面,下面是该文件里面的默认参数:ulimit -S -c 0 > /dev/null 2>&1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vi /etc/security/limits.conf
//添加
httpd soft nofile 4096
httpd hard nofile 10240
//查看
su - httpd
ulimit -Hn
ulimit -Sn
//如果不生效/etc/pam.d/login中加上pam_limts.so文件 +session required pam_limits.so

ulimit -n and /proc/sys/fs/file-max 有什么区别?

1、file-max  是内核级别的,所有的进程总和不能超过这个数

2、ulimit是进程级别的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@dev ~]# ulimit -n
1024
[root@dev ~]# lsof | grep me | wc -l
8145
#!/usr/bin/perl
$count = 0;
@filedescriptors;
while ($count <= 1024) {
    $FILE = ${count};
    open $FILE, ">", "/tmp/example$count" or die "\n\n FDs: $count $!";
    push(@filedescriptors, $FILE);
    $count ++;
}
//FDs: 1021 Too many open files at ./test.pl line 8.
//1021 because there were 3 open file descriptors before reaching the while loop (stdout, stdin and stderr) 

三、关闭IPV6

目前为止我们还不需要IPv6,系统安装完之后是自带并且开启了的,需要我们关闭

1
ifconfig | grep inet6  || lsmod | grep ipv6

1、如果出现inet6 addr…的字样,说明就是安装了

2、显示内核加载的ipv6相关模块

通过以下命令禁用

1
2
3
4
5
6
7
sed -i 's/^NETWORKING_IPV6=yes/NETWORKING_IPV6=no/' /etc/sysconfig/network
echo '
alias net-pf-10 off
alias ipv6 off ' >> /etc/modprobe.d/dist.conf
chkconfig ip6tables off

四、sysctl.conf的配置

sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用sysctl可以读取设置超过五百个系统变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#禁用包过滤功能
net.ipv4.ip_forward = 0
#启用源路由核查功能
net.ipv4.conf.default.rp_filter = 1
#禁用所有IP源路由
net.ipv4.conf.default.accept_source_route = 0
#使用sysrq组合键是了解系统目前运行情况,为安全起见设为0关闭
kernel.sysrq = 0
#控制core文件的文件名是否添加pid作为扩展
kernel.core_uses_pid = 1
#开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies来处理
net.ipv4.tcp_syncookies = 1
#每个消息队列的大小(单位:字节)限制
kernel.msgmnb = 65536
#整个系统最大消息队列数量限制
kernel.msgmax = 65536
#单个共享内存段的大小(单位:字节)限制,计算公式64G*1024*1024*1024(字节)
kernel.shmmax = 68719476736
#所有内存大小(单位:页,1页 = 4Kb),计算公式16G*1024*1024*1024/4KB(页)
kernel.shmall = 4294967296
#timewait的数量,默认是180000
net.ipv4.tcp_max_tw_buckets = 6000
#开启有选择的应答
net.ipv4.tcp_sack = 1
#支持更大的TCP窗口. 如果TCP窗口最大超过65535(64K), 必须设置该数值为1
net.ipv4.tcp_window_scaling = 1
#TCP读buffer
net.ipv4.tcp_rmem = 4096 131072 1048576
#TCP写buffer
net.ipv4.tcp_wmem = 4096 131072 1048576
#为TCP socket预留用于发送缓冲的内存默认值(单位:字节)
net.core.wmem_default = 8388608
#为TCP socket预留用于发送缓冲的内存最大值(单位:字节)
net.core.wmem_max = 16777216
#为TCP socket预留用于接收缓冲的内存默认值(单位:字节)
net.core.rmem_default = 8388608
#为TCP socket预留用于接收缓冲的内存最大值(单位:字节)
net.core.rmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
#web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128,而nginx定义的NGX_LISTEN_BACKLOG默认为511,所以有必要调整这个值
net.core.somaxconn = 262144
#系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后)
net.ipv4.tcp_max_orphans = 3276800
#记录的那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128
net.ipv4.tcp_max_syn_backlog = 262144
#时间戳可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。这里需要将其关掉
net.ipv4.tcp_timestamps = 0
#为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_synack_retries = 1
#在内核放弃建立连接之前发送SYN包的数量
net.ipv4.tcp_syn_retries = 1
#开启TCP连接中time_wait sockets的快速回收
net.ipv4.tcp_tw_recycle = 1
#开启TCP连接复用功能,允许将time_wait sockets重新用于新的TCP连接(主要针对time_wait连接)
net.ipv4.tcp_tw_reuse = 1
#1st低于此值,TCP没有内存压力,2nd进入内存压力阶段,3rdTCP拒绝分配socket(单位:内存页)
net.ipv4.tcp_mem = 94500000 915000000 927000000
#如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外当机。缺省值是60 秒。2.2 内核的通常值是180秒,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN- WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5K内存,但是它们的生存期长些。
net.ipv4.tcp_fin_timeout = 15
#表示当keepalive起用的时候,TCP发送keepalive消息的频度(单位:秒)
net.ipv4.tcp_keepalive_time = 30
#对外连接端口范围
net.ipv4.ip_local_port_range = 2048 65000
#表示文件句柄的最大数量
fs.file-max = 102400

/sbin/sysctl -p最后记得刷新立即生效

 

参考文章

http://serverfault.com/questions/122679/how-do-ulimit-n-and-proc-sys-fs-file-max-differ

http://www.cyberciti.biz/faq/linux-increase-the-maximum-number-of-open-files/

openstack的服务命令

重启openstack的整个服务

openstack-service restart
  • 1

1. 重启dashboard

service httpd  restart 
service memcached restart
  • 1
  • 2

2. 重启 ceilometer

2.1 cinder

service mongod restart
  • 1

2.2 controller

service  openstack-ceilometer-api  restart    
service openstack-ceilometer-notification restart
service openstack-ceilometer-central  restart
service openstack-ceilometer-collector  restart
service openstack-ceilometer-alarm-evaluator  restart
service openstack-ceilometer-alarm-notifier restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3 compute

service  openstack-nova-compute restart
  • 1

2.4 controller

service  openstack-glance-api restart
service  openstack-glance-registry restart
  • 1
  • 2

Block Storage service

2.5 controller node

service   openstack-cinder-api restart
service   openstack-cinder-scheduler restart
  • 1
  • 2

2.6 cinder

service    openstack-cinder-volume  restart
  • 1

3. 重启Fuel服务

docker restart  fuel-core-6.1-nailgun
docker restart fuel-core-6.1-keystone
docker restart fuel-core-6.1-rsync
docker restart fuel-core-6.1-mcollective
docker restart fuel-core-6.1-ostf
docker restart fuel-core-6.1-astute
docker restart fuel-core-6.1-rsyslog
docker restart fuel-core-6.1-postgres
docker restart fuel-core-6.1-rabbitmq
docker restart fuel-core-6.1-nginx
docker restart fuel-core-6.1-cobbler
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

4. 重启 Neutron 服务

4.1 控制节点

service openstack-nova-api restart
service openstack-nova-scheduler restart
service openstack-nova-conductor restart
service neutron-server restart
  • 1
  • 2
  • 3
  • 4

4.2 网络节点

service openvswitch restart
service neutron-openvswitch-agent restart(fuel控制节点默认stop)
service neutron-l3-agent restart(fuel控制节点默认stop)
service neutron-dhcp-agent restart(fuel控制节点默认stop)
service neutron-metadata-agent restart(fuel控制节点默认stop)
  • 1
  • 2
  • 3
  • 4
  • 5

4.3 计算节点

service neutron-openvswitch-agent restart
service openvswitch restart
  • 1
  • 2

5. 重启cinder服务

5.1 控制节点

service openstack-cinder-api restart
service openstack-cinder-scheduler restart
  • 1
  • 2

5.2 存储节点

service openstack-cinder-volume restart
  • 1

6. 重启glance服务

6.1 控制节点

service openstack-glance-api restart
service openstack-glance-registry restart
  • 1
  • 2

7. 重启Swift服务

7.1 控制节点

service openstack-swift-proxy restart
service memcached restart
  • 1
  • 2

7.2 存储节点

service openstack-swift-account restart
service openstack-swift-account-auditor restart
service openstack-swift-account-reaper restart
service openstack-swift-account-replicator restart
service openstack-swift-container restart
service openstack-swift-container-auditor restart
service openstack-swift-container-replicator restart
service openstack-swift-container-updater restart
service openstack-swift-object restart
service openstack-swift-object-auditor restart
service openstack-swift-object-replicator restart
service openstack-swift-object-updater restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

8. 重启Nova服务

8.1 控制节点

service openstack-nova-api restart
service openstack-nova-cert restart
service openstack-nova-consoleauth restart
service openstack-nova-scheduler restart
service openstack-nova-conductor restart
service openstack-nova-novncproxy restart
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

8.2 计算节点

service libvirtd restart
service openstack-nova-compute restart

MySQL 5.7 初始密码和密码复杂度问题

〇 环境:
CentOS 6.5 64bit  (文末有Debian/Ubuntu deb包的密码问题)
mysql-server版本:5.7.11



〇 
背景:
mysql 5.7以后,安全性大幅度上升,用习惯了老版本的用户刚使用会有一些不适。
如,默认安装后初始密码不为空;
或找不到初始密码在哪;
再比如,设置新密码会报错ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
其主要实现方式主要是通过【validate_password】插件实现。

mysql安装之后,通常需要初始化datadir等。

如果根据安装方式的不同,通过service mysqld start来第一次启动数据库的话,会初始化数据库。
并默认安装验证密码插件(默认安装为新特性,5.6中安装方法见下)

  1. Initializing MySQL database: [ OK ]
  2. Installing validate password plugin: [ OK ]
  3. Starting mysqld: [ OK ]

实际上该步骤初始化方式是通过mysqld –initialize来实现。


〇 初始密码:
在5.7.6以后的版本,如5.7.11,默认初始的密码是在errlog中。
查看配置文件或者通过ps -ef|grep mysql可以知道errlog默认位置。

  1. # -ef|grep error=
  2. mysql 2387 2189 0 23:10 pts/0 00:00:00 /usr/sbin/mysqld –basedir=/usr –datadir=/var/lib/mysql –plugin-dir=/usr/lib64/mysql/plugin –user=mysql –log-error=/var/log/mysqld.log –pid-file=/var/run/mysqld/mysqld.pid –socket=/var/lib/mysql/mysql.sock
  3. root 2464 1131 0 23:28 pts/0 00:00:00 grep error=

通过查errlog中的信息,可以得知初始密码如下:

  1. # cat /var/log/mysqld.log | grep “temporary password”
  2. 2016-04-08T15:10:00.920194Z 1 [Note] A temporary password is generated for root@localhost: yP(DO;EM&2CY

故通过

  1. mysql -uroot -p’yP(DO;EM&2CY’

即可登入

并且第一次使用随机生成的密码登录后,必须第一步做密码修改操作,否则会抛出:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.


〇 密码复杂度:
修改当前登入mysql用户密码和老版本中一样:

  1. mysql> SET PASSWORD=PASSWORD(‘Root1234@’);
  2. Query OK, 0 rows affected, 1 warning (0.00 sec)
  3. mysql> FLUSH PRIVILEGES;
  4. Query OK, 0 rows affected (0.00 sec)

若使用老版本的SET PASSWORD=PASSWORD(”)方式来修改密码的话,也会抛出警告:
大致意思是这种方式将会在未来版本中移除,

  1. Warning 1287 ‘SET PASSWORD = PASSWORD(”)’ is deprecated and will be removed in a future release. Please use SET PASSWORD = ” instead

新的修改方式是:

  1. mysql> SET password=’Root1234@’;

当然,官方还建议使用如下方式来修改密码:

  1. ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘new_password’;

同时,密码“过于简单”时也会报错:

  1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。

这个validate_password密码强度审计插件决定了你设置的密码是否“过于简单”。

  1. mysql> SHOW VARIABLES LIKE ‘vali%’;
  2. +————————————–+——–+
  3. | Variable_name                       | Value  |
  4. +————————————–+——–+
  5. | validate_password_dictionary_file    |       |
  6. | validate_password_length             | 8     |
  7. | validate_password_mixed_case_count   | 1     |
  8. | validate_password_number_count       | 1     |
  9. | validate_password_policy             | MEDIUM |
  10. | validate_password_special_char_count | 1     |
  11. +————————————–+——–+
  12. 6 rows inset(0.00 sec)

5.7初始化后,默认会安装这个插件,若没有安装,则SHOW VARIABLES LIKE ‘vali%’则会返回空。
对应参数的value值也为默认值,以下是这些值的解释

  1.  validate_password_length8 # 密码的最小长度,此处为8。
  2.  validate_password_mixed_case_count 1 # 至少要包含小写或大写字母的个数,此处为1。
  3.  validate_password_number_count 1 # 至少要包含的数字的个数,此处为1。
  4.  validate_password_policy MEDIUM # 强度等级,其中其值可设置为0、1、2。分别对应:
  5.                            【0/LOW】:只检查长度。
  6.                            【1/MEDIUM】:在0等级的基础上多检查数字、大小写、特殊字符。
  7.                            【2/STRONG】:在1等级的基础上多检查特殊字符字典文件,此处为1。
  8.  validate_password_special_char_count 1 # 至少要包含的个数字符的个数,此处为1。

 


〇 5.7.6及之前的版本:
而在5.7.6之前的版本,初始化方式也不一样,故默认初始化密码存放的位置也不一样:

  1. bin/mysql_install_db –basedir=/usr –datadir=/var/lib/mysql –user=root
  2. [WARNING] mysql_install_db is deprecated. Please consider switching to mysqld –initialize

其中,在5.7.6后续版本中,mysql_install_db已经被废弃,而后续版本将通过mysqld –initialize 来初始化。

在5.6.8以后的版本,如果是通过mysql_install_db脚本来初始化,配合–random-passwords选项,则密码会在/root/.mysql_secret中,如

  1. cat /root/.mysql_secret
  2. # Password set for user ‘root@localhost’ at 2016-04-08 16:13:51
  3. yP(DO;EM&2CY

 


〇 5.6版本中的validate_password插件:
当然,mysql 5.6也可以安装这个插件,安装起来十分简单:
修改配置文件:

[mysqld]
plugin-load=validate_password.so

然后在mysql中安装:

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';

 


〇 5.7版本初始化时不设置初始密码,并不安装validate_password插件
当然在一些实验机环境中,可能不需要这样做,mysql5.7也提供了不安装该插件并不生成随机密码的操作。
只需要在初始化时指定–initialize-insecure即可,比如:

  1. mysqld –initialize-insecure –datadir=/var/lib/mysql –basedir=/usr –user=mysql

此时,SHOW VARIABLES LIKE ‘vali%’;也会为空,因为该插件没有被安装。


〇 关于5.7中 mysqld 其他选项参数
可以用如下命令去查看:

  1. mysqld –verbose –help | grep password

〇 Debian/Ubuntu 包安装的密码问题
在通过deb包安装的时候,会被询问指定root密码,如果设置为空,会输出:
[Warning] root@localhost is created with an empty password ! Please consider switching off the –initialize-insecure option.


〇 参考文档:
MySQL 5.6 Reference Manual / Security / Security Plugins / The Password Validation Plugin
MySQL 5.7 Reference Manual / Initializing the Data Directory Manually Using mysqld