Rootop 服务器运维与web架构

2014-05-24
发表者 Venus
暂无评论

SUSE下搭建lamp环境

最近对SUSE产生了兴趣,正好看到腾讯云有优惠,遂买了一个折腾下。
opensuse:~ # dmidecode | grep “Product”
Product Name: HVM domU #腾讯的虚拟化

搭建个lamp平台
了解到suse下安装软件用zypper或者是yast
opensuse:~ # zypper install -y apache2  (install可以缩写为 in )
opensuse:~ # zypper in -y php5 php5-mysql apache2-mod_php5 php5-gd php5-mbstring php5-curl
opensuse:~ # service apache2 start (start/stop/restart/status)
opensuse:~ # zypper in -y MySQL-server-community
opensuse:~ # cp /usr/share/mysql/my-small.cnf /etc/my.cnf #默认不拷贝配置文件
opensuse:~ # service mysql start  (start/stop/restart/status)
opensuse:~ # mysql -V
mysql Ver 14.12 Distrib 5.0.26, for suse-linux (x86_64) using readline 5.1
发现版本好老

apache
默认apache主目录在  /etc/apache2/
默认网站根目录在      /srv/www/htdocs

php
默认主配置文件在   /etc/php5/apache2/php.ini

mysql
默认数据目录在      /var/lib/mysql (跟redhat一样)
默认主配置文件没有,手动拷贝到/etc/下

修改mysql默认存储引擎:
opensuse:~ # vi /etc/my.cnf
[mysqld]
default-storage-engine=InnoDB

保存退出重启mysql服务。
opensuse:~ # service mysql restart

修改mysql密码:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set password=password(‘root’) where user=’root’;
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

然后就找个php模板放上去,测试一下环境。

(suse的iptables发现好麻烦,没搞定还。默认腾讯云的iptables是清空规则的。)

SUSE关闭iptables:

suse下的iptables管理方式和rh不同
opensuse:~ # chkconfig –list | grep firewall
SuSEfirewall2_init 0:off 1:off 2:off 3:off 4:off 5:off 6:off
SuSEfirewall2_setup 0:off 1:off 2:off 3:off 4:off 5:off 6:off

opensuse:~ # SuSEfirewall2 status/start/stop
SuSEfirewall2: SuSEfirewall2 not active

2014-05-22
发表者 Venus
暂无评论

wordpress实现https后台加密登陆

生成证书及密钥:

当然需要先安装openssl,并且nginx编译时编译进ssl模块。
[root@Rootop ~]# openssl req -new -x509 -days 365 -nodes -out /etc/ssl/certs/www.rootop.org.pem -keyout /etc/ssl/certs/www.rootop.org.key
配置nginx:
在原有虚拟主机或者主配置文件添加:
server
{
listen 443;
ssl on;
ssl_certificate /etc/ssl/certs/www.rootop.org.pem; #证书
ssl_certificate_key /etc/ssl/certs/www.rootop.org.key; #密钥

“`
重启nginx。
配置wordpress:
wordpress本身支持https,只需要修改 wp-config.php 即可实现。
require_once(ABSPATH . ‘wp-settings.php’); 代码部分上面定义如下内容:
define(‘FORCE_SSL_LOGIN’, true); #登陆加密
define(‘FORCE_SSL_ADMIN’, false); #后台加密

然后在iptables中开放443端口即可。
这样一来默认访问都是80端口,登陆后台,点击登陆的时候会走443端口。

2014-05-21
发表者 Venus
暂无评论

安装redis的php扩展模块

从 https://github.com/nicolasff/phpredis/releases 可以找到已发布的版本。
这里找到的版本为:phpredis-2.2.5
安装redis的php扩展模块:
[root@localhost ~]# cd phpredis-2.2.5
[root@localhost phpredis-2.2.5]# phpize
Configuring for:
PHP Api Version:         20090626
Zend Module Api No:      20090626
Zend Extension Api No:   220090626
[root@localhost phpredis-2.2.5]# ./configure
[root@localhost phpredis-2.2.5]# make
[root@localhost phpredis-2.2.5]# make install
Installing shared extensions:     /usr/lib64/php/modules/
修改php.ini,添加载入模块:
extension_dir=/usr/lib64/php/modules/
extension=redis.so
重启apache。

一个基于php的web管理redis程序-phpRedisAdmin。
下载地址:https://github.com/ErikDubbelboer/phpRedisAdmin/releases
下载phpRedisAdmin.zip这个文件包。
传到服务器中。通过url访问。

2014-05-20
发表者 Venus
暂无评论

CentOS6.5下配置Redis-2.8.9主从复制

redis复制原理:
当设置好slave服务器后,slave会建立和master的连接,然后发送sync命令。无论是第一次同步建立的连接还是连接断开后的重新连 接,master都会启动一个后台进程,将数据库快照保存到文件中,同时master主进程会开始收集新的写命令并缓存起来。后台进程完成写文件 后,master就发送文件给slave,slave将文件保存到磁盘上,然后加载到内存恢复数据库快照到slave上。接着master就会把缓存的命 令转发给slave。而且后续master收到的写命令都会通过开始建立的连接发送给slave。从master到slave的同步数据的命令和从 client发送的命令使用相同的协议格式。当master和slave的连接断开时slave可以自动重新建立连接。如果master同时收到多个 slave发来的同步连接命令,只会使用启动一个进程来写数据库镜像,然后发送给所有slave。

环境信息:
selinux、iptables 关闭
master centos6.5_x65 ip:192.168.0.76
slave    centos6.5_x65 ip:192.168.0.75

两台机器安装redis,过程略。
修改master主配置文件:
[root@localhost ~]# vi /usr/local/redis/conf/redis.conf
daemonize yes #守护进程
保存退出。
启动master:
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf

修改slave主配置文件:
daemonize yes #守护进程
slaveof 192.168.0.76 6379 #定义master的ip及端口
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
[root@localhost ~]# lsof -i:6379 #看到服务已启动并且与master建立连接
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 4713 root 4u IPv6 21909 0t0 TCP *:6379 (LISTEN)
redis-ser 4713 root 5u IPv4 21911 0t0 TCP *:6379 (LISTEN)
redis-ser 4713 root 6u IPv4 21915 0t0 TCP 192.168.0.75:44736->192.168.0.76:6379 (ESTABLISHED)

测试:
在master执行:
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set test1 aaa #添加test1
OK
127.0.0.1:6379> get test1
“aaa”
127.0.0.1:6379> set test2 bbb ##添加test2
OK
127.0.0.1:6379> get test2
“bbb”
127.0.0.1:6379>

在slave执行:
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> get test1 #获取数据
“aaa”
127.0.0.1:6379> get test2
“bbb”
127.0.0.1:6379>

默认slave是只能读取,不能添加数据的。在slave添加数据时会报错:
127.0.0.1:6379> set test3 ccc
(error) READONLY You can’t write against a read only slave.

要启用slave的写操作,需要修改配置文件,将slave-read-only改为no
slave-read-only no #yes改为no

redis的主从复制与mysql比较来说配置还是很简单的。

2014-05-19
发表者 Venus
暂无评论

CentOS6.5下安装Redis-2.8.9

Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部分场合可以对关系数据库起到很好的补充作用。
它提供了Python,Ruby,Erlang,PHP客户端,支持复制。
目前最新版本为:redis-2.8.9
下载地址:http://download.redis.io/releases/redis-2.8.9.tar.gz
安装:
[root@localhost ~]# yum install -y gcc gcc-c++ tcl
[root@localhost redis-2.8.9]# make
[root@localhost redis-2.8.9]# make test #检查是否有错误

 328 seconds - unit/memefficiency

\o/ All tests passed without errors!

Cleanup: may take some time... OK
make[1]: Leaving directory `/root/redis-2.8.9/src'

如果看到上面几行信息,表明通过。
因为redis不支持configure配置预配置环境,所以为了管理方便,手动创建redis家目录用来存放命令和配置文件。
[root@localhost redis-2.8.9]# mkdir -p /usr/local/redis/bin
[root@localhost redis-2.8.9]# mkdir /usr/local/redis/conf
[root@localhost redis-2.8.9]# cd src/
[root@localhost src]# cp redis-benchmark redis-check-aof redis-check-dump redis-sentinel redis-server redis-cli /usr/local/redis/bin/ #相关命令
[root@localhost src]# cd .. && cp redis.conf /usr/local/redis/conf/ #拷贝主配置文件

修改配置文件:
[root@localhost ~]# vi /usr/local/redis/conf/redis.conf
daemonize yes #no改为yes,启动守护进程。
保存退出,启动redis。
[root@localhost ~]# /usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
[root@localhost ~]# lsof -i:6379 #6379为redis默认监听端口
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
redis-ser 7324 root 4u IPv6 22814 0t0 TCP *:6379 (LISTEN)
redis-ser 7324 root 5u IPv4 22816 0t0 TCP *:6379 (LISTEN)

测试:
redis自带命令行工具,也可以通过telnet到端口测试。
[root@localhost ~]# /usr/local/redis/bin/redis-cli
127.0.0.1:6379> set test rootop
OK
127.0.0.1:6379> get test
“rootop”
127.0.0.1:6379> exit

redis配置参数详解:
daemonize
如果值是“yes”,则启动服务的时候是后台守护进程形式,如果值是“no”,则相反

pidfile
指定存储Redis进程号的文件路径

port
指定当前Redis服务的端口,默认为6379

tcp-backlog
此参数确定了TCP连接中已完成队列(完成三次握手之后)的长度, 当然此值必须不大于Linux系统定义的/proc/sys/net/core/somaxconn值,默认是511,而Linux的默认参数值是128。当系统并发量大并且客户端速度缓慢的时候,可以将这二个参数一起参考设定。

timeout
客户端和Redis服务端的连接超时时间,默认是0,表示永不超时。

tcp-keepalive
如果值非0,单位是秒,表示将周期性的使用SO_KEEPALIVE检测客户端是否还处于健康状态,避免服务器一直阻塞,官方给出的建议值是60S。

loglevel
Redis总共支持四个级别:debug、verbose、notice、warning。
Debug:记录很多信息,用于开发和测试;
Varbose:有用的信息,不像debug会记录那么多;
Notice:普通的verbose,常用于生产环境;
Warning:只有非常重要或者严重的信息会记录到日志;
默认是notice级别。

logfile
日志的存储路径

databases
可用的数据库数,默认值为16,默认数据库为0,数据库范围在0-(database-1)之间,个人觉得DB的概念类似于命名空间

save
保存数据库快照信息到磁盘,其对应的值有两个,比如save 300 10表示:300秒内至少有300个key被改变时,触发保存信息到磁盘的事件。

stop-writes-on-bgsave-error
当持久化出现错误之后,是否继续提供写服务

rdbcompression
持久化到RDB文件时,是否压缩,“yes”为压缩,“no”则反之

rdbchecksum
读取和写入的时候是否支持CRC64校验,默认是开启的

dbfilename
镜像文件的名字

dir
当前工作目录,配置文件和镜像文件等都在此目录下

masterauth
设置访问master服务器的密码

slave-serve-stale-data
当slave服务器和master服务器失去连接后,或者当数据正在复制传输的时候,如果此参数值设置“yes”,slave服务器可以继续接受客户端的请求,否则,会返回给请求的客户端如下信息“SYNC with master in progress”

slave-read-only
是否允许slave服务器节点只提供读服务

repl-disable-tcp-nodelay
指定向slave同步数据时,是否禁用socket的NO_DELAY选项。若配置为“yes”,则禁用NO_DELAY,则TCP协议栈会合并小包统一发送,这样可以减少主从节点间的包数量并节省带宽,但会增加数据同步到slave的时间。若配置为“no”,表明启用NO_DELAY,则TCP协议栈不会延迟小包的发送时机,这样数据同步的延时会减少,但需要更大的带宽。通常情况下,应该配置为no以降低同步延时,但在主从节点间网络负载已经很高的情况下,可以配置为yes。

slave-priority
指定slave的优先级。在不只1个slave存在的部署环境下,当master宕机时,Redis Sentinel会将priority值最小的slave提升为master。需要注意的是,若该配置项为0,则对应的slave永远不会自动提升为master。

appendonly
开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。默认是不开启的。

appendfilename
默认为appendonly.aof。

appendfsync
设置aof的同步频率,有三种选择always、everysec、no,默认是everysec表示每秒同步一次。

no-appendfsync-on-rewrite
指定是否在后台aof文件rewrite期间调用fsync,默认为no,表示要调用fsync(无论后台是否有子进程在刷盘)。Redis在后台写RDB文件或重写afo文件期间会存在大量磁盘IO,此时,在某些linux系统中,调用fsync可能会阻塞。

auto-aof-rewrite-percentage
指定Redis重写aof文件的条件,默认为100,表示与上次rewrite的aof文件大小相比,当前aof文件增长量超过上次afo文件大小的100%时,就会触发background rewrite。若配置为0,则会禁用自动rewrite

auto-aof-rewrite-min-size
指定触发rewrite的aof文件大小。若aof文件小于该值,即使当前文件的增量比例达到auto-aof-rewrite-percentage的配置值,也不会触发自动rewrite。即这两个配置项同时满足时,才会触发rewrite。

lua-time-limit
一个Lua脚本最长的执行时间,单位为毫秒,如果为0或负数表示无限执行时间,默认为5000

notify-keyspace-events

aof-rewrite-incremental-fsync
aof rewrite过程中,是否采取增量文件同步策略,默认为“yes”。 rewrite过程中,每32M数据进行一次文件同步,这样可以减少aof大文件写入对磁盘的操作次数