Latest Entries »

weblogic10.3.6卸载补丁脚本

#!/bin/bash
BSU_PACH=/home/weblogic/Oracle/Middleware/utils/bsu
WLSHOME_PACH=/home/weblogic/Oracle/Middleware/wlserver_10.3

# 将获取到的补丁jar包放入临时的文件,方便后续卸载
cd ${BSU_PACH} && ./bsu.sh -prod_dir=${WLSHOME_PACH} -status=applied -verbose -view | grep jar > tmp_jar

# 将查询到的tmp_jar文件通过tac逆序取出
jar_names=($(tac tmp_jar | awk ‘{print $NF}’ | awk -F ‘.’ ‘{print $(NF-1)}’))
for jar_name in ${jar_names[@]}; do
echo “remove ${jar_name}”
cd ${BSU_PACH} && ./bsu.sh -remove -patchlist=${jar_name} -prod_dir=${WLSHOME_PACH}
done

#!/bin/bash
BSU_PACH=/home/weblogic/Oracle/Middleware/utils/bsu
WLSHOME_PACH=/home/weblogic/Oracle/Middleware/wlserver_10.3
PKG_PACH=ftp://10.1.1.1/patch/weblogic/10.3.6/
PKG_NAME=p33172858_1036_Generic.zip

# 判断清空旧文件夹中内容或创建补丁文件夹
if [ -d ${BSU_PACH}/cache_dir ];then
cd ${BSU_PACH}/cache_dir; rm -rf *
else
mkdir -p ${BSU_PACH}/cache_dir
fi

# PKG_NAME是补丁包名称
cd ${BSU_PACH}/cache_dir && curl -o ./${PKG_NAME} ${PKG_PACH}/${PKG_NAME}

# 解压补丁包
cd ${BSU_PACH}/cache_dir && unzip *.zip

#更改bsu.sh脚本中的内存参数,提高打补丁速度
if [ -f ${BSU_PACH}/bsu.sh.bak ];then
echo “bsu has changed.”
else
cp ${BSU_PACH}/bsu.sh ${BSU_PACH}/bsu.sh.bak
cd ${BSU_PACH} && sed -i ‘5c MEM_ARGS=”-Xms4096m -Xmx4096m -XX:-UseGCOverheadLimit”‘ ./bsu.sh
fi

#停服务
ps -ef | grep java| grep weblogic | grep -v “grep” 2>&1 >/dev/null
if [[ $? -eq 0 ]];then
ps -ef |grep java| grep weblogic | grep -v “grep”|awk ‘{print $2}’|xargs kill -9
else
echo “weblogic process is not exsits”
fi

#打补丁:
cd ${WLSHOME_PACH}/server/bin && source setWLSEnv.sh
cd ${BSU_PACH}/cache_dir && PK=$(ls -lt *.jar | head -n 1 | awk ‘{print $NF}’ | awk -F “.” ‘{print $1}’)
cd ${BSU_PACH} && ./bsu.sh -install -patch_download_dir=${BSU_PACH}/cache_dir -patchlist=${PK} -prod_dir=${WLSHOME_PACH}

#启动weblogic服务
#nohup /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bin/startWebLogic.sh &

#!/bin/bash
export ORACLE_HOME=/home/weblogic/Oracle/Middleware/Oracle_Home
OP_PACH=${ORACLE_HOME}/OPatch
PKG_PATCH=ftp://10.1.1.1/patch/weblogic/12.1.3
PKG_NAME=p33172866_121300_Generic.zip
linshi=/home/weblogic/patch

# 创建新文件夹
if [[ -d ${linshi} ]];then
rm -rf ${linshi}
else
mkdir -p ${linshi}
fi

# 获取补丁包
cd ${linshi} && curl -o ./${PKG_NAME} ${PKG_PATCH}/${PKG_NAME}

# 解压
which unzip &> /dev/null
if [[ $? -eq 0 ]];then
unzip ${linshi}/*.zip -d ${linshi};
else
echo “unzip is not exsits, yum install it first, plz”
fi

# 停止weblogic服务
ps -ef | grep java| grep weblogic | grep -v “grep” &> /dev/null
if [[ $? -eq 0 ]];then
ps -ef |grep java| grep weblogic | grep -v “grep”|awk ‘{print $2}’|xargs kill -9
else
echo “weblogic process is not exsits”
fi

# 打补丁
PKG_NAME=$(cd ${linshi} && ls | grep -Ev ‘*.zip’)
cd ${linshi}/${PKG_NAME} && ${OP_PACH}/opatch apply -silent

# 启动weblogic
#nohup ${ORACLE_HOME}/user_projects/domains/base_domain/startWebLogic.sh &

#!/bin/bash
# 安装EPEL
yum -y localinstall ftp://10.1.1.1/epel-release-latest-7.noarch.rpm

# 更新REPO文件为内网源
curl -o /etc/yum.repos.d/CentOS-Base.repo ftp://10.1.1.1/centos7.repo
curl -o /etc/yum.repos.d/epel.repo ftp://10.1.1.1/epel7.repo

# 卸载rh自带包
yum -y remove rhnlib redhat-support* subscription-manager
rpm -e –nodeps redhat-release-server redhat-logos
rm -rf /usr/share/redhat-release* /usr/share/doc/redhat-release*

# 安装centos重要文件
yum -y install centos-release yum centos-logos
yum clean all
yum -y update

# 禁用墙
systemctl disable firewalld

centos安装docker

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

============
1、删除旧版
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、用稳定版的更新源
yum install -y yum-utils
yum-config-manager \
–add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

3、安裝Docker引擎
yum install docker-ce docker-ce-cli containerd.io

4、启动Docker
systemctl enable docker
systemctl start docker

5、测试
docker run hello-world

6、升级docker引擎
yum -y upgrade

7、删除docker引擎
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

BTW:安装特殊版本的docker引擎
# 从高到低列出版本
yum list docker-ce –showduplicates | sort -r
# yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io
yum install docker-ce- docker-ce-cli- containerd.io
———-
2、拉取CentOS镜像
docker run -d -p 2222:22 –name CentOS-Docker ilemonrain/centos-sshd

参数说明
-d:以Daemon(后台)模式启动镜像
-p 2222:22:暴露宿主机的2222端口,映射到容器内部的22端口 (SSH)
–name CentOS-Docker:容器名称
ilemonrain/centos-sshd:镜像名称

===========
安裝docker-compose
# 安装
curl -L “https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose
# 付权
chmod +x /usr/local/bin/docker-compose
# 建立快捷方式,以便环境变量加载
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# 测试安装成功
docker-compose –version

PS:https://docs.docker.com/engine/install/centos/

扩充LVM逻辑磁盘

磁盘区群组: DiskGroup
逻辑磁盘区: DiskHome
要新增的实体存储设备: 属於LVM类型的 /dev/sda5

1、创建PV物理卷
pvcreate /dev/sda5

2、扩充VG卷组
lvm vgextend “DiskGroup” /dev/sda5

3、查看VG卷组信息
vgdisplay

4、查看LVM逻辑卷信息
lvdisplay /dev/DiskGroup/DiskHome

5、扩充磁盘。如果是增加空间,可以用:lvextend -l +100%FREE
lvresize -L +4G /dev/DiskGroup/DiskHome

6、更改文件系统尺寸
EXT4格式:
resize2fs /dev/DiskGroup/DiskHome
XFS格式:
xfs_growfs /dev/DiskGroup/DiskHom

yum install samba
systemctl enable samba

创建samba用户之前,必须先确保有一个同名的Linux用户,否则samba用户会创建失败
smbpasswd -a username
# smbpasswd -a 增加用户(要增加的用户必须以是系统用户)
# smbpasswd -d 冻结用户,就是这个用户不能在登录了
# smbpasswd -e 恢复用户,解冻用户,让冻结的用户可以在使用
# smbpasswd -n 把用户的密码设置成空.要在global中写入 null passwords -true
# smbpasswd -x 删除用户

# 行尾添加共享路径
vi /etc/samba/smb.conf
[share] #共享名,最后连接地址为 \\IP\share
comment = smb share test # 该共享的备注
path = /home/share # 共享路径
allow hosts = host(subnet) # 设置该Samba服务器允许的工作组或者域
deny hosts = host(subnet) # 设置该Samba服务器拒绝的工作组或者域
available = yes|no # 设置该共享目录是否可用
browseable = yes|no # 设置该共享目录是否可显示
writable = yes|no # 指定了这个目录缺省是否可写
public = yes|no # 指明该共享资源是否能给游客帐号访问
user = user, @group # user设置所有可能使用该共享资源的用户,也可以用@group代表group这个组的所有成员,不同的项目之间用空格或者逗号隔开
valid users = user, @group # 指定能够使用该共享资源的用户和组
invalid users = user, @group # 指定不能够使用该共享资源的用户和组
read list = user, @group # 指定只能读取该共享资源的用户和组
write list = user, @group # 指定能读取和写该共享资源的用户和组
admin list = user, @group # 指定能管理该共享资源(包括读写和权限赋予等)的用户和组
sync always = yes|no # 指明对该共享资源进行写操作后是否进行同步操作
short preserve case = yes|no # 指明是否区分文件名大小写
preserve case = yes|no # 指明是否保持大小写
case sensitive = yes|no # 指明是否对大小写敏感,一般选no,不然可能引起错误
mangle case = yes|no # 指明混合大小写
default case = upper|lower # 指明缺省的文件名是全部大写还是小写
force user = testuser # 强制把建立文件的属主是谁。如果我有一个目录,让guest可以写,那么guest就可以删除,如果我用force user= testuser强制建立文件的属主是testuser,同时限制create mask = 0755,这样guest就不能删除了
wide links = yes|no # 指明是否允许共享外符号连接,比如共享资源里面有个连接指向非共享资源里面的文件或者目录,如果设置wide links = no将使该连接不可用
max connections = 100 # 设定最大同时连接数
delete readonly = yes|no # 指明能否删除共享资源里面已经被定义为只读的文件

查看已启用的samba账户
pdbedit -L -v

============
ex:
# 表示容许来自172.17.2.*.*的主机连接,但排除172.17.2.50
hosts allow=172.17.2.EXCEPT172.17.2.50
# 表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
hosts allow=172.17.2.0/255.255.0.0
# 表示容许来自M1和M2两台计算机连接
hosts allow=M1,M2
# 表示容许来自SC域的所有计算机连接
hosts allow=@SC

————-
samba安全认证:
share:可以匿名访问
user:通过本地的账户和密码验证来提供服务
server:集中身份验证,kebers
AD:通过AD对账户密码进行验证。

1、建立SFTP专用组及用户。
groupadd sftpgp
useradd -g sftpgp -s /sbin/nologin user1
passwd user1

2、配置SSHD服务
vi /etc/ssh/sshd_config
# 注释掉此行,并添加
#Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp internal-sftp
# 文件末尾添加
# 匹配用户组,如果要匹配多个组,多个组之间用逗号分割
Match Group sftpgp
X11Forwarding no
AllowTcpForwarding no
# 指定登陆用户到自己的用户目录
ChrootDirectory %h
# 指定 sftp 命令
ForceCommand internal-sftp

3、重启服务
systemctl restart sshd.service

4、建立SFTP用户专用目录。目录的所有人是root, 权限是 750 或者 755。注意:目录开始一直往上到系统根目录为止的目录拥有者都只能是 root,用户组可以不是 root。目录开始一直往上到系统根目录为止都不可以具有群组写入权限
chown -R root:root /home/user1
chmod -R 755 /home/user1
mkdir /home/user1/files
chown user1:sftpgp /home/user1/files

5、建立另外一个SFTP用户
useradd -g sftpgp -s /sbin/nologin user2
passwd user2
chown -R root:root /home/user2
chmod -R 755 /home/user2
mkdir /home/user2/files
chown user2:sftpgp /home/user2/files

BTW:
1、给用户增加入新的用户组中
usermod -a -G 用户组 用户

2、给用户更换组
usermod -g 新用户组 用户

3、剔除某用户组里的某个用户
gpasswd -d 用户 用户组

用galera搭建mysql多主同步集群

0、首先说明需要奇数个节点,以免脑裂。

1、安装stalling MariaDB
vi /etc/hosts
1.1.1.1 db1.test.com
2.2.2.2 db2.test.com
3.3.3.3 db3.test.com

yum -y install mariadb-server rsync galera

# 互交安装mysql
mysql_secure_installation

2、配置集群文件figuring for Galera
vi /etc/mysql/conf.d/galera.cnf
# common to all
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name=”galera_cluster”
wsrep_cluster_address=”gcomm://1.1.1.1,2.2.2.2,3.3.3.3″
wsrep_sst_method=rsync

# unique to this node
wsrep_node_address=”1.1.1.1″
wsrep_node_name=”db1″

DB2的时候修改这两行
# unique to this node
wsrep_node_address=”2.2.2.2″
wsrep_node_name=”db2″

DB3的时候修改这两行
# unique to this node
wsrep_node_address=”3.3.3.3″
wsrep_node_name=”db3″

3、启动集群服务Starting Up the Galera Cluster
在DB1运行集群命令:
galera_new_cluster

查看MYSQL集群初始化
ps -ef | grep -i mysql

在DB2和DB3运行
systemctl start mariadb.service

查看节点数
# mysql
MariaDB [(none)]> show status like ‘wsrep_cluster_size’;
+——————–+——-+
| Variable_name | Value |
+——————–+——-+
| wsrep_cluster_size | 3 |
+——————–+——-+
1 row in set (0.001 sec)

4、测试Testing Galera
建立DB并填充数据
create database gtest;
use gtest;
create table buffy ( name varchar(30), team_role varchar(100) );
insert into buffy (name, team_role) values ( ‘Buffy’, ‘slayer’);
insert into buffy (name, team_role) values ( ‘Giles’, ‘research’);
insert into buffy (name, team_role) values ( ‘Zander’, ‘comic relief’);
insert into buffy (name, team_role) values ( ‘Cordelia’, ‘eye candy’);

切换到DB3
root@db3:/etc/mysql# mysql gtest
MariaDB [gtest]> select * from buffy;
+———-+————–+
| name | team_role |
+———-+————–+
| Buffy | slayer |
| Giles | research |
| Zander | comic relief |
| Cordelia | eye candy |
+———-+————–+
4 rows in set (0.001 sec)

关闭DB2的DB服务
systemctl stop mariadb
切换去DB1执行
use gtest;
insert into buffy (name, team_role) values ( ‘Faith’, ‘slayer’);
insert into buffy (name, team_role) values ( ‘Wesley’, ‘whiner’);
insert into buffy (name, team_role) values ( ‘Oz’, ‘werewolf’);
启动DB2的DB服务
systemctl start mariadb
tail -f /var/log/mysql/error.log
2020-07-21 21:03:02 0 [Note] WSREP: Shifting JOINER -> JOINED (TO: 15)
2020-07-21 21:03:02 0 [Note] WSREP: Member 0.0 (db2) synced with group.
2020-07-21 21:03:02 0 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 15)
2020-07-21 21:03:02 1 [Note] WSREP: Synchronized with group, ready for connections
在DB2执行语句查询内容
MariaDB [(none)]> show status like ‘wsrep_last_committed’;
+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| wsrep_last_committed | 15 |
+———————-+——-+
1 row in set (0.001 sec)

切换去DB3,执行语句
use gtest;
insert into buffy (name, team_role) values ( ‘Willow’, ‘research’);
insert into buffy (name, team_role) values ( ‘Anya’, ‘bad news’);

切换去DB1查询
MariaDB [(none)]> use gtest
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
MariaDB [gtest]> select * from buffy;
+———-+————–+
| name | team_role |
+———-+————–+
| Buffy | slayer |
| Giles | research |
| Zander | comic relief |
| Cordelia | eye candy |
| Faith | slayer |
| Wesley | whiner |
| Oz | werewolf |
| Willow | research |
| Anya | bad news |
+———-+————–+
9 rows in set (0.000 sec)

PS:https://jeremyxu2010.github.io/2018/02/mariadb-galera-cluster%E9%83%A8%E7%BD%B2%E5%AE%9E%E6%88%98/
1、如果集群从来没有启动过(3个节点上都没有/var/lib/mysql/grastate.dat文件),则必要由其中一个节点以–wsrep-new-cluster参数启动,另外两个节点正常启动即可

2、如果集群以前启动过,则参考/var/lib/mysql/grastate.dat,找到safe_to_bootstrap为1的节点,在该节点上以–wsrep-new-cluster参数启动,另外两个节点正常启动即可

3、如果集群以前启动过,但参考/var/lib/mysql/grastate.dat,找不到safe_to_bootstrap为1的节点(一般是因为mariadb服务非正常停止造成),则在3个节点中随便找1个节点,将/var/lib/mysql/grastate.dat中的safe_to_bootstrap修改为1,再在该节点上以–wsrep-new-cluster参数启动,另外两个节点正常启动即可

=====自启动脚本
cat /usr/local/bin/mariadb_cluster_helper.sh
#!/bin/bash
GRASTATE_FILE=/var/lib/mysql/grastate.dat
WSREP_NEW_CLUSTER_LOG_FILE=/tmp/wsrep_new_cluster.log
# 如果启动mariadb超过10秒还没返回0,则认为失败了
START_MARIADB_TIMEOUT=10
# 以–wsrep-new-cluster参数启动,超过5次检查,发现仍没有其它节点加入集群,则认为此路不通
SPECIAL_START_WAIT_MAX_COUNT=5
# 得到本机IP
MY_IP=$(grep ‘wsrep_node_address’ /etc/my.cnf.d/server.cnf | awk -F ‘=’ ‘{print $2}’)
# 杀掉mysqld进程
function kill_mysqld_process() {
(ps -ef|grep mysqld|grep -v grep|awk ‘{print $2}’|xargs kill -9) &>/dev/null
}
# 正常启动mariadb
function start_mariadb_normal(){
# 首先确保safe_to_bootstrap标记为0
sed -i ‘s/^safe_to_bootstrap.*$/safe_to_bootstrap: 0/’ $GRASTATE_FILE
timeout $START_MARIADB_TIMEOUT systemctl start mariadb &> /dev/null
return $?
}
# 以–wsrep-new-cluster参数启动mariadb
function start_mariadb_special(){
# 首先确保safe_to_bootstrap标记为1
sed -i ‘s/^safe_to_bootstrap.*$/safe_to_bootstrap: 1/’ $GRASTATE_FILE
# 以–wsrep-new-cluster参数启动mariadb
/usr/sbin/mysqld –user=mysql –wsrep-new-cluster &> $WSREP_NEW_CLUSTER_LOG_FILE &
disown $!
try_count=0
# 循环检查
while [ 1 ]; do
# 如果超过SPECIAL_START_WAIT_MAX_COUNT次检查,仍没有其它节点加入集群,则认为此路不通,尝试正常启动,跳出循环
if [ $try_count -gt $SPECIAL_START_WAIT_MAX_COUNT ] ; then
kill_mysqld_process
start_mariadb_normal
return $?
fi
new_joined_count=$(grep ‘synced with group’ /tmp/wsrep_new_cluster.log | grep -v $MY_IP|wc -l)
exception_count=$(grep ‘exception from gcomm, backend must be restarted’ $WSREP_NEW_CLUSTER_LOG_FILE | wc -l)
# 如果新加入的节点数大于0,则认为集群就绪了,可正常启动了,跳出循环
# 如果运行日志中发现了异常(两个节点都以–wsrep-new-cluster参数启动,其中一个会报错),则认为此路不通,尝试正常启动,跳出循环
if [ $new_joined_count -gt 0 ] || [ $exception_count -gt 0 ] ; then
kill_mysqld_process
start_mariadb_normal
return $?
else
try_count=$(( $try_count + 1 ))
fi
sleep 5
done
}
# 首先杀掉mysqld进程
kill_mysqld_process
ret=-1
# 如果safe_to_bootstrap标记为1,则立即以–wsrep-new-cluster参数启动
if [ -f $GRASTATE_FILE ]; then
safe_bootstrap_flag=$(grep ‘safe_to_bootstrap’ $GRASTATE_FILE | awk -F ‘: ‘ ‘{print $2}’)
if [ $safe_bootstrap_flag -eq 1 ] ; then
start_mariadb_special
ret=$?
else
start_mariadb_normal
ret=$?
fi
else
start_mariadb_normal
ret=$?
fi
# 随机地按某种方式启动,直到以某种方式正常启动以止;否则杀掉mysqld进程,随机休息一会儿,重试
while [ $ret -ne 0 ]; do
kill_mysqld_process
sleep_time=$(( $RANDOM % 10 ))
sleep $sleep_time
choice=$(( $RANDOM % 2 ))
ret=-1
if [ $choice -eq 0 ] ; then
start_mariadb_special
ret=$?
else
start_mariadb_normal
ret=$?
fi
done
# 使上述脚本开机自启动
chmod +x /usr/local/bin/mariadb_cluster_helper.sh
chmod +x /etc/rc.d/rc.local
echo ‘
/usr/local/bin/mariadb_cluster_helper.sh &> /var/log/mariadb_cluster_helper.log &’ >> /etc/rc.d/rc.local

vsftpd使用SSL/TLS加密访问

# 生成1024位RSA有效期10年的私钥
sudo openssl req -x509 -nodes -days 3650 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem

# 设置权限
chmod 600 /etc/vsftpd/vsftpd.pem
chown root:root /etc/vsftpd/vsftpd.pem

# 编辑VSFTP文件
vi /etc/vsftpd/vsftpd.conf

# 开启SSL连接。Set up SSL for FTP connections
ssl_enable=YES

# 允许匿名用户使用SSL连接。To allow anonymous users to use SSL
allow_anon_ssl=YES

# 强制匿名用户使用SSL连接。To force anonymous users to use SSL
force_anon_data_ssl=YES
force_anon_logins_ssl=YES

# 强制普通用户使用SSL连接。To force local users to use SSL
force_local_data_ssl=YES
force_local_logins_ssl=YES

# 支持SSL加密的版本。The following option depend of the authentication mode you require
ssl_tlsv1=YES for TLS
ssl_sslv2=YES for SSL Version 2
ssl_sslv3=YES for SSL Version 3

# 设置SSL证书位置。This values must be adjust according with you environment
rsa_cert_file=/etc/vsftpd/vsftpd.pem
rsa_private_key_file=/etc/vsftpd/vsftpd.pem

# 锁定用户在自身根目录。Place root restrictions
chroot_local_user=YES

# 设置被动FTP使用的端口范围。Specify the range of ports
pasv_min_port=30000
pasv_max_port=31000

测试:
lftp -d -u anonymous -e ‘set ftp:ssl-force true’ 192.168.1.192

PS:https://access.redhat.com/solutions/3436