The Mirages

樱桃沟夹事

最近一直研究postgresql,也想做一个像mysql一样的replication。 毕竟单台postgresql无论性能如何,总有撑不下去的时候。

网上查了下关于postgresql的一些资料,发现pg本身不带replication这个功能,master-slave也没有,但是一些第三方的软件可以支持这些,一开始发现slony似乎看着不错,但是配了一天发现这个东西配置实在是太复杂了,需要手动增加相关的库,以后增加新的也比较麻烦,而功能也比较单一。

后来问了下公司里来自yahoo的同事,发现yahoo是使用pgpool-II来实现的。找了下资料发现这个配置比较简单,基本是单个配置文件就可以搞定,而且有不同的conf.sample提供出来,有master-slave的config sample和replication的config sample.这样就节省了大量的时间了。

说下安装过程,还是比较简单。 安装时候需要指定一下postgresql的安装路径就可以了,其它没有特别的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 --with-pgsql= --with-pgsql-includedir= --with-pgsql-ibdir= 
```

安装完成后在安装目录的etc下有几个实例文件。里面说明的也比较清楚。下面修改的一个是监听端口,由于我不想改程序,所以就让pgpoo-II直接监听5432端口,这个也是postgresql的默认端口。另外一个是relication_mode=yes,这个一定要这样选。load_balance_mode = true 这个就随意了,这个就是把select查询分配到2个不同的机器上。

```c
# # pgpool-II configuration file sample # $Header: /cvsroot/pgpool/pgpool-II/pgpool.conf.sample,v 1.26 2009/02/15 05:26:28 t-ishii Exp $ # Host name or IP address to listen on: '*' for all, '' for no TCP/IP # connections listen_addresses = '192.168.100.1' # Port number for pgpool port = 5432 # Port number for pgpool communication manager pcp_port = 9898 # Unix domain socket path.  (The Debian package defaults to # /var/run/postgresql.) socket_dir = '/tmp' # Unix domain socket path for pgpool communication manager. # (Debian package defaults to /var/run/postgresql) pcp_socket_dir = '/tmp' # Unix domain socket path for the backend. Debian package defaults to /var/run/postgresql! backend_socket_dir = '/tmp' # pgpool communication manager timeout. 0 means no timeout, but strongly not recommended! pcp_timeout = 5 # number of pre-forked child process num_init_children = 32 # Number of connection pools allowed for a child process max_pool = 10 # If idle for this many seconds, child exits.  0 means no timeout. child_life_time = 300 # If idle for this many seconds, connection to PostgreSQL closes. # 0 means no timeout. connection_life_time = 0 # If child_max_connections connections were received, child exits. # 0 means no exit. child_max_connections = 0 # If client_idle_limit is n (n > 0), the client is forced to be # disconnected whenever after n seconds idle (even inside an explicit # transactions!) # 0 means no disconnect. client_idle_limit = 0 # Maximum time in seconds to complete client authentication. # 0 means no timeout. authentication_timeout = 10 # Logging directory logdir = '/tmp' # pid file name pid_file_name = '/tmp/pgpool.pid' # Replication mode replication_mode = true # Load balancing mode, i.e., all SELECTs are load balanced. # This is ignored if replication_mode is false. load_balance_mode = true # if there's a data mismatch between master and secondary # start degeneration to stop replication mode replication_stop_on_mismatch = false # If true, replicate SELECT statement when load balancing is disabled. # If false, it is only sent to the master node. replicate_select = false # Semicolon separated list of queries to be issued at the end of a session reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT' # for 8.3 or newer PostgreSQL versions DISCARD ALL can be used as # follows. However beware that DISCARD ALL holds exclusive lock on # pg_listener so it will be a serious performance problem if there are # lots of concurrent sessions. # reset_query_list = 'ABORT; DISCARD ALL' # If true print timestamp on each log line. print_timestamp = true # If true, operate in master/slave mode. master_slave_mode = false # If true, cache connection pool. connection_cache = true # Health check timeout.  0 means no timeout. health_check_timeout = 20 # Health check period.  0 means no health check. health_check_period = 0 # Health check user health_check_user = 'nobody' # Execute command by failover. # special values:  %d = node id #                  %h = host name #                  %p = port number #                  %D = database cluster path #                  %m = new master node id #                  %M = old master node id #                  %% = '%' character # failover_command = '' # Execute command by failback. # special values:  %d = node id #                  %h = host name #                  %p = port number #                  %D = database cluster path #                  %m = new master node id #                  %M = old master node id #                  %% = '%' character # failback_command = '' # If true, automatically locks a table with INSERT statements to keep # SERIAL data consistency.  If the data does not have SERIAL data # type, no lock will be issued. An /\*INSERT LOCK\*/ comment has the # same effect.  A /NO INSERT LOCK*/ comment disables the effect. insert_lock = true # If true, ignore leading white spaces of each query while pgpool judges # whether the query is a SELECT so that it can be load balanced.  This # is useful for certain APIs such as DBI/DBD which is known to adding an # extra leading white space. ignore_leading_white_space = true # If true, print all statements to the log.  Like the log_statement option # to PostgreSQL, this allows for observing queries without engaging in full # debugging. log_statement = true # If true, incoming connections will be printed to the log. log_connections = true # If true, hostname will be shown in ps status. Also shown in # connection log if log_connections = true. # Be warned that this feature will add overhead to look up hostname. log_hostname = true # if non 0, run in parallel query mode parallel_mode = false # if non 0, use query cache enable_query_cache = false #set pgpool2 hostname pgpool2_hostname = '' # system DB info system_db_hostname = '192.168.100.1' system_db_port = 5433 system_db_dbname = 'pgpool' system_db_schema = 'pgpool_catalog' system_db_user = 'pgpool' system_db_password = '' # backend_hostname, backend_port, backend_weight # here are examples backend_hostname0 = '192.168.100.1' backend_port0 = 5433 backend_weight0 = 1 #backend_data_directory0 = '/data' backend_hostname1 = '192.168.100.2' backend_port1 = 5432 backend_weight1 = 1 #backend_data_directory1 = '/data1' # - HBA - # If true, use pool_hba.conf for client authentication. In pgpool-II # 1.1, the default value is false. The default value will be true in # 1.2. enable_pool_hba = false # - online recovery - # online recovery user recovery_user = 'nobody' # online recovery password recovery_password = '' # execute a command in first stage. recovery_1st_stage_command = '' # execute a command in second stage. recovery_2nd_stage_command = '' # maximum time in seconds to wait for the recovering node's postmaster # start-up. 0 means no wait. # this is also used as a timer waiting for clients disconnected before # starting 2nd stage recovery_timeout = 90 # If client_idle_limit_in_recovery is n (n > 0), the client is forced # to be disconnected whenever after n seconds idle (even inside an # explicit transactions!)  0 means no disconnect. This parameter only # takes effect in recovery 2nd stage. client_idle_limit_in_recovery = 0
```

启动也简单

```c
pgpool -n -d > /tmp/pgpool.log 2>&1
```

关闭也很容易

```c
pgpool stop

配置nginx之前需要安装nginx的时候安装上支持ssl的模块

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 ./configure --prefix=/opt/server/nginx --with-md5=/usr/lib --with-sha1=/usr/lib --with-pcre  --with-http_perl_module  --with-http_stub_status_module --with-http_ssl_module  --with-http_gzip_static_module  --with-http_random_index_module  --with-http_dav_module --with-poll_module 
```

首先是生成key和csr文件,这个当中需要填写相关信息。这个比较简单。key一般就是1024位的。有特殊需求要仔细咨询CA。

```c
openssl genrsa -des3 -out pay.key 1024 openssl req -new -key pay.key -out pay.csr
```

接着从CA网站上下载相应的中间证书,保存为intermedia.cer。等你想CA提交CSR之后,CA会单独通过邮件发给你一个证书,请保存为pay.cer。

上面都是申请SSL常规流程,下面是nginx配置需要注意的内容。首先要把intermedia.cer的内容追加到pay.cer

```c
cat  intermedia.cer >> pay.cer
```

接着需要配置nginx.conf的配置文件了,如下:

```c
ssl                        on; ssl_certificate      /data/key/nginx/pay.cer; ssl_certificate_key  /data/key/nginx/pay.key; ssl_client_certificate /data/key/nginx/intermedia.cer; ssl_session_timeout  5m; ssl_protocols  SSLv3 TLSv1; ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers   on; error_page 497 "https://$host$uri?$args";

老实说我并不是一个好的面试官,也许可以说是差的。但是最经因为要招系统工程师和系统主管所以也面了很多人。说或发生的一些其中的事情。

面试真的有时候是靠运气的,你运气好,面的职位和自己要求和能力符合,而且公司正希望尽快招人,那你很快就能得到offer,而如果手上有很多人可以跳,那你就得等等了,未必可以马上入职,也许还会不被选上。 但是还有一个问题如果我看上了,但是对方不放人,这个也是挺麻烦的,比如我曾经看上一个新网和一个新浪的兄弟,结果都没能来,最终都被他们公司给留住了。

昨天有2个新浪的兄弟的简历过来,看简历是两个人差不太多,但是一个已经在离职中了,一个还未离职,所以就约了那位正在离职的兄弟来,结果感觉并不适合,于是推荐给游戏部门去了。

还有一些面的人都是我在当天接到人事的邮件说今天会有人来面试,于是只能匆匆看了下简历去接待别人,而之前根本没看过简历,这样的面试很不靠谱,比如有个中华英才网和航美的兄弟,一个是windows平台的,而一个是通讯平台的,这个跟我们互联网全部linux平台完全不相符合的,这个简直就是浪费我和面试者的时间。

而当一个职位有多种选择的时候更是会让我为难,有段时间老大想要一位日语非常好的,能力一般的系统工程师直接派到日本去,于是找了一位,结果老大后来又改变主意,结果应该让那位MM很受伤,来来去去面了几次由于老大的想法变了而无法成功。

而当一个职位有多种需求,比如偏系统还是偏数据库的时候也是比较难选择的。有次来了位联众的兄弟,是做数据库的,如果他做数据库我就做系统这块。面试发现数据库能力也算普通的,而且要价比较高,结果老大就想让我来负责数据库,要招个管系统的人。而后来发现要招个好点的系统也花同样多的钱,于是就又想那位兄弟了。但是人家不怎么想来了。现在似乎忽悠了半天终于能来了,但是是年后的事情了。

阅读全文 »

  1. 生成server-key:keytool -genkey -alias pay.test.com -keyalg RSA -keystore pay.key

  2. 生成key的CSR: keytool -certreq -keyalg RSA -alias tomcat -file pay.csr -keystore pay.key

  3. 将csr文件发送给证书颁发机构

  4. 下载证书颁发机构的中间key,在他们网站有,保存为 intermediate.crt

  5. 证书颁发机构会用email方式发给你一个client key, 保存为client.cer

  6. 将中间key导入到pay.key中:/opt/java/bin/keytool -import -trustcacerts -alias root -file intermediate.crt -keystore pay.key

  7. 将client key导入到pay.key中:/opt/java/bin/keytool -import -trustcacerts -alias pay.test.com -file client.cer -keystore pay.key

  8. 最后显示下pay.key信息:/opt/java/bin/keytool -list -keystore pay.key

  9. 输入keystore密码:Keystore 类型: JKS
    Keystore 提供者: SUN

您的 keystore 包含 2 输入  
  
pay.test.com, 2010-1-8, PrivateKeyEntry,  
认证指纹 (MD5): XX:XX:XX:XX:2B:C1:2F:6B:CA:25:D7:XX:XX:XX:XX:XX  
root, 2010-1-8, trustedCertEntry,  
认证指纹 (MD5): XX:XX:XX:XX:0D:31:84:C6:25:EA:6F:XX:XX:XX:XX:XX
  1. 修改tomcat的server.xml文件

  2. ;

最近要进行网络购物,碰到2个网站,一个叫京东,一个叫卓越亚马逊
京东上面我以前注册有帐号,但是我忘记帐号名字叫什么了,于是想用找回密码的功能,结果找回密码功能非要我输入用户名和注册邮箱地址,结果我连用户名都不知道怎么找回密码。于是想注册一个新的,结果就很顺利的提示我该邮箱已经使用,于是只好暂时不买。
今天为了要查建设银行在穆迪上面的得分,于是想上穆迪的网站看看,顺利注册了,突发奇想就想试试它的找回密码功能是怎么样的,原来它使用2种找回密码方式,一种是输入用户名找回密码,一种是输入当时注册邮箱找回密码,2种方式都很顺利的重置了我的密码,看来我们的IT销售网站居然连人家一个金融网站都不如。
关于卓越亚马逊的事情是这样的。
上周看到卓越上面有买满129元送旅游书,结果我很快凑满了129元的图书,总价是150.5元,选择同时发送,结果告诉我要到1月4日才能发送,我想怎么那么慢呢,于是看看到底哪本书慢了,于是就选择拆包分开发送,系统提示我可能会产生额外的费用,我想不都是免快递费用了呀,应该不会产生额外的费用,而且系统也根本没有提示我具体多少金额。心里想着今天应该就能到了,今天登录他们网站一看,居然比我昨天价格多出7元钱。难道是拆包发送导致的,于是找帮助中心:http://www.amazon.cn/help/finalpage.asp?pageid=346 终于让我找到了拆分订单具体费用的计算方式,但是根据这个计算方式我怎么都没有算出来是7元钱,没有办法,知道打客服电话,取消了这个订单。还是自己手动分成2个订单吧。但是我还是没有明白卓越拆分订单收费方式的合理性和费用是如何计算的。既然全国都免快递费用,为什么还要收这个拆分订单费用呢?对于客户自己手动提交多个订单不就可以了呀。还有那个费用,客服小姐跟我说这个费用的多少跟送货的距离有关系,但是卓越网站上是找不到这个内容的,更别说计算公式了。
另外,卓越居然把我收藏夹的收藏时间都给重置为同一天,真是岂有此理,还不给我回复,看来“25元门”卓越还是继续吧。

命令图式一位台湾老兄贡献

键盘图已经忘记了是从哪里转来的了

2009年快过去了。
从年初的防止通货紧缩
到年底的通货膨胀
我也从上海来到了北京
年初冬季刚来过北京
4月就正式进驻了北京
一切变化的也太快了
从PP公司到了OO公司
一如既往的开始不适应
遥想在PP第一个礼拜
居然没有一个晚上睡好
而OO同样如此
加班从来不知道什么时候是结束
上班从来不知道什么时候是开始
貌似大家都很忙
其实装忙穷忙瞎忙
2009年房价从一个所谓的低谷到疯狂
人人都在谈论这个
其实对于我来说
无论是所谓的低谷还是疯狂
我都是三个字“买不起”
健康不健康国家会告诉你
2009年还学到了一词叫被XX
从被涨薪到被代表
毫无疑问我们生活在了被时代
好不容易到年底了
网络风暴开始了
接着扫黄打黑
我们的BT挂了
其实根本没有关系
BTCHINA只是一个供给页
BT精神是永远不会丢失的
有的只是技术的进步和提高
共享让我们提早进入了共产
4月跟着PP来到了厦门
一个美丽的海岛城市
挺好,很安逸也,只是担心台风
生活在鼓浪屿上的人们真是幸福
每年跟PP有个这样的回忆真好
只是下次只能用我的相机
或者直接上单反吧
2009年真是一个不平凡的一年
这一年我想到了要出国
还是感谢MARTIN的提醒
努力学习英文
可方法换了一个又一个
始终没办法提高
现在才明白坚持一个方法
勇敢的走下去才会成功
期待着2012年的到来
年末真的来了一部叫《2012》的片子
在第三排
看的很晃眼
希望在2012年自己真有个质的改变

《2012》看完也有一个多星期了,看的时候立刻让我想起的一首歌词是:“把每天当做末日来相爱。”
既然是最后了,那就干点自己想干的事情。
《2012》这个片子延续了导演以往的风格,当然这次加重了中国的戏份。而美国还是扮演世界警察的角色,就算他们总统不在了,任何一个美国人都能充当这个角色。《2012》不错的东西还是他的特技水平,看了这个还是之前的《后天》以及《指环王》系列,再看看国内的这些动画片,首先基本都是2D水平,其次所有动作看着都非常假,这方面我也不是太懂。但是80年代我们的《西游记》那么成功,那么有水平,难道我们现在还落后了不是。再说我们的计算机的计算能力在世界上也是仅次于美国的,按理硬件落后不是理由,《西游记》的时候我们计算机水平落后到不知道在哪里呢,但是特技效果现在看来还是非常不错。
国际分账大片在国内运营也有很多年了,从1995年的《亡命天涯》到具体也有14年时间了。我们的电影制作水平在某些方面确实有了大步的提高,基本都是大成本,大明星,大制作,高票房的模式,这个时候我们是否还要注重下低成本,小制作的片子,电影的火花应该是这种片子吧。就跟《疯狂的石头》一样。现在国产电影越来越没故事情节了,除了大波波还是大波波。
所以说无论做什么事情外部条件都不是做不完美的理由。
假如我到了最后一天,我会去做什么事情把它做完美呢,感觉工作上似乎没有我特别想做的完美了,完了这个要是让我雇主看到了,他还会要不要我呢? 想做的事情就是陪着老婆看星星,最好能够爬到西山顶上能够守在一起看着星星。哎,经常回想起在公司望着太阳在西山落下,真是太美了,要是能够在西山顶上看着太阳落山,又能在万里无云的夜晚看到那么多星星,那真是太完美了。虽然我基本不知道大部分星星的名字,可那又有什么关系呢。

看完北京台《蜗居》已经挺久了,一直想写个观后感,但是不知道从何入手。想不到现在这个片子还听热门。
热门只是因为有个比较好的话题房子而已,而其他什么最流氓的电视剧,这些纯粹是瞎扯淡,难道是仅仅因为宣传的噱头。
这个片子我觉得最混蛋的是海藻的姐姐海萍,为了自己的房子居然把自己的妹妹最终推向了那个火坑。而等有了自己的房子后又像一个救世主一样来进行说教。房子毁了可不仅仅是2个家庭。
现在魔都和帝都的房价已经涨的没人能够看懂了,小时候我们学过国民党统治区物价飞涨,民不聊生,现在都已经活生生的出现在我们面前了。
去年年底是一个房价的低点,由于外部金融危机造成的,就是这个时候国家鼓励大家买房子,现在很多人后悔当时没听国家的没买房子,而现在又涨起来了。其实都是他们自己造成的,到今年2月临涨前其实很多KFS已经撑不下去了,可由于我们的不团结,很多看到低一点就开始抢购了,而人类的从众意识导致了这个一发不可收拾,其实要是我们再坚持1年不买,那现在估计上海内环房价已经4K-6K了。
专家每天都在说刚性需求,然后又出来丈母娘需求,现在又出来毕业生需求,其实都是政府自己定义的需求,我们这些傻蛋都被晃进去了。
所以我们千万别指望国家主动来调房价,无论哪个市长市委书记说,那都是空谈。他们都是同一链条上的。

0%