Rootop 服务器运维与web架构

2017-03-31
发表者 Venus
java.lang.OutOfMemoryError: PermGen space已关闭评论

java.lang.OutOfMemoryError: PermGen space

内存溢出,增加tomcat占用内存
编辑 tomcat/bin/catalina.sh文件找到 Using CATALINA_BASE  (大约在第268行)在上面添加一行,如下:

JAVA_OPTS="-server -XX:PermSize=128M -XX:MaxPermSize=256M"
echo "Using CATALINA_BASE: $CATALINA_BASE"

重启tomcat

2017-03-30
发表者 Venus
docker启动容器时启动容器中的服务已关闭评论

docker启动容器时启动容器中的服务

需求:容器中需要跑一个tomcat服务,要实现容器启动时随容器启动tomcat

实现方法:

1、自定义一个镜像,因为官方centos镜像默认/etc/rc.d/rc.local没有执行权限(centos7)

docker run -dit --volume /home/dockermount:/mnt centos /bin/bash

/home/dockermount 这个目录用于主机和容器之间复制数据
启动一个容器,配置好jdk和tomat,过程略过
chmod 777 /etc/rc.d/rc.local  添加权限

编辑 /etc/rc.local 添加jdk环境变量,添加tomcat启动脚本

JAVA_HOME=/usr/local/jdk
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH

/usr/local/tomcat/bin/startup.sh

/bin/bash

保存退出
提交到本地镜像

docker ps 查看刚才的容器id

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f31da645ef98 centos:latest "/bin/bash" 6 minutes ago Up 6 minutes dev1

 容器id 镜像别名
[root@localhost ~]# docker commit f31da645ef98 centos-tomcat

[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos-tomcat latest bc6be3dd8ff8 17 seconds ago 620.2 MB

[root@localhost ~]# docker run -dit --hostname dev --name dev --publish 10003:8080 --volume /home/dockermount:/mnt --restart always centos-tomcat /etc/rc.local

注意后面是 /etc/rc.local 会去执行这个,其实它就是个脚本
这样就实现容器里随容器启动而运行服务了。

2017-03-23
发表者 Venus
linux下安装git服务端已关闭评论

linux下安装git服务端

[root@m2 ~]# yum install -y epel-*
[root@m2 ~]# yum install -y git
创建仓库目录
[root@m2 ~]# mkdir /mnt/githome
初始化目录
[root@m2 ~]# git init --bare /mnt/githome/
添加一个git用户,用来给开发者通过ssh访问git仓库 (git-shell是禁止服务器登录)
[root@m2 ~]# useradd git -s /usr/bin/git-shell
修改仓库属主属组
[root@m2 ~]# chown -R git:git githome/

下载windows客户端
https://git-scm.com/download/win
默认安装
打开”Git Bash”,生成秘钥:
ssh-keygen.exe -t rsa
一路回车
生成的秘钥默认保存在 /c/Users/Administrator/.ssh下
将 id_rsa.pub 公钥发给git管理员,在服务器中把公钥追加到/home/git/.ssh/authorized_keys中(一行一个)

追加公钥:
cat id_rsa.pub >> /home/git/.ssh/authorized_keys

authorized_keys 默认644权限,给444权限也可,如果400权限,git提交更新之类的动作无法使用,无权限读取认证文件。

这样客户端通过git用户操作仓库的时候就用秘钥验证。
每一个开发者都必须生成秘钥并追加(公钥)到authorized_keys中。
或者全部开发者共用一个秘钥。

PS:
git是通过ssh实现,不是一个服务。

2017-03-13
发表者 Venus
shell 中 read 退格问题已关闭评论

shell 中 read 退格问题

原文:http://blog.csdn.net/lanyang123456/article/details/52263608

问题描述:
read读取数据,误输入,需要删除时,backspace 却无法删除,反而出现字符^H。
例如:输入defef,接着按backspace尝试删除,结果:

defef^H^H

解决办法:
在read之前,添加如下命令,重新定义erase:

stty erase ^H

注意:
如果在使用read时,使用-n选项 ,则上述解决办法无效。

直接在脚本顶部加一行:

#!/bin/bash
stty erase ^h

2017-03-10
发表者 Venus
keepalived通过脚本检测实现虚拟ip漂移已关闭评论

keepalived通过脚本检测实现虚拟ip漂移

需求:
当主机、mysql服务不可用时,漂移VIP到备机,备机接替工作。

keepalived主机:

global_defs
{
 notification_email
 {
 xxx@qq.com
 }

 notification_email_from root@localhost
 smtp_server localhost
 smtp_connect_timeout 30
 router_id lvs_master
}


vrrp_script chk_mysql_port #定义一个脚本名称 必须先定义,再用track_script调用
{
 script "/root/check.sh"
 interval 1
}

vrrp_instance VI_1
{
 state MASTER
 interface eth0
 virtual_router_id 51
 priority 100
 advert_int 1

 authentication
 {
 auth_type PASS
 auth_pass 1111
 }

 virtual_ipaddress
 {
 192.168.200.16
 }

 track_script # 执行先前定义的脚本
 {
 chk_mysql_port
 }

}

vrrp_script 一定要写在 vrrp_instance 之上,否则下面的 track_script 是不会执行的

keepalived备机:

global_defs
{
 notification_email
 {
 xxx@qq.com
 }

 notification_email_from root@localhost
 smtp_server localhost
 smtp_connect_timeout 30
 router_id lvs_slave
}

vrrp_instance VI_1
{
 state SLAVE
 interface eth0
 virtual_router_id 51
 priority 99
 advert_int 1

 authentication
 {
 auth_type PASS
 auth_pass 1111
 }

 virtual_ipaddress
 {
 192.168.200.16
 }
}

脚本内容:

#!/bin/bash
c=`netstat -tnlp | grep 3306 | wc -l`

if [ $c != 1 ]; then

 service keepalived stop

fi