<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>IT博客 京ICP备14047844号</title>
<link>http://new.nginxs.net</link>
<description>运维博客</description>
<image><url>http://new.nginxs.net/conf/profile.png</url><title>nginxs</title><link>http://new.nginxs.net</link></image>
<item>
<title>jenkins 日志爆满</title>
<link>http://new.nginxs.net/read.php/post-201612071024/</link>
<author>nginxs</author><pubDate>2016-12-07T10:25:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201612071024/</guid>
<comment>http://new.nginxs.net/read.php/post-201612071024/#comment-post-201612071024</comment>
<description><![CDATA[<pre><code>  **前一段时间公司的jenkins因为日志量太大把磁盘占满，仔细一看日志文件“/var/log/jenkins/jenkins.log”几分钟产生了20G的日志，</code></pre><p>而且日志还在一直增长，内容如下**<br/>Dec 07, 2016 1:38:14 AM javax.jmdns.impl.constants.DNSRecordClass classForIndex<br/>WARNING: Could not find record class for index: -1<br/>Dec 07, 2016 1:38:14 AM javax.jmdns.impl.DNSIncoming$MessageInputStream readName<br/>SEVERE: bad domain name: possible circular name detected. Bad offset: 0xffffffff at 0x192<br/>Dec 07, 2016 1:38:14 AM javax.jmdns.impl.constants.DNSRecordType typeForIndex<br/>SEVERE: Could not find record type for index: -1<br/>Dec 07, 2016 1:38:14 AM javax.jmdns.impl.DNSIncoming readQuestion<br/>SEVERE: Could not find record type: dns[query,62.210.149.68:6037, length=404, id=0x4f50, flags=0x5449:aa, questions=4688<br/>questions:<br/>[DNSQuestion@2088037402 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: 00@123.56.20.160 SIP/2.0<br/>Via: SIP/2.0/UDP 127.0...1:6037;branch=z9hG4bK-1103786718;rport<br/>Content.Length: 0<br/>From: &quot;sipvicious&quot;&lt;sip:100@1.1.1.1.;tag=37623338313461303134653901353434343930393731<br/>Accept: app.sdp<br/>User-Agent: friendly-scanner<br/>To: &quot;sipvici.<a href="mailto:sip:100@1.1.1.1">sip:100@1.1.1.1</a>Contact: sip:10.@127.0.0.1:6037<br/>CSeq: 1 OPTIONS<br/>Call-ID: 76029.546128695368835116<br/>Max-Forwards: 70</p><p>ϿϿϿϿϿϿ.]<br/>[DNSQuestion@1398141921 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@752862545 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@2077034887 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@545402584 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@1546918866 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@236169288 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@494995772 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@742654138 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@1347581035 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@1125173185 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@1447947894 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@1518364117 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@431141826 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]<br/>[DNSQuestion@1549353466 type: TYPE_IGNORE index 0, class: CLASS_UNKNOWN index 0, name: ]</p><p>上面内容主要是因为DNS查询错误，返回了所有的日志数据，解决方法：<br/>【系统管理】=》【system log】=&gt;【日志级别】=》【Name: javax.jmdns,Level: off】<br/><img src="http://new.nginxs.net/storage/77fc2487.jpg" alt="" /></p><p><img src="http://new.nginxs.net/storage/172c9f74.jpg" alt="" /></p>]]></description>
</item>
<item>
<title>01-python读写文件</title>
<link>http://new.nginxs.net/read.php/post-201611201300/</link>
<author>nginxs</author><pubDate>2016-11-20T13:30:00+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201611201300/</guid>
<comment>http://new.nginxs.net/read.php/post-201611201300/#comment-post-201611201300</comment>
<description><![CDATA[<ol><br/><li><br/><p>介绍<br/>文件的处理主要包括读，写下面进行形象介绍</p></li><li><br/><p>初始化输入输出流<br/>下面文件就相当于一个房子，“f”就相当于一把钥匙，“mode”就是钥匙权限，如果你的钥匙只是院子门(r)的，那你就只能站在房子外面看里面东西，<br/>如果你的钥匙不仅有院子门还有屋门(w)，那你就可以进到屋子里面动东西了。<br/>f  = open('/PATH/filename',mode='r',buffering=-1)<br/>上面打开句柄需要三部分'文件'，'访问模式'，'缓存',buffering的<br/>值代表的缓存行数。<br/>访问mode参数    描述<br/>r   文件只读模式<br/>w   只写模式<br/>a   追加写模式<br/>rU或U    只读并支持通用换行符模式( \n,\r  )</p><ul><br/><li>加号不单独使用，代表可读写<br/>例：r+<br/>w+  可读写同w，覆盖写<br/>a+   可读写同a，追加<br/>b   二进制模式,添加对应读写模式即可<br/>(rb,wb,ab,rb+,wb+,ab+)</li></ul></li><li><br/><p>文件读取<br/>读取方法    描述<br/>f.read()    默认读取全部文件<br/>f.readline()    读取打开文件的第一行<br/>f.readlines()   读取文件并返回一个列表<br/>每行为列表一个参数</p></li><li>文件写入<br/>写入方法    描述<br/>f.write()   写入<br/>f.writelines()  把整个字符串列表写入文件<br/>f.flush()   未关闭文件下提前刷新内容到文件</li></ol><p>关闭文件<br/>关闭文件    描述<br/>f.close()   关闭初始化输入输出时打开文件</p><p>例子1：读取文件按行处理<br/>递归读取一个文件每行并输出</p><p>f  = open('/tmp/data.log',access_mode='r',buffering=-1)  #初始化文件的输入输出流<br/>for i in f.readlines():                #以字符串列表的形式读取文件后，每次赋值一行给“i”进行print输出<br/>print i<br/>f.close()        #关闭打开的文件</p>]]></description>
</item>
<item>
<title>glusterfs安装使用</title>
<link>http://new.nginxs.net/read.php/post-201607142023/</link>
<author>nginxs</author><pubDate>2016-07-14T20:17:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201607142023/</guid>
<comment>http://new.nginxs.net/read.php/post-201607142023/#comment-post-201607142023</comment>
<description><![CDATA[<p>**介绍<br/><img src="http://new.nginxs.net/storage/99927dde.png" alt="" /></p><p>glusterfs文件系统是：</p><ol><br/><li>一个分布式可伸缩，最大可超过PB，可插拔的集群I / O调度器</li><li>非停止性存储，非元数据存储</li><li>可以通过mount挂载到本地，向本地磁盘一样读写</li><li>简单易于管理</li></ol><p>查看各个节点状态<br/>gluster  peer status</p><h2>1.安装</h2><ol><br/><li>1 配置epel源</li></ol><p>wget -P /etc/yum.repos.d <a href="http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo">http://download.gluster.org/pub/gluster/glusterfs/LATEST/CentOS/glusterfs-epel.repo</a></p><p>1.2 安装软件<br/>yum install glusterfs glusterfs-server glusterfs-fuse</p><ol><br/><li>3  添加hosts</li></ol><p>[root@docker ~]# cat /etc/hosts<br/>127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4<br/>::1         localhost localhost.localdomain localhost6 localhost6.localdomain6<br/>10.1.1.134  docker<br/>192.168.199.253  i2p.nginxs.net</p><p>1.4  注册并查看主机列表（不显示当前主机）</p><p>[root@cloud yum.repos.d]# gluster peer probe 192.168.199.222<br/>peer probe: success.<br/>[root@cloud yum.repos.d]# gluster peer status<br/>Number of Peers: 1</p><p>Hostname: 192.168.199.222<br/>Uuid: 67511194-333c-4919-88df-ccb5e10d9568<br/>State: Peer in Cluster (Connected)<br/>[root@cloud yum.repos.d]# gluster peer probe 192.168.199.8<br/>peer probe: success. Probe on localhost not needed</p><p>1.5  创建逻辑卷</p><p>[root@cloud yum.repos.d]#  gluster volume create dianjoygfs 192.168.199.{8,222}:/data1/gfs-data/<br/>volume create: dianjoygfs: success: please start the volume to access data</p><p>1.6  启动存储逻辑卷</p><p>[root@docker ~]#  gluster volume start dianjoygfs<br/>volume start: dianjoytest: success</p><p>1.7  挂载glusterfs存储卷</p><p>[root@ntest1 ~]#  mount.glusterfs 192.168.199.8:/dianjoygfs /mnt/gluster-mount/<br/>[root@ntest1 ~]# df -hT<br/>Filesystem           Type            Size  Used Avail Use% Mounted on<br/>/dev/vda1            ext4             20G  8.8G  9.8G  48% /<br/>tmpfs                tmpfs           1.9G   16K  1.9G   1% /dev/shm<br/>/dev/vdb1            ext4             50G   20G   28G  42% /data<br/>192.168.199.8:/dianjoygfs<br/>fuse.glusterfs  2.7T  861G  1.8T  33% /mnt/gluster-mount</p><p>这个存储卷的大小是，每个节点挂载“/data1/gfs-data/”的磁盘大小，其它信息同是如此。</p>]]></description>
</item>
<item>
<title>RabbitMQ server 3.6安装介绍</title>
<link>http://new.nginxs.net/read.php/post-201605272221/</link>
<author>nginxs</author><pubDate>2016-05-27T22:39:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605272221/</guid>
<comment>http://new.nginxs.net/read.php/post-201605272221/#comment-post-201605272221</comment>
<description><![CDATA[<p>介绍<br/><img src="http://new.nginxs.net/storage/33c0fdf1.png" alt="" /><br/>RabbitMQ是一个消息传输队列，简单点说就是一个用来接收和转发消息的工具。<br/>你可以把它想象成一个邮局，当你把信件到你的邮箱，邮差肯定会把信件发送到收件人手中。</p><p>这里把RabbitMQ比喻成邮箱，邮局和邮差，与真实的邮局差别只是一个发送纸质消息另外一个是二进制数据罢了。</p><p><img src="http://new.nginxs.net/storage/ec63100d.png" alt="" /><br/>下面是RabbitMQ一个简单的入门操作，首先RabbitMQ使用的erlang实现的所以先要安装erlang</p><p><strong>安装Erlang</strong></p><pre><code>    yum -y install gcc gcc-devel glibc-devel  ncurses-devel<br/>    下载最新的erlang<br/>    wget http://erlang.org/download/otp_src_18.3.tar.gz<br/>    tar zxf otp_src_18.3.tar.gz<br/>    cd otp_src_18.3<br/>    ./configure &amp;&amp; make &amp;&amp; make install </code></pre><p><strong>安装RabbitMQ</strong></p><p>安装解压后直接可以使用<br/>wget <a href="http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz">http://www.rabbitmq.com/releases/rabbitmq-server/v3.6.1/rabbitmq-server-generic-unix-3.6.1.tar.xz</a>xz -d rabbitmq-server-generic-unix-3.6.1.tar.xz<br/>tar xf rabbitmq-server-generic-unix-3.6.1.tar</p><p>把集群里所有的主机名必须在/etc/hosts文件解析</p><pre><code>    192.168.199.232  api-node1.nginxs.net api-node1<br/>    192.168.199.233  api-node1.nginxs.net api-node1</code></pre><p>当启动api-node1节点的rabbitmq服务以后把内容放到其他节点的相同位置，文件权限400</p><p>[root@api-node1 ~]# cat .erlang.cookie<br/>GTZKLOKVHNYLXUSJDORN</p><p><strong>查看插件管理</strong></p><pre><code>    ./sbin/rabbitmq-plugins list  #查看插件列表<br/>    ./sbin/rabbitmq-plugins enable rabbitmq_management   #开启插件<br/>    ./sbin/rabbitmq-plugins disable rabbitmq_management   #关闭插件</code></pre><p>举例：开启web管理<br/>./sbin/rabbitmq-plugins  enable rabbitmq_management<br /><br/>访问地址：<a href="http://IP/15672">http://IP/15672</a></p><p><strong>启动RabbitMQ</strong></p><p>./sbin/rabbitmq-server -detached</p><p><strong>加入集群</strong></p><ol><br/><li>加入集群之前rabbitmq必须关闭app以免消息冲突（为了保证数据正常在形成集群的时候没有数据写入新节点）</li><li>集群的启动顺序，必须先启动硬盘节点然后然能启动内存节点（否则无法启动）</li><li><br/><p>当集群所有节点都停止运行的时候应该按照后停的服务先启动的顺序启动，否则将导致个别节点消息时空错乱<br/>语法：./sbin/rabbitmqctl join_cluster rabbit@hostname --{ram|disc}</p><pre><code> ./sbin/rabbitmqctl stop_app<br/>./sbin/rabbitmqctl join_cluster rabbit@api-node1 <br/><br/>[root@api-node2 RMQ]# ./sbin/rabbitmqctl cluster_status<br/>Cluster status of node 'rabbit@api-node2' ...<br/>[{nodes,[{disc,['rabbit@api-node1','rabbit@api-node2']}]}]<br/> ./sbin/rabbitmqctl start_app</code></pre></li></ol><p><strong>查看用户</strong></p><p>[root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl list_users<br/>Listing users ...<br/>guest   [administrator]</p><p><strong>创建用户</strong></p><p>[root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl add_user nginxs myscript<br/>Creating user &quot;nginxs&quot; ...</p><p><strong>设置角色</strong></p><p>语法：set_user_tags <username> <tag> …<br /><br/>角色：administrator，monitoring，policymaker，management</p><pre><code>[root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl set_user_tags nginxs administrator<br/>Setting tags for user "administrator" to [] ...<br/>Segmentation fault (core dumped)</code></pre><p><strong>设置权限</strong></p><p>语法：set_permissions [-p <vhostpath>] <user> <conf> <write> <read></p><pre><code>    [root@api-node1 rabbitmq]# ./sbin/rabbitmqctl    set_permissions -p logstore "logstash" ".*" ".*" ".*"<br/>           Setting permissions for user "logstash" in vhost "logstore" ...</code></pre><p><strong>删除用户</strong></p><pre><code>    [root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl delete_user guest<br/>    Deleting user "guest" ...</code></pre><p><strong>设置镜像队列策略</strong></p><p>语法： set_policy [-p <vhostpath>] [--priority <priority>] [--apply-to <apply-to>]  <name> <pattern>  <definition></p><pre><code>    [root@api-node1 rabbitmq_server-3.5.4]# ./sbin/rabbitmqctl set_policy sync-all "^" '{"ha-mode":"all"}'<br/>              Setting policy "ha-all" for pattern "^" to "{\"ha-mode\":\"all\"}" with priority "0" …</code></pre><p><img src="http://new.nginxs.net/storage/4fd5ff32.png" alt="" /></p><p><strong>手动同步队列</strong></p><p>rabbitmqctl sync_queue name </p><p><strong>停止服务</strong></p><p>./sbin/rabbitmqctl stop PID<br/>./sbin/rabbitmqctl stop 52641</p>]]></description>
</item>
<item>
<title>12-nginx限制文件下载速度</title>
<link>http://new.nginxs.net/read.php/post-201605222127/</link>
<author>nginxs</author><pubDate>2016-05-22T21:54:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605222127/</guid>
<comment>http://new.nginxs.net/read.php/post-201605222127/#comment-post-201605222127</comment>
<description><![CDATA[<p><strong>介绍</strong></p><p>有些时候需要把一些文件放到nginx供用户下载，但是你又怕用户占用大量带宽,这时候就应该给客户端限制传输速度了。<br/>limit_rate_after 5m;  #前5M的下载内容不进行限速<br/>limit_rate  1m;          #限速1M</p><p>举例：</p><pre><code>        location  /download/ {<br/>            limit_rate_after 5m;<br/>            limit_rate  1m;<br/>            alias /data/html/;<br/>        }</code></pre><p>这里的“limit_rate  1m;”的“1m”就是限速1M的意思，“0”就算不限速，<br/>limit_rate_after 5m； 是指传输5m不限速，完成后限速1M<br/>这里的限制是给每个请求的，如果用户开两个连接就是限制的两倍带宽, </p><p>当你带宽有限情况下只能限制用户的连接数,来限制用户使用最大带宽<br/>也可以根据连接连接数限制总带宽, 连接数超过限制直接返回“ 503 Service Temporarily Unavailable”</p><pre><code>    http {<br/>    ....<br/>    server ｛<br/>    .....<br/>    limit_conn_zone $server_name zone=servers:10m;<br/>    server {<br/>        location /download/ {<br/>            limit_conn servers 10;<br/>            limit_rate_after 500k;<br/>            limit_rate 50k;<br/>        }<br/>    }<br/>    ｝｝</code></pre><p>这里限制本域名的的连接数10个，每个连接预先不限制速度下载500k，然后再限速50k下载，这样10个连接同时下载最小的带宽 50k*10  最大带宽5000k</p><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p><p><a href="http://new.nginxs.net/read.php/post-201605182309/">06-nginx访问控制“限制ip”，“限制用户名”</a></p><p><a href="http://new.nginxs.net/read.php/post-201605210009">07-nginx geo区域访问控制</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211340">08-nginx的if语句条件判断</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211355">10-nginx内部变量和自定义变量</a></p><p><a href="http://new.nginxs.net/read.php/post-201605220051">11-nginx rewrite uri地址重写</a></p><p><a href="http://new.nginxs.net/read.php/post-201605222127">12-nginx限制文件下载速度</a></p>]]></description>
</item>
<item>
<title>11-nginx rewrite uri地址重写</title>
<link>http://new.nginxs.net/read.php/post-201605220051/</link>
<author>nginxs</author><pubDate>2016-05-22T00:55:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605220051/</guid>
<comment>http://new.nginxs.net/read.php/post-201605220051/#comment-post-201605220051</comment>
<description><![CDATA[<p><strong>介绍</strong></p><p>大家经常会遇到这样需求，一个活动页面的URL地址很长，推广起来产品运营和用户反馈不容易记住<br/>不美观，但是暂时没办法修改代码，这个时候就可以用到rewrite。或者你现在网站升级到https现在有些用户还在访问http你想统一用https，这些都可以用rewrite规则来实现。<br/>rewrite会重写用户的请求地址，但是不会修改问号后面参数，返回给用户的httpcode为302。</p><p>语法：rewrite regex replacement [flag];<br/>作用域：server, location, if<br/>rewrite_log on | off;        #rewrite日志开启和关闭<br/>set $user_pro  &quot;false&quot;;定义区域“main”<br/>uninitialized_variable_warn on | off;          控制是否记录警告未初始化的变量。默认开启；</p><p><strong>nginx和apache的rewrite简单对比</strong></p><p>以前大家在用apache做共享主机的时候在“.htaccess”文件写这些规则，但是nginx不是这样。<br/><strong>举例1：</strong></p><pre><code>    apache的rewrite规则<br/>    RewriteCond  %{HTTP_HOST}  example.org<br/>    RewriteRule  (.*)          http://www.example.org$1<br/><br/>    nginx的rewrite规则：<br/>    server {<br/>        listen       80;<br/>        server_name  www.example.org  example.org;<br/>        if ($http_host = example.org) {<br/>            rewrite  (.*)  http://www.example.org$1;<br/>        }<br/>    但是这种写法是不建议的，最好每个不同域名不同server｛｝</code></pre><p><strong>举例2：</strong></p><p>nginx会把所有匹配到以“/code/”目录开头的请求跳转到“<a href="http://192.168.1.128:8080/”但是不修改？后面参数">http://192.168.1.128:8080/”但是不修改？后面参数</a>。</p><pre><code>location ~ ^/code/<br/>{<br/>        rewrite (.*) http://192.168.1.128:8080/;<br/>}</code></pre><p><strong>举例3：</strong></p><p>正则匹配内容“^(/download/.<em>)/audio/(.</em>)..<em>$”，前面的每个“.</em>”映射到目标地址里面都是$1,$2,$3…..</p><pre><code>    rewrite ^(/download/.*)/audio/(.*)\..*$       $1/mp3/$2.ra  last;<br/>    return  403;            #返回httpcode 403<br/>    rewrite ^(/media/.*)/audio/(.*)\..*$       http://new.nginxs.net/$1/mp3/$2.ra  last;</code></pre><p><strong>rewrite标记</strong></p><p>描 述：如果使用正则匹配一个请求地址，URI将更改为指定的地址，并顺序执行配置文件中依次出现的指令，<br/>但是如果你想修改地址以后直接跳出则可以使用flag来处理下面介绍一下last,break,redirect,permanent四个标签</p><pre><code>     last                  #在搜索到相应的URI和location之后完成rewrite指令；停止处理当前的ngx_http_rewrite_module指令集,开始寻找一个新的位置改变URI匹配;<br/>     break              # 完成 rewrite指令处理直接break；<br/>     redirect          #返回302临时重定向，如果replacement替换部分是由http://开始，它将被应用。<br/>     permanent    #返回301代码永久重定向 </code></pre><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p><p><a href="http://new.nginxs.net/read.php/post-201605182309/">06-nginx访问控制“限制ip”，“限制用户名”</a></p><p><a href="http://new.nginxs.net/read.php/post-201605210009">07-nginx geo区域访问控制</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211340">08-nginx的if语句条件判断</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211355">10-nginx内部变量和自定义变量</a></p><p><a href="http://new.nginxs.net/read.php/post-201605220051">11-nginx rewrite uri地址重写</a></p>]]></description>
</item>
<item>
<title>10-nginx内部变量和自定义变量</title>
<link>http://new.nginxs.net/read.php/post-201605211355/</link>
<author>nginxs</author><pubDate>2016-05-21T14:04:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605211355/</guid>
<comment>http://new.nginxs.net/read.php/post-201605211355/#comment-post-201605211355</comment>
<description><![CDATA[<p><strong> 自定义nginx变量</strong></p><p>set $user_pro  &quot;false&quot;;定义区域“main”</p><p><strong>公有变量</strong></p><p>$arg_ 请求中的参数名称<br/>$args  请求中的参数<br/>$binary_remote_addr  客户地址在一个二进制形式、价值的长度总是4字节<br/>$body_bytes_sent<br/>$bytes_sent (ngx_http_core_module)发送到客户端字节数<br/>$bytes_sent (ngx_http_log_module)<br/>$connection   连接序列号<br/>$connection_requests (ngx_http_core_module)<br/>$connection_requests (ngx_http_log_module)<br/>$connections_active             #活跃连接数<br/>$connections_reading          #只读连接<br/>$connections_waiting            #等待连接<br/>$connections_writing             #写连接<br/>$content_length   Header里面内容长度”<br/>$content<em>type  Header里面内容格式”<br/>$cookie</em>       cookie的名字<br/>$date_local<br />$document_root  当前请求的root或者alias<br/>$document_uri     $url一样<br/>$fastcgi_path_info<br/>$fastcgi_script_name<br/>$geoip_area_code<br/>$geoip_city<br/>$gzip_ratio<br/>$host 主机或主机名”请求头字段,或服务器名称匹配的请求<br/>$hostname 主机名<br/>$https<br/>$invalid_referer<br/>$is_args      ？<br/>$limit_rate<br/>$memcached_key<br/>$modern_browser<br/>$msec (ngx_http_core_module)<br/>$msec (ngx_http_log_module)<br/>$msie<br/>$nginx_version<br/>$pid              worker进程的PID<br/>$pipe (ngx_http_core_module)<br/>$proxy_add_x_forwarded_for<br/>$proxy_host<br/>$proxy_port<br/>$proxy_protocol_addr<br/>$query_string<br/>$realip_remote_addr<br/>$realpath_root<br/>$remote_addr      远程IP<br/>$remote_port     远程端口<br/>$remote_user     进行基本用户验证时候的用户名<br/>$request            完整的原始请求<br/>$request_body        请求主体<br/>$request_body_file<br/>$request_completion<br/>$request_filename<br/>$request_id<br/>$request_length (ngx_http_core_module)<br/>$request_length (ngx_http_log_module)<br/>$request_method<br/>$request_time (ngx_http_core_module)<br/>$request_time (ngx_http_log_module)<br/>$request_uri      则是请求的整个字符串，包含了后面的query_string的。<br/>$scheme<br/>$secure_link<br/>$secure_link_expires<br/>$sent<em>http</em>$server_addr<br/>$server_name         接受请求的服务器的名称<br/>$server_port<br/>$server_protocol<br/>$session_log_binary_id<br/>$session_log_id<br/>$slice_range<br/>$spdy<br/>$spdy_request_priority<br/>$status (ngx_http_core_module) 请求服务状态<br/>$status (ngx_http_log_module)<br/>$tcpinfo_rtt<br/>$tcpinfo_rttvar<br/>$tcpinfo_snd_cwnd<br/>$tcpinfo_rcv_space<br/>$time_iso8601 (ngx_http_core_module)<br/>$time_iso8601 (ngx_http_log_module)  #iso8601标准的时间<br/>$time_local (ngx_http_core_module)  #本地时间<br/>$time_local (ngx_http_log_module)  当地时间在常见的日志格式<br/>$uid_got<br/>$uid_reset<br/>$uid_set<br/>$upstream_addr<br/>$upstream_cache_status<br/>$upstream_connect_time<br/>$upstream<em>cookie</em>$upstream_header_time<br/>$upstream<em>http</em>$upstream_response_length<br/>$upstream_response_time<br/>$upstream_status<br/>$uri         指的是请求的文件和路径，不包括“?”或者“#”之后的东西</p><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p><p><a href="http://new.nginxs.net/read.php/post-201605182309/">06-nginx访问控制“限制ip”，“限制用户名”</a></p><p><a href="http://new.nginxs.net/read.php/post-201605210009">07-nginx geo区域访问控制</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211340">08-nginx的if语句条件判断</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211355">10-nginx内部变量和自定义变量</a></p>]]></description>
</item>
<item>
<title>08-nginx的if语句条件判断</title>
<link>http://new.nginxs.net/read.php/post-201605211340/</link>
<author>nginxs</author><pubDate>2016-05-21T13:43:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605211340/</guid>
<comment>http://new.nginxs.net/read.php/post-201605211340/#comment-post-201605211340</comment>
<description><![CDATA[<p><strong>介绍</strong></p><p>语法：if(condition){………}<br/>配置作用域：server,location</p><p><strong>匹配条件</strong></p><p>“=”和““!=””       变量等于不等于条件<br/>“~”  和“~<em>”            匹配到指定内容是否区分大小写<br/>“!~”和&quot;!~</em>&quot;               匹配到指定内容是否区分大小写<br/>“-f”和“!-f”           检查一个文件是否存在<br/>&quot;-d&quot;  和&quot;!-d&quot;              检查一个目录是否存在<br/>&quot;-e&quot;和&quot;!-e&quot;                 检查一个文件，目录，软连接是否存在<br/>“-x”和“!-x”           检查一个是否有执行权限<br/>匹配的内容可以是字符串也可以是一个正则表达式。<br/>如果一个正则表达式包含“}”或者“；”就必须包含在单引号或双引号里面。</p><p><strong>执行条件</strong></p><pre><code>    if(condition){………}<br/>    if($variable ~ '^/product' ){………}<br/>    举例：<br/>    if ($http_user_agent ~ MSIE) {                          #只要“$http_user_agent”配置MSIE的<br/>        rewrite ^(.*)$ /msie/$1 break;                     #URL地址前面加"/msie"<br/>    }<br/><br/>    if ($http_cookie ~* "id=([^;]+)(?:;|$)") {<br/>        set $id $1;<br/>    }<br/><br/>    if ($request_method = POST) {<br/>        return 405;<br/>    }<br/><br/>    if ($slow) {<br/>        limit_rate 10k;<br/>    }<br/><br/>    if ($request_uri ~) {<br/>        return 403;<br/>    }<br/><br/>    if ($request_uri ~ "/test.html") {               #根据访问地址跳转到目标地址<br/>            rewrite ^ http://new.ngins.net;<br/>    }<br/><br/>    if (-x "/data/test.sh") {                              #根据文件是否有执行权限，跳转到目标<br/>            rewrite ^ http://new.ngins.net;<br/>      }</code></pre><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p><p><a href="http://new.nginxs.net/read.php/post-201605182309/">06-nginx访问控制“限制ip”，“限制用户名”</a></p><p><a href="http://new.nginxs.net/read.php/post-201605210009">07-nginx geo区域访问控制</a></p><p><a href="http://new.nginxs.net/read.php/post-201605211340">08-nginx的if语句条件判断</a></p>]]></description>
</item>
<item>
<title>09-nginx geo区域访问控制</title>
<link>http://new.nginxs.net/read.php/post-201605210009/</link>
<author>nginxs</author><pubDate>2016-05-21T00:16:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605210009/</guid>
<comment>http://new.nginxs.net/read.php/post-201605210009/#comment-post-201605210009</comment>
<description><![CDATA[<p>介绍<br/>geo是nginx的地域模块， 管理人员可以通过用户的ip信息查询到地理位置，再根据地理位置提供更好的服务。<br /><br/>由于免费的地理位置库往往不会太准确，所以没有准确地理位置库，不建议使用nginx geo模块进行精准投放用户类的行为</p><p>举例1：<br/>geo  $geo {<br/>default 0;<br/>192.168.1.159 1;<br/>192.168.1.128 2;<br/>}<br/>server {<br/>listen       80;<br/>server_name  localhost;<br/>root /usr/local/kafka/html;<br/>if ($geo = 1) {<br/>rewrite ^ <a href="http://new.nginxs.net">http://new.nginxs.net</a>;<br/>}<br/>if ($geo = 2) {<br/>rewrite ^ <a href="http://www.nginxs.net">http://www.nginxs.net</a>;<br/>}<br/>描述：geo模块会把<br/>192.168.1.159的 $geo=1最终跳转到new.nginxs.net<br/>192.168.1.128的 $geo=2最终跳转到www.nginxs.net<br/>其它的都是default $geo=0最终默认的正常访问</p><p>根据geo的值<br/>语法:     geo [$address] $variable { ... }<br/>作用域:   http<br/>描述指定变量的值的依赖在客户端IP地址。默认情况下,地址是取自$ remote_addr变量,</p><p>介绍<br/>geo是nginx的地域模块， 管理人员可以通过用户的ip信息查询到地理位置，再根据地理位置提供更好的服务。   </p><p><strong>举例1：</strong></p><pre><code>    geo  $geo {<br/>            default 0;<br/>            192.168.1.159 1;<br/>            192.168.1.128 2;<br/>    }<br/>        server {<br/>            listen       80;<br/>            server_name  localhost;<br/>            root /usr/local/kafka/html;<br/>            if ($geo = 1) {<br/>                    rewrite ^ http://new.nginxs.net;<br/>            }<br/>            if ($geo = 2) {<br/>                    rewrite ^ http://www.nginxs.net;<br/>            }</code></pre><p>描述：geo模块会把<br/>192.168.1.159的 $geo=1最终跳转到new.nginxs.net<br/>192.168.1.128的 $geo=2最终跳转到www.nginxs.net<br/>其它的都是default $geo=0最终默认的正常访问</p><p>根据geo的值<br/>语法:     geo [$address] $variable { ... }<br/>作用域:   http<br/>描述指定变量的值的依赖在客户端IP地址。默认情况下,地址是取自$ remote_addr变量,</p><p><strong>举例2：</strong></p><p>geo根据地域负载</p><pre><code>    http{<br/>    updtream BJ {<br/>            server 10.10.1.10:8080;<br/>        }<br/>    updtream SH {<br/>            server 10.10.2.10:8080;<br/>        }<br/>    updtream GZ {<br/>            server 10.10.3.10:8080;<br/>        }<br/>    updtream LO {<br/>            server 10.10.4.10:8080;<br/>        }<br/><br/>    geo $country {<br/>        default        BJ;     # $country的默认值BJ<br/>        include        conf/geo.conf;   #包含conf/geo.conf配置<br/>        delete         127.0.0.0/16;       #删除指定网络<br/>        proxy          192.168.100.0/24;   <br/>        proxy          2001:0db8::/32;<br/><br/>        127.0.0.0/24  SH;           #设置 $country=SH<br/>        127.0.0.1/32   GZ;           #设置 $country=GZ<br/>        10.1.0.0/16    BJ;           #设置 $country=BJ<br/>        192.168.1.0/24 LO;           #设置 $country=LO<br/>    }<br/><br/>    location / {<br/>    proxy_redirect off;<br/>    proxy_set_header Host $host;<br/>    proxy_set_header X-Real-IP $remote_addr;<br/>    proxy_pass http://$country;<br/>    access_log log/new.nginx.net.log main;<br/>    }<br/>    }</code></pre><p><strong>根据不同区域的用户访问不同服务器进行负载</strong></p><p>range的用法</p><pre><code>geoip_country  /usr/local/nginx-new/GeoIP.dat;      #读取IP位置库<br/>geoip_city     /usr/local/nginx-new/GeoLiteCity.dat;<br/>    geo $country {<br/>        ranges;<br/>        default                   ZZ;<br/>        127.0.0.0-127.0.0.0       US;<br/>        127.0.0.1-127.0.0.1       RU;<br/>        127.0.0.1-127.0.0.255     US;<br/>        10.1.0.0-10.1.255.255     RU;<br/>        192.168.1.0-192.168.1.255 UK;<br/>         }</code></pre><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p><p><a href="http://new.nginxs.net/read.php/post-201605182309/">06-nginx访问控制“限制ip”，“限制用户名”</a></p><p><a href="http://new.nginxs.net/read.php/post-201605210009">09-nginx geo区域访问控制</a></p>]]></description>
</item>
<item>
<title>06-nginx访问控制“限制ip”，“限制用户名”</title>
<link>http://new.nginxs.net/read.php/post-201605182309/</link>
<author>nginxs</author><pubDate>2016-05-18T23:14:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605182309/</guid>
<comment>http://new.nginxs.net/read.php/post-201605182309/#comment-post-201605182309</comment>
<description><![CDATA[<p><strong>介绍</strong>在一些特定的情况下nginx需要限制用户的访问例如根据一下条件：根据IP，根据用户，根据请求方法等。</p><p><strong>方式1：通过location里面IP限制请求，被限制请求返回403，如果要ipv6的限制编译安装的时候需要编译“ --with-ipv6”</strong>语法：（allow|deny） address | CIDR | unix: | all;<br/>作用域： http, server, location, limit_except</p><p>举例：限制ip：除去192.168.1.158不可以访问，“192.168.1.0/24”网段其他用户可以访问,除此之外的其它ip不可以访问。</p><pre><code>    server {<br/>        ...<br/>        deny  192.168.1.158;<br/>        allow 192.168.1.0/24;<br/>        deny  all;<br/>    }</code></pre><p><strong>根据用户名密码限制</strong></p><p>创建密码文件</p><pre><code>    [root@localhost nginx-new]# htpasswd -c ./passwdfile  admin  #添加用户名为admin<br/>    New password:                        #此处输入密码<br/>    Re-type new password:          #再次输入密码<br/>    Adding password for user admin<br/>    [root@localhost nginx-new]# cat passwdfile <br/>    admin:tKAyBpIh8xdyk<br/>    [root@localhost nginx-new]# mv passwdfile conf/<br/>            location /images/<br/>            {<br/>                    auth_basic           "Test login";<br/>                    auth_basic_user_file passwdfile;<br/>                    root /usr/local/kafka/html;<br/>            }</code></pre><p>请求地址http://new.nginxs.net/images/aaa.jpg<br/><img src="http://new.nginxs.net/storage/84287853.png" alt="" /></p><p><strong> satisfy 让你更加灵活使用多种验证方式</strong></p><p>允许访问如果所有(all)或至少一个(any)模块通过验证才可以访问。（ ngx_http_access_module, ngx_http_auth_basic_module or ngx_http_auth_request_module）<br/>默认是： satisfy all；必须通过所有验证</p><p>语法： satisfy [ all | any ]<br/>使用字段：http, server, location<br/>在下面配置里面使用了access模块和auth basic模块验证， satisfy any;就是说只要匹配到两种模块中的一种便可以正常访问</p><pre><code>            location /images/<br/>            {<br/>                     satisfy any;<br/>                   deny  192.168.1.1;<br/>                   deny  all;<br/>                    auth_basic           "Test login";<br/>                    auth_basic_user_file passwdfile;<br/>                    root /usr/local/kafka/html;<br/>            }</code></pre><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p><p><a href="http://new.nginxs.net/read.php/post-201605182309/">06-nginx访问控制“限制ip”，“限制用户名”</a></p>]]></description>
</item>
<item>
<title>02-zookeeper集群搭建</title>
<link>http://new.nginxs.net/read.php/post-201605141300/</link>
<author>nginxs</author><pubDate>2016-05-14T13:16:19+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605141300/</guid>
<comment>http://new.nginxs.net/read.php/post-201605141300/#comment-post-201605141300</comment>
<description><![CDATA[<p>首先准备三个节点<br/>192.168.1.127<br/>192.168.1.128<br/>192.168.1.129</p><p>先安装zookeeper<br/>cd /usr/local/src/<br/>wget <a href="http://apache.fayea.com/zookeeper/zookeeper-3.5.1-alpha/zookeeper-3.5.1-alpha.tar.gz">http://apache.fayea.com/zookeeper/zookeeper-3.5.1-alpha/zookeeper-3.5.1-alpha.tar.gz</a>tar zxf zookeeper-3.5.1-alpha.tar.gz<br/>mv zookeeper-3.5.1-alpha /usr/local/zookeeper</p><p>更改三个节点配置<br/>server.1=192.168.1.127:2008:6008<br/>server.服务器编号=服务器地址:LF通信端口:选举端口</p><p>cd  /usr/local/zookeeper  &amp;&amp; mkdir -p /data/zookeeper<br/>vim conf/zoo.cfg</p><pre><code>    tickTime=2000<br/>    initLimit=10<br/>    syncLimit=5<br/>    dataDir=/data/zookeeper<br/>    clientPort=2181<br/>    server.1=192.168.1.127:2008:6008<br/>    server.2=192.168.1.128:2008:6008<br/>    server.3=192.168.1.129:2008:6008</code></pre><p>启动前两个节点</p><pre><code>     ./bin/zkServer.sh start<br/>    ZooKeeper JMX enabled by default<br/>    /usr/bin/java<br/>    Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg<br/>    Starting zookeeper ... STARTED</code></pre><p>你会发现有报错是因为其他节点没有起来</p><pre><code>    2016-05-14 12:05:18,540 [myid:3] - WARN  [QuorumPeer[myid=3](plain=/0:0:0:0:0:0:0:0:2181)(secure=disabled):QuorumCnxManager@459] - Cannot open channel to 2 at election address /192.168.199.22<br/>    2:6008<br/>    java.net.ConnectException: Connection refused<br/>            at java.net.PlainSocketImpl.socketConnect(Native Method)<br/>            at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)<br/>            at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)<br/>            at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)<br/>            at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)<br/>            at java.net.Socket.connect(Socket.java:589)<br/>            at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:444)<br/>            at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:485)<br/>            at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:513)<br/>            at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:919)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1040)</code></pre><p><strong>查看集群状态</strong></p><h1>echo 'stat'|nc 192.168.1.128 2181</h1><p>Zookeeper version: 3.5.1-alpha-1693007, built on 07/28/2015 07:19 GMT<br/>Clients:<br/>/192.168.1.128:18281<a href="queued=0,recved=1,sent=0">0</a></p><p>Latency min/avg/max: 0/0/0<br/>Received: 1<br /><br/>Sent: 0<br/>Connections: 1<br/>Outstanding: 0<br/>Zxid: 0x100000000<br/>Mode: follower<br/>Node count: 5</p><p><strong>查看节点角色</strong>[root@test-node4 zookeeper]# ./bin/zkServer.sh status<br/>ZooKeeper JMX enabled by default<br/>/usr/bin/java<br/>Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg<br/>Client port found: 2181. Client address: localhost.<br/>Mode: leader<br/>zookeeper</p><p><a href="http://new.nginxs.net/read.php/post-201604152243/">zookeeper源码安装</a></p><p><a href="http://new.nginxs.net/read.php/post-201605141231/">00-zookeeper启动报错: myid file is missing 和 Problem starting AdminServer</a></p><p><a href="http://new.nginxs.net/read.php/post-201605141300">02-zookeeper集群搭建</a></p>]]></description>
</item>
<item>
<title>00-zookeeper启动报错: myid file is missing 和 Problem starting AdminServer</title>
<link>http://new.nginxs.net/read.php/post-201605141231/</link>
<author>nginxs</author><pubDate>2016-05-14T08:00:00+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605141231/</guid>
<comment>http://new.nginxs.net/read.php/post-201605141231/#comment-post-201605141231</comment>
<description><![CDATA[<p>zookeeper集群节点启动时候会读取“dataDir”目录下的id,所以必须在对应节点的“dataDir”目录下创建“myid”文件，里面填写serverid<br/>举例：<br/>vim conf/zoo.cfg</p><pre><code>    tickTime=2000<br/>    initLimit=10<br/>    syncLimit=5<br/>    dataDir=/data/zookeeper<br/>    clientPort=2181<br/>    server.1=192.168.1.128:2008:6008<br/>    server.2=192.168.1.128:2008:6008<br/>    server.3=192.168.1.129:2008:6008</code></pre><p>我在这里就需要在<br/>“192.168.1.127”节点echo &quot;1&quot; &gt;/data/zookeeper/myid<br/>“192.168.1.128”节点echo &quot;2&quot; &gt;/data/zookeeper/myid<br/>“192.168.1.129”节点echo &quot;3&quot; &gt;/data/zookeeper/myid</p><pre><code>    2016-05-14 12:01:01,079 [myid:] - INFO  [main:QuorumPeerConfig@114] - Reading configuration from: /usr/local/zookeeper/bin/../conf/zoo.cfg<br/>    2016-05-14 12:01:01,085 [myid:] - INFO  [main:QuorumPeerConfig@316] - clientPortAddress is 0.0.0.0/0.0.0.0:2181<br/>    2016-05-14 12:01:01,085 [myid:] - INFO  [main:QuorumPeerConfig@320] - secureClientPort is not set<br/>    2016-05-14 12:01:01,089 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally<br/>    org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing /usr/local/zookeeper/bin/../conf/zoo.cfg<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:135)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:110)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)<br/>    Caused by: java.lang.IllegalArgumentException: myid file is missing<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerConfig.checkValidity(QuorumPeerConfig.java:637)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:508)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:348)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:131)<br/>            ... 2 more<br/>    Invalid config, exiting abnormally</code></pre><p>zookeeper的管理员端口被占用，需要修改配置里的“zookeeper.admin.serverPort=8080”，默认8080没有写出来，只要改为一个没使用端口即可</p><pre><code>    2016-05-14 12:17:36,385 [myid:1] - WARN  [main:QuorumPeer@723] - Problem starting AdminServer<br/>    org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands<br/>            at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:100)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:721)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:183)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:120)<br/>            at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)<br/>    Caused by: java.net.BindException: Address already in use<br/>            at sun.nio.ch.Net.bind0(Native Method)<br/>            at sun.nio.ch.Net.bind(Net.java:444)<br/>            at sun.nio.ch.Net.bind(Net.java:436)<br/>            at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)<br/>            at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)<br/>            at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)<br/>            at org.mortbay.jetty.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:315)<br/>            at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)<br/>            at org.mortbay.jetty.Server.doStart(Server.java:235)<br/>            at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)<br/>            at org.apache.zookeeper.server.admin.JettyAdminServer.start(JettyAdminServer.java:96)<br/>            ... 4 more<br/>    org.apache.zookeeper.server.admin.AdminServer$AdminServerException: Problem starting AdminServer on address 0.0.0.0, port 8080 and command URL /commands</code></pre><p>zookeeper</p><p><a href="http://new.nginxs.net/read.php/post-201604152243/">zookeeper源码安装</a></p><p><a href="http://new.nginxs.net/read.php/post-201605141231/">00-zookeeper启动报错: myid file is missing 和 Problem starting AdminServer</a></p>]]></description>
</item>
<item>
<title>阿里云基础架构使用分享</title>
<link>http://new.nginxs.net/read.php/post-201605132355/</link>
<author>nginxs</author><pubDate>2016-05-14T00:06:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605132355/</guid>
<comment>http://new.nginxs.net/read.php/post-201605132355/#comment-post-201605132355</comment>
<description><![CDATA[<p><strong>介绍</strong>随着公有云发展，电商大户亚马逊公有云盈利快速上升，使得公有云市场得到了很大估值。国内也掀起一片”云热潮“。<br/>阿里云算是国内推广和发展的佼佼者，用户量也比较多，整个服务架构现在也慢慢完善。到今年终于凑够了一个基础架构分享给大家</p><p><img src="http://new.nginxs.net/storage/27a797fb.jpg" alt="" /></p><p>ECS优惠活动连接，一般人找不到啊<br/><a href="http://tb.cn/sI3Hw6x">http://tb.cn/sI3Hw6x</a></p><h3>解释</h3>]]></description>
</item>
<item>
<title>09-nginx limit_req和limit_conn_zone</title>
<link>http://new.nginxs.net/read.php/post-201605132217/</link>
<author>nginxs</author><pubDate>2016-05-13T23:29:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605132217/</guid>
<comment>http://new.nginxs.net/read.php/post-201605132217/#comment-post-201605132217</comment>
<description><![CDATA[<p><strong>介绍</strong></p><p>nginx limit_req和limit_conn_zone两个模块可以有效的帮助你屏蔽一部分恶意请求。</p><p>nginx限制请求频率<br/>nginx limit_req用于每个IP的请求频率<br/>超出阈值的请求默认将返回503 (Service Temporarily Unavailable)<br/>rate的单位分为&quot;r/s&quot;,&quot;r/m&quot;<br/>域声明语法： limit_req_zone key zone=name:size rate=rate;<br/>域调用语法：limit_req zone=name [burst=number] [nodelay]; </p><pre><code>例1：<br/>limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;     #以”$binary_remote_addr“为辨识获取钥匙，定义one为限值域，10m为钥匙桶大小（10兆），1r/s为1次每秒<br/>server {                                 #上面定义就是同一IP的用户每秒仅能请求一次失败返回503<br/>    location /search/ {<br/>        limit_req_status 599;              #指定受限后请求返回httpcode 599<br/>        limit_req zone=one burst=5 nodelay;                         #调用one域，burst=5是5个特权令牌（特权令牌拥有者可以直接请求服务）  超过503，nodelay超过令牌数不等待令牌发送<br/>    }                                             #如果不调用nodelay用户会一直等到服务正常相应<br/><br/>    例2：<br/>    limit_req_zone $server_name zone=perserver:10m rate=10r/s;     #这次就是根据用户访问域名限制访问频率<br/>    server {<br/>        limit_req_log_level  error;                                   #指定受限制请求日志级别error<br/>        limit_req zone=perip burst=5 nodelay;            #如果访问域名$server_name超过10+5次/s就会直接503<br/>    }</code></pre><p>限制连接数</p><pre><code>    limit_conn_zone key zone=name:size; #必须在http级别配置<br/>    limit_conn_status code;        #限制报错httpcode<br/>    limit_conn_log_level info | notice | warn | error; 首先请求日志级别<br/>    limit_zone name $variable size; #必须在http级别配置<br/><br/>    http {<br/>        limit_conn_zone $binary_remote_addr zone=addr:10m;   #根据用户ip限制连接数<br/>             limit_conn_zone $server_name zone=perserver:10m;  #根据用户请求域名限制连接数<br/>    ...<br/>    server {<br/>    ...<br/>    location /download/ {<br/>                limit_conn addr 1;                                      #限制同时请求”/download/“目录的连接只有一个<br/>            }</code></pre><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p>]]></description>
</item>
<item>
<title>04-nginx的root和alias区别</title>
<link>http://new.nginxs.net/read.php/post-201605122203/</link>
<author>nginxs</author><pubDate>2016-05-12T22:05:00+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605122203/</guid>
<comment>http://new.nginxs.net/read.php/post-201605122203/#comment-post-201605122203</comment>
<description><![CDATA[<p><strong>介绍</strong></p><p>nginx配置文件中常用root指定当前项目根目录<br/>alias也是用来替换用户指定的项目目录的<br/>接下来说一下他们的差别</p><p>项目配置文件<br/>[root@localhost webroot]# tree<br/>.<br/>├── code<br/>│   └── test2.html<br/>└── test.html</p><p>1 directory, 2 files<br/>[root@localhost webroot]# cat test.html<br/>aaa<br/>[root@localhost webroot]# cat code/test2.html<br/>bbb</p><p>nginx配置<br/>alias重定向项目目录<br/>location /code/<br/>{<br/>alias /data/webroot/;<br/>}<br/>访问结果<br/>[root@localhost webroot]# curl <a href="http://192.168.1.128/html/test.html">http://192.168.1.128/html/test.html</a>aaa<br/>访问到文件：/data/webroot/tesst.html</p><p>root重定向项目目录</p><p>location /code/<br/>{<br/>root /data/webroot/;<br/>}<br/>访问同样结果<br/>[root@localhost webroot]# curl <a href="http://192.168.1.128/code/test2.html">http://192.168.1.128/code/test2.html</a>bbb<br/>访问到的文件：/data/webroot/code/tesst2.html</p><p>总结<br/>nginx使用root来指定“$document_root”变量,请求访问到的文件是“$document_root”+URL<br/>使用alias访问的就是“$document_root”+&quot;匹配的后面一部分&quot;</p><p>绝对路径名对应的当前请求的root或alias指定的路径时，所有的符号链接解析为真正的路径</p><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p>]]></description>
</item>
<item>
<title>03-nginx负载均衡</title>
<link>http://new.nginxs.net/read.php/post-201605072039/</link>
<author>nginxs</author><pubDate>2016-05-07T20:49:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605072039/</guid>
<comment>http://new.nginxs.net/read.php/post-201605072039/#comment-post-201605072039</comment>
<description><![CDATA[<p>介绍<br/>负载均衡是 跨多个应用程序实例优化资源利用率，最大限度地提高吞吐量，降低延迟，并确保容错配置的一个常用的技术。<br/>nginx支持 以下三种算法<br/>round-robin：请求循环发放到每台机器<br/>Least connected ：下一个请求将发送给最少活跃连接数的服务器<br/>Session persistence： 散列函数被用于确定应该为下一请求（基于客户端的IP地址）来选择什么样的服务器。</p><ol><br/><li><br/><p><strong>默认负载算法 round-robin</strong></p><pre><code>http {<br/>……<br/>    upstream web1 {<br/>    server 192.168.1.128:9200;<br/>    server 192.168.1.128:3000;<br/>    }<br/>   server {<br/>        listen       80;<br/>        server_name  localhost;<br/>location /<br/>{<br/>    proxy_pass http://web1;<br/>}<br/>｝}</code></pre></li></ol><p>在下面面实例中有两个应用，分别是9200端口和3000端口，如果没指定权重默认轮询。将所有的http请求代理到web1</p><p>nginx的反向代理包括：http负载均衡，https，fastcgi，uwsgi，SCGI，memcached<br/>假如要给https做负载均衡和代理的话，只要使用“HTTPS”作为协议就可以了。<br/>举例子：<br/>proxy_pass <a href="https://web1">https://web1</a>;</p><p>当设置FastCGI，uwsgi，SCGI或memcached的负载均衡时，也需要分别使用fastcgi_pass，uwsgi_pass，scgi_pass和memcached_pass指令。</p><ol><br/><li><strong>最少连接数算法  Least connected </strong></li></ol><p>如果想要更加平衡各个应用程序的负载，最少连接算法应该应用在连接和请求时间更长的场合。<br/>使用最少连接数负载算法，nginx将尝试避免单个应用过多的请求导致负载，发送新的请求到请求更少的机器。<br/>要想使用最少连接数负载算法可进行以下配置：<br/>upstream web1 {<br/>least_conn;<br/>server 192.168.1.128:9200;<br/>server 192.168.1.128:3000;<br/>}</p><ol><br/><li><strong>会话保持 Session persistence</strong></li></ol><p>大家会发现“round-robin”和“ Least connected ”两种算法之后的请求都可能分布到不通的节点，因此不能保证用户的一直请求到指定服务器。假如你现在每个用户访问都会在nginx服务保存一个session，这样你就需要这个用户之后的访问一直到保存session的机器，这样这个客户端就需要对这个服务器产生“粘性”和“持久性”，在这里我们需要使用 ip hash的算法实现负载。</p><p>使用ip-hash，客户端的IP地址被用作散列键来确定应客户的要求进行选择什么样的服务器。此方法确保来自同一客户端的请求将总是被定向到在同一台服务器不可用时除外。<br/>要想使用保持session的持久负载，需要进行一下设置：</p><pre><code>        upstream web1 {<br/>            ip_hash;<br/>            server 192.168.1.128:9200;<br/>            server 192.168.1.128:3000;<br/>        }</code></pre><ol><br/><li><strong>权重</strong></li></ol><p>我们也可以使用权重来影响服务器节点的负载，之前的例子没有指定，所以权重都一样，<br/>当使用“round-robin”算法的时候应用或多或少，这样才可以提供足够请求，并且当请求以均匀的方式进行处理，并完成够快。<br/>权重高的节点分配的请求将比低的节点多，举例子：</p><pre><code>    upstream web1 {<br/>        server 192.168.1.128:9200 weight=3;<br/>        server 192.168.1.128:3000;<br/>    }</code></pre><p>加入有4个请求将有三个请求到“9200”端口，1个到“3000”端口<br/>同样也可以在最近的版本nginx使用权重在“Least connected”和“ip-hash”负载算法</p><ol><br/><li><strong>健康检查</strong></li></ol><p>nginx的健康检查是为了一个检测失败的服务不再分到新的请求。当max_fails设置为0时候关闭健康检查<br/>nginx支持以下健康参数：<br/>max_fails=3                 检查到失败3次，判定失败<br/>fail_timeout=2           服务判定失败后等待2秒进行重试此期间服务视为不可用，默认为10秒</p><ol><br/><li><strong>拓展</strong></li></ol><p>down   标记服务器为宕机<br/>backup  标记这台服务器为备份服务器，当主服务器不可用是请求此服务器<br/>例子：</p><pre><code>    upstream web1 {<br/>        server 192.168.1.128:9200 weight=3;<br/>        server 192.168.1.129:9200  backup;<br/>        server 192.168.1.128:3000;<br/>         keepalive 32;<br/>    }</code></pre><p>keepalive 32;  保持连接数32个<br/>max_conns=333；   限制最大连接数333个</p><p>resolver 指定DNS解析域名</p><pre><code>    http {<br/>        resolver 10.0.0.1;<br/>        upstream u {<br/>            zone ...;<br/>            ...<br/>            server example.com resolve;<br/>        }<br/>    }</code></pre><p>slow_start=10   设置服务将在规定的10秒内权重0恢复到正常</p><p>nginx的upstream模块<br/><a href="http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server">http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server</a></p><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p>]]></description>
</item>
<item>
<title>02-nginx IO模型</title>
<link>http://new.nginxs.net/read.php/post-201605070009/</link>
<author>nginxs</author><pubDate>2016-05-07T00:11:00+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201605070009/</guid>
<comment>http://new.nginxs.net/read.php/post-201605070009/#comment-post-201605070009</comment>
<description><![CDATA[<p>介绍</p><p>nginx的分为epoll和select两种多路复用IO接口。</p><p>select模型</p><p>因为select使用了遍历非阻塞式IO，这样就会导致web服务器大量并发情况下遍历量增加，导致文件描述符使用增加，会产生很多的TCP TIME_WAIT, ‘TIME_WAIT’数一旦这个超出系统设置web服务将无法提供服务。<br/>因为select模型是遍历方式所以对于连接数少却异常活跃的客户端很实用，恰巧减少了服务等待，提高效率。</p><p>epoll模型</p><p>epoll支持linux2.6+的内核，是使用非阻塞式IO，更加有利于对文件描述符利用率</p><p>nginx教程</p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p>]]></description>
</item>
<item>
<title>web服务ab性能测试</title>
<link>http://new.nginxs.net/read.php/post-201604252206/</link>
<author>nginxs</author><pubDate>2016-04-25T22:08:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201604252206/</guid>
<comment>http://new.nginxs.net/read.php/post-201604252206/#comment-post-201604252206</comment>
<description><![CDATA[<p><strong>介绍</strong>ab是apche自带的一个web服务测试工具，很方便使用。</p><p><strong>案例说明</strong></p><ul><br/><li>10个连接，请求100次<br/>ab -c 10 -n 100 <a href="http://192.168.1.128/">http://192.168.1.128/</a></li></ul><p>-t 测试时长<br/>-c 请求的并发客户端<br/>-n 请求的次数</p><ul><br/><li><br/><p>10个连接，每次100请求执行5秒<br/>ab -c 10 -n 100 -t 5 <a href="http://192.168.1.128/">http://192.168.1.128/</a></p><pre><code>[root@localhost nginx-new]# wc -l logs/access.log <br/>101 logs/access.log<br/>[root@localhost nginx-new]#  ab -c 10 -n 100 -t 5 http://192.168.1.128/<br/>This is ApacheBench, Version 2.3 &lt;$Revision: 655654 $&gt;<br/>Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/<br/>Licensed to The Apache Software Foundation, http://www.apache.org/<br/><br/>Benchmarking 192.168.1.128 (be patient)<br/>Completed 5000 requests<br/>Completed 10000 requests<br/>Completed 15000 requests<br/>Completed 20000 requests<br/>Completed 25000 requests<br/>Completed 30000 requests<br/>Completed 35000 requests<br/>Completed 40000 requests<br/>Completed 45000 requests<br/>Completed 50000 requests<br/>Finished 50000 requests<br/><br/>Server Software:        nginx/1.9.15<br/>Server Hostname:        192.168.1.128<br/>Server Port:            80<br/><br/>Document Path:          /<br/>Document Length:        612 bytes<br/><br/>Concurrency Level:      10<br/>Time taken for tests:   4.527 seconds<br/>Complete requests:      50000<br/>Failed requests:        0<br/>Write errors:           0<br/>Total transferred:      42250000 bytes<br/>HTML transferred:       30600000 bytes<br/>Requests per second:    11045.80 [#/sec] (mean)<br/>Time per request:       0.905 [ms] (mean)<br/>Time per request:       0.091 [ms] (mean, across all concurrent requests)<br/>Transfer rate:          9114.94 [Kbytes/sec] received<br/><br/>Connection Times (ms)<br/>              min  mean[+/-sd] median   max<br/>Connect:        0    0   0.1      0       2<br/>Processing:     0    1   0.3      1       8<br/>Waiting:        0    1   0.3      1       8<br/>Total:          0    1   0.3      1       9<br/><br/>Percentage of the requests served within a certain time (ms)<br/>  50%      1             #1ms完成99%请求<br/>  66%      1<br/>  75%      1<br/>  80%      1<br/>  90%      1<br/>  95%      1<br/>  98%      2<br/>  99%      2<br/> 100%      9 (longest request)</code></pre></li></ul>]]></description>
</item>
<item>
<title>第一章 nginx安装基本引导和进程信号</title>
<link>http://new.nginxs.net/read.php/post-201604241128/</link>
<author>nginxs</author><pubDate>2016-04-24T11:34:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201604241128/</guid>
<comment>http://new.nginxs.net/read.php/post-201604241128/#comment-post-201604241128</comment>
<description><![CDATA[<p><strong>介绍</strong></p><p><img src="http://new.nginxs.net/storage/594d45cb.png" alt="" /><br/>nginx是一款轻量级的http服务，它可以坐高并发的web服务，也可以做负载均衡,现在进行 nginx基础教程</p><p><strong>快速源码安装</strong></p><pre><code>    wget http://nginx.org/download/nginx-1.9.15.tar.gz<br/>     tar zxf nginx-1.9.15.tar.gz <br/>    cd nginx-1.9.15<br/>     ./configure --prefix=/usr/local/nginx-new --user=www --group=www  --with-poll_module\<br/>       --with-threads   --with-file-aio     --with-http_ssl_module   --with-http_v2_module \<br/>       --with-http_gzip_static_module   --with-pcre    --with-stream  \<br/>         --with-http_gunzip_module   --with-http_dav_module \<br/>     --with-http_geoip_module   --with-file-aio <br/>    make &amp;&amp; make install</code></pre><p>进程方式</p><p>nginx服务分为master进程和worker进程，master会对worker进程进行配置管理和维护。<br/>nginx采用基于失误的管理模型有效的把请求分配给各个进程，可以使用固定配置也可以自动的调整可用的CPU数量。</p><p>默认的nginx配置文件目录&quot;/usr/local/nginx-new/etc/nginx.conf&quot;</p><p><strong>启动、停止、重启</strong></p><pre><code>    [root@localhost nginx-1.9.15]# /usr/local/nginx-new/sbin/nginx -h<br/>    nginx version: nginx/1.9.15<br/>    Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]<br/><br/>    Options:<br/>      -?,-h         : help<br/>      -v            : version<br/>      -V            : show version and configure options then exit<br/>      -t            : 测试配置并退出<br/>      -T            : 测试配置并dump出来退出<br/>      -q            : 在配置和测试期间不输出错误日志<br/>      -s signal     :发送一个消息给 master process:进行 stop, quit, reopen, reload<br/>      -p prefix     : 设置nginx安装目录<br/>      -c filename   : 指定配置文件(default: conf/nginx.conf)<br/>      -g directives :配置文件的指定指令<br/><br/>    ./sbin/nginx -s { stop|quit | reopen | reload}<br/>    stop    快速停止服务（强制停止当前服务）<br/>    quit  优雅停止服务（等worker进程任务完成，再退出）<br/>    reload reload服务<br/>    reopen  重新打开日志文件</code></pre><p><strong>nginx进程信号</strong></p><p>nginx可以使用进程信号控制，主进程把进程ID写入“xx/nginx.pid&quot;<br/>信号对照表：<br/>TERM,INT                 快速关闭<br/>QUIT                     优雅关闭<br/>USER1                    重新打开日志文件<br/>USER2                    升级或者执行文件<br/>WINCH                   优雅关闭worker进程</p><p><strong>nginx教程</strong></p><p><a href="http://new.nginxs.net/read.php/post-201604241128/">第一章 nginx安装基本引导和进程信号</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605070009/">02-nginx IO模型</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605072039">03-nginx负载均衡</a> </p><p><a href="http://new.nginxs.net/read.php/post-201605122203/">04-nginx的root和alias区别</a></p><p><a href="http://new.nginxs.net/read.php/post-201605132217/">05-nginx limit_req和limit_conn_zone</a></p>]]></description>
</item>
<item>
<title>zookeeper源码安装</title>
<link>http://new.nginxs.net/read.php/post-201604152243/</link>
<author>nginxs</author><pubDate>2016-04-15T22:56:11+08:00</pubDate>
<guid isPermalLink="true">http://new.nginxs.net/read.php/post-201604152243/</guid>
<comment>http://new.nginxs.net/read.php/post-201604152243/#comment-post-201604152243</comment>
<description><![CDATA[<p><img src="http://new.nginxs.net/storage/6e38309d.png" alt="" /><br/><strong>介绍</strong></p><p>zookeeper是一个管理分布式服务协调的开源服务，它本身亦是分布式服务。<br/>是hadoop，Hbase,codis服务的重要组件，为分布式应用提供一致性服务：配置维护，域名服务，分布式同步，组服务等。</p><p><strong>下载安装包</strong></p><pre><code>    yum -y install openjdk<br/>     wget http://apache.fayea.com/zookeeper/zookeeper-3.5.1-alpha/zookeeper-3.5.1-alpha.tar.gz<br/>    tar zxf zookeeper-3.5.1-alpha.tar.gz <br/>    cd zookeeper-3.5.1-alpha</code></pre><p><strong>配置文件</strong></p><p>这里先使用默认设置</p><p>cat ./conf/zoo.cfg</p><pre><code>tickTime=2000                           单位毫秒，用来做两次心跳最低超时时间间隔<br/>initLimit=10                  集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数（tickTime的数量）。<br/>syncLimit=5                              F节点和L节点最多心跳失败5次。<br/>dataDir=/data/zookeeper       内存数据快照到本地的数据，除非特别说明，否则将是更新事物日志。<br/>clientPort=2181                        客户端端口</code></pre><p><strong>启动服务</strong></p><p>zookeeper默认会占用2181，8080，55144三个端口</p><pre><code>    [root@salt-master zookeeper-3.5.1-alpha]# ./bin/zkServer.sh <br/>    ZooKeeper JMX enabled by default<br/>    Using config: /usr/local/src/zookeeper-3.5.1-alpha/bin/../conf/zoo.cfg<br/>    Usage: ./bin/zkServer.sh [--config &lt;conf-dir&gt;] {start|start-foreground|stop|restart|status|print-cmd}<br/><br/>    [root@salt-master zookeeper-3.5.1-alpha]# ./bin/zkServer.sh start<br/>    ZooKeeper JMX enabled by default<br/>    Using config: /usr/local/src/zookeeper-3.5.1-alpha/bin/../conf/zoo.cfg<br/>    Starting zookeeper ... STARTED</code></pre><p><strong>连接测试</strong></p><pre><code> ./bin/zkCli.sh -server 192.168.1.115:2181<br/>Connecting to 192.168.1.115:2181<br/>WATCHER::<br/>WatchedEvent state:SyncConnected type:None path:null<br/>[zk: 192.168.1.115:2181(CONNECTED) 1] ls /<br/>[zookeeper]<br/>[zk: 192.168.1.115:2181(CONNECTED) 4] ls2 /zookeeper<br/>'ls2' has been deprecated. Please use 'ls [-s] path' instead.<br/>[config, quota]<br/>cZxid = 0x0<br/>ctime = Thu Jan 01 08:00:00 CST 1970<br/>mZxid = 0x0<br/>mtime = Thu Jan 01 08:00:00 CST 1970<br/>pZxid = 0x0<br/>cversion = -2<br/>dataVersion = 0<br/>aclVersion = 0<br/>ephemeralOwner = 0x0<br/>dataLength = 0<br/>numChildren = 2</code></pre><p><strong>查看zookeeper服务信息</strong></p><pre><code>    [root@salt-master codis]# echo stat | nc 192.168.1.115 2181 <br/>    Zookeeper version: 3.5.1-alpha-1693007, built on 07/28/2015 07:19 GMT<br/>    Clients:<br/>     /192.168.1.115:56637[0](queued=0,recved=1,sent=0)<br/>     /192.168.1.115:56608[1](queued=0,recved=160,sent=160)<br/><br/>    Latency min/avg/max: 0/0/22<br/>    Received: 162<br/>    Sent: 161<br/>    Connections: 2<br/>    Outstanding: 0<br/>    Zxid: 0x1<br/>    Mode: standalone<br/>    Node count: 5</code></pre>]]></description>
</item>
</channel></rss>