一、架构说明
1)参考官方文档:https://docs.jumpserver.org/zh/master/install/setup_by_lb/#jumpserver-01
2)架构如下:
3)主机规划
| 主机 | 系统版本 | IP | 安装软件 |
|---|---|---|---|
| jms_node01 | centos7.9 | 192.168.45.52 | mysql5.7,keepalived,sersync,redis5,nfs,jms组件 |
| jms_node02 | centos7.9 | 192.168.45.53 | mysql5.7,keepalived,sersync,redis5,rsyncd,nfs,jms组件 |
二、Mysql 双主配置
2.1) 45.52数据库安装
mkdir -p /applicationtar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /applicationcd /applicationmv mysql-5.7.37-linux-glibc2.12-x86_64 mysql#卸载mariadbrpm -qa | grep mariadbmariadb-libs-5.5.68-1.el7.x86_64rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64#添加mysql用户groupadd mysqluseradd mysql -M -g mysql -s /sbin/nologin#配置环境变量echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profilesource /etc/profile#创建mysql数据、日志的存放目录mkdir -p /data/mysql/datamkdir -p /var/log/mysqlchown -R mysql.mysql /application/mysqlchown -R mysql.mysql /data/mysql/datachown -R mysql.mysql /var/log/mysql#安装依赖包yum install libaio-devel -y#无密码初始化cd /application/mysqlmysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data#修改mysql配置文件cat >/etc/my.cnf <<EOF[mysqld]user = mysqlport = 3306datadir = /data/mysql/databasedir = /application/mysqlsocket = /tmp/mysql.sockbind-address = 0.0.0.0character-set-server = utf8mb4collation-server = utf8mb4_general_cilog-error = /var/log/mysql/mysqld.loginnodb_file_per_table=1skip_name_resolve=1slow_query_log=1slow_query_log_file=mysql-slow.logsymbolic-links=0explicit_defaults_for_timestamp=1log_bin=mysql-binlog_bin_index=mysql-bin.indexrelay_log=relay-logrelay_log_index=relay-log.indexsync_binlog=1innodb_flush_log_at_trx_commit=1binlog_format=rowgtid_mode=onenforce_gtid_consistency=onserver_id=2EOF#配置mysql启动服务cat >/etc/systemd/system/mysqld.service <<EOF[Unit]Description=MySQL ServerDocumentation=man:mysqld(8)Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=multi-user.target[Service]User=mysqlGroup=mysqlExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnfLimitNOFILE = 5000EOF#修改MySQL的root密码alter user root@'localhost' identified by 'Admin@1234';systemctl start mysqld.servicesystemctl enable mysqld.servicesystemctl status mysqld.service
2.2) 45.53数据库安装
# 安装过程略,配置文件如下:cat >/etc/my.cnf <<EOF[mysqld]user = mysqlport = 3306datadir = /data/mysql/databasedir = /application/mysqlsocket = /tmp/mysql.sockbind-address = 0.0.0.0character-set-server = utf8mb4collation-server = utf8mb4_general_cilog-error = /var/log/mysql/mysqld.loginnodb_file_per_table=1skip_name_resolve=1slow_query_log=1slow_query_log_file=mysql-slow.logsymbolic-links=0explicit_defaults_for_timestamp=1log_bin=mysql-binlog_bin_index=mysql-bin.indexrelay_log=relay-logrelay_log_index=relay-log.indexsync_binlog=1innodb_flush_log_at_trx_commit=1binlog_format=rowgtid_mode=onenforce_gtid_consistency=onserver_id=2EOF
2.3) 主主配置
master节点创建同步用户:# mysql -uroot -pgrant replication slave on *.* to 'repluser1'@'192.168.45.%' identified by 'Admin@1234';flush privileges;show global variables like 'server_uuid';slave节点使用具有复制权限的用户repluser1连接至master节点,并启动复制线程:change master to master_host='192.168.45.52',master_user='repluser1',master_password='Admin@1234',master_port=3306,master_auto_position=1;start slave;slave节点创建同步用户grant replication slave on *.* to 'repluser2'@'192.168.45.%' identified by 'Admin@1234';flush privileges;show global variables like 'server_uuid';master节点节点使用具有复制权限的用户repluser2连接至slave节点,并启动复制线程:change master to master_host='192.168.45.53',master_user='repluser1',master_password='Admin@1234',master_port=3306,master_auto_position=1;start slave;
2.4) 主主环境验证
主建库create database db;use db;create table tb(id int unsigned auto_increment primary key not null,age int not null);desc tb;insert into tb(age) values(35),(40);select * from tb;备验证:show databases like 'db';select * from db.tb;--------------------------------备增加数据:insert into db.tb(age) values(60),(80);select * from db.tb;主测试select * from db.tb;
三、keepalived安装配置
3.1) 安装与配置
# 45.52和45.53安装keepalivedyum -y install keepalived# 45.52和45.53配置监控脚本cat > /etc/keepalived/chk_mysqld.sh <<EOF#!/bin/bashn=$(ps -C mysqld --no-headers | wc -l)if [ $n -eq 0 ]; thensystemctl stop keepalived.servicefiEOFchmod +x /etc/keepalived/chk_mysqld.sh# 生成VRRP验证密码[root@samba01 keepalived]# openssl rand -base64 7UyaWnJ/6LQ==# 45.52修改配置文件cd /etc/keepalived <<EOFmv keepalived.conf{,.bak}cat > keepalived.confglobal_defs {notification_email {root@localhost}notification_email_from node1@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id node1vrrp_mcast_group4 224.1.100.88}vrrp_script chk_mysqld {script "/etc/keepalived/chk_mysqld.sh"interval 10}vrrp_instance VI_1 {state BACKUPnopreemptinterface ens32virtual_router_id 50priority 100advert_int 5authentication {auth_type PASSauth_pass UyaWnJ/6LQ==}virtual_ipaddress {192.168.45.55}track_script {chk_mysqld}}EOFsystemctl start keepalived.servicesystemctl enable keepalived.servicesystemctl status keepalived.service# 45.53修改配置文件cd /etc/keepalivedmv keepalived.conf{,.bak}cat > /etc/keepalived <<EOFglobal_defs {notification_email {root@localhost}notification_email_from node2@localhostsmtp_server 127.0.0.1smtp_connect_timeout 30router_id node2vrrp_mcast_group4 224.1.100.88}vrrp_script chk_mysqld {script "/etc/keepalived/chk_mysqld.sh"interval 10}vrrp_instance VI_1 {state BACKUPnopreemptinterface ens32virtual_router_id 50priority 98advert_int 5authentication {auth_type PASSauth_pass UyaWnJ/6LQ==}virtual_ipaddress {192.168.45.55}track_script {chk_mysqld}}EOFsystemctl start keepalived.servicesystemctl enable keepalived.servicesystemctl status keepalived.service
3.2) 验证
tail -f /var/log/messagesip a# 切换验证:45.52:systemctl stop mysqld.service# 45.53上会出现192.168.45.55的IP
四、安装nfs
4.1) 安装及配置
# 45.52和45.53上安装yum -y install nfs-utils rpcbindsystemctl enable rpcbind nfs-server nfs-lock nfs-idmapsystemctl start rpcbind nfs-server nfs-lock nfs-idmap# 45.52上配置mkdir -p /opt/jumpserver/core/datachmod 777 -R /opt/jumpserver/core/datavi /etc/exports/opt/jumpserver/core/data 192.168.45.*(rw,sync,all_squash,anonuid=0,anongid=0)exportfs -a# 45.53上挂载mkdir -p /opt/jumpserver/core/datamount -t nfs 192.168.45.52:/opt/jumpserver/core/data /opt/jumpserver/core/dataecho "192.168.45.52:/opt/jumpserver/core/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
五、安装rsync和sersync
# 45.53上新建备份目录mkdir -p /opt/jumpserver/core/data1chmod 777 -R /opt/jumpserver/core/data1# 45.53上配置rsync服务cat > /etc/rsyncd.conf <<EOFuid = nobodygid = nobodyport = 873fake super = yesuse chroot = nomax connections = 200timeout = 600ignore errorsread only = falselist = falseauth users = rsync_backupsecrets file = /etc/rsync.passwdlog file = /var/log/rsyncd.log#################################[backup]path = /backup[data]path = /opt/jumpserver/core/data1EOFecho "rsync_backup:Admin@1234" > /etc/rsync.passwdchmod 600 /etc/rsync.passwdsystemctl restart rsyncdsystemctl enable rsyncd45.52 上安装sersyncwget https://dsf.jb51.net/201111/tools/sersync_64bit_binary_stable_final.tar.gztar xf sersync_64bit_binary_stable_final.tar.gzmv GNU-Linux-x86 /usr/local/sersyncvi confxml.xml<?xml version="1.0" encoding="ISO-8859-1"?><head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><fileSystem xfs="true"/><filter start="false"><exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify><delete start="true"/><createFolder start="true"/><createFile start="true"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="true"/><modify start="true"/></inotify><sersync><localpath watch="/opt/jumpserver/core/data"><remote ip="192.168.45.53" name="data"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-az"/><auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="true" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync><plugin name="command"><param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix--><filter start="false"><include expression="(.*)\.php"/><include expression="(.*)\.sh"/></filter></plugin><plugin name="socket"><localpath watch="/opt/tongbu"><deshost ip="192.168.138.20" port="8009"/></localpath></plugin><plugin name="refreshCDN"><localpath watch="/data0/htdocs/cms.xoyo.com/site/"><cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/><sendurl base="http://pic.xoyo.com/cms"/><regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/></localpath></plugin></head>echo "Admin@1234" > /etc/rsync.passchmod 600 /etc/rsync.pass/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xmlchmod +x /etc/rc.localecho "/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml" >>/etc/rc.local
六、部署redis
# 45.52和45.53部署redisyum -y install epel-release https://repo.ius.io/ius-release-el7.rpmyum install -y redis5sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.confsed -i "561i maxmemory-policy allkeys-lru" /etc/redis.confsed -i "481i requirepass KXOeyNgDeTdpeu9q" /etc/redis.confsystemctl enable redissystemctl start redis
七、创建jumpserver数据库
# 在45.52或45.53上创建create database jumpserver default charset 'utf8';set global validate_password_policy=LOW;create user 'jumpserver'@'%' identified by 'KXOeyNgDeTdpeu';grant all on jumpserver.* to 'jumpserver'@'%';flush privileges;exit
八、部署jms组件
# 45.52和45.53上下载jumpservercd /optyum -y install wgetwget https://github.com/jumpserver/installer/releases/download/v2.23.0/jumpserver-installer-v2.23.0.tar.gztar -xf jumpserver-installer-v2.23.0.tar.gzcd jumpserver-installer-v2.23.0cat config-example.txt# 以下设置如果为空系统会自动生成随机字符串填入## 迁移请修改 SECRET_KEY 和 BOOTSTRAP_TOKEN 为原来的设置## 完整参数文档 https://docs.jumpserver.org/zh/master/admin-guide/env/## 安装配置, 可以使用华为云加速下载, arm64 用户需要注释掉 DOCKER_IMAGE_PREFIX# DOCKER_IMAGE_PREFIX=swr.cn-south-1.myhuaweicloud.comVOLUME_DIR=/opt/jumpserverDOCKER_DIR=/var/lib/dockerSECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kWBOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9qLOG_LEVEL=ERROR## MySQL 配置, USE_EXTERNAL_MYSQL=1 表示使用外置 MySQL, 请输入正确的 MySQL 信息USE_EXTERNAL_MYSQL=1DB_HOST=192.168.45.55DB_PORT=3306DB_USER=jumpserverDB_PASSWORD=KXOeyNgDeTdpeuDB_NAME=jumpserver## Redis 配置, USE_EXTERNAL_REDIS=1 表示使用外置 Redis, 请输入正确的 Redis 信息USE_EXTERNAL_REDIS=1REDIS_HOST=192.168.45.52REDIS_PORT=6379REDIS_PASSWORD=KXOeyNgDeTdpeu9q## Compose 项目设置, 如果 192.168.250.0/24 网段与你现有网段冲突, 请修改然后重启 JumpServerCOMPOSE_PROJECT_NAME=jmsCOMPOSE_HTTP_TIMEOUT=3600DOCKER_CLIENT_TIMEOUT=3600DOCKER_SUBNET=192.168.250.0/24## IPV6 设置, 容器是否开启 ipv6 nat, USE_IPV6=1 表示开启, 为 0 的情况下 DOCKER_SUBNET_IPV6 定义不生效USE_IPV6=0DOCKER_SUBNET_IPV6=fc00:1010:1111:200::/64## 访问配置HTTP_PORT=80SSH_PORT=2222MAGNUS_MYSQL_PORT=33060MAGNUS_MARIADB_PORT=33061MAGNUS_REDIS_PORT=63790## HTTPS 配置, 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置# USE_LB=1# HTTPS_PORT=443# SERVER_NAME=your_domain_name# SSL_CERTIFICATE=your_cert# SSL_CERTIFICATE_KEY=your_cert_key## Nginx 文件上传大小CLIENT_MAX_BODY_SIZE=4096m## Task 配置, 是否启动 jms_celery 容器, 单节点必须开启USE_TASK=1## XPack, USE_XPACK=1 表示开启, 开源版本设置无效USE_XPACK=0RDP_PORT=3389MAGNUS_POSTGRE_PORT=54320## Core 配置, Session 定义, SESSION_COOKIE_AGE 表示闲置多少秒后 session 过期, SESSION_EXPIRE_AT_BROWSER_CLOSE=true 表示关闭浏览器即 session 过期# SESSION_COOKIE_AGE=86400SESSION_EXPIRE_AT_BROWSER_CLOSE=true## 组件配置CORE_HOST=http://core:8080JUMPSERVER_ENABLE_FONT_SMOOTHING=trueTCP_SEND_BUFFER_BYTES=4194304TCP_RECV_BUFFER_BYTES=6291456## 终端使用宿主 HOSTNAME 标识SERVER_HOSTNAME=${HOSTNAME}## 额外的配置CURRENT_VERSION=# 启动./jmsctl.sh install
九、切换
# 当45.52无法启动后,需要在45.53手动切换目录rm -fr /opt/jumpserver/core/datamv /opt/jumpserver/core/data1 /opt/jumpserver/core/data
