一、架构说明

1)参考官方文档:https://docs.jumpserver.org/zh/master/install/setup_by_lb/#jumpserver-01
2)架构如下:
1655545596377.png

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数据库安装

  1. mkdir -p /application
  2. tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /application
  3. cd /application
  4. mv mysql-5.7.37-linux-glibc2.12-x86_64 mysql
  5. #卸载mariadb
  6. rpm -qa | grep mariadb
  7. mariadb-libs-5.5.68-1.el7.x86_64
  8. rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
  9. #添加mysql用户
  10. groupadd mysql
  11. useradd mysql -M -g mysql -s /sbin/nologin
  12. #配置环境变量
  13. echo "export PATH=/application/mysql/bin:$PATH" >>/etc/profile
  14. source /etc/profile
  15. #创建mysql数据、日志的存放目录
  16. mkdir -p /data/mysql/data
  17. mkdir -p /var/log/mysql
  18. chown -R mysql.mysql /application/mysql
  19. chown -R mysql.mysql /data/mysql/data
  20. chown -R mysql.mysql /var/log/mysql
  21. #安装依赖包
  22. yum install libaio-devel -y
  23. #无密码初始化
  24. cd /application/mysql
  25. mysqld --initialize-insecure --user=mysql --basedir=/application/mysql --datadir=/data/mysql/data
  26. #修改mysql配置文件
  27. cat >/etc/my.cnf <<EOF
  28. [mysqld]
  29. user = mysql
  30. port = 3306
  31. datadir = /data/mysql/data
  32. basedir = /application/mysql
  33. socket = /tmp/mysql.sock
  34. bind-address = 0.0.0.0
  35. character-set-server = utf8mb4
  36. collation-server = utf8mb4_general_ci
  37. log-error = /var/log/mysql/mysqld.log
  38. innodb_file_per_table=1
  39. skip_name_resolve=1
  40. slow_query_log=1
  41. slow_query_log_file=mysql-slow.log
  42. symbolic-links=0
  43. explicit_defaults_for_timestamp=1
  44. log_bin=mysql-bin
  45. log_bin_index=mysql-bin.index
  46. relay_log=relay-log
  47. relay_log_index=relay-log.index
  48. sync_binlog=1
  49. innodb_flush_log_at_trx_commit=1
  50. binlog_format=row
  51. gtid_mode=on
  52. enforce_gtid_consistency=on
  53. server_id=2
  54. EOF
  55. #配置mysql启动服务
  56. cat >/etc/systemd/system/mysqld.service <<EOF
  57. [Unit]
  58. Description=MySQL Server
  59. Documentation=man:mysqld(8)
  60. Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
  61. After=network.target
  62. After=syslog.target
  63. [Install]
  64. WantedBy=multi-user.target
  65. [Service]
  66. User=mysql
  67. Group=mysql
  68. ExecStart=/application/mysql/bin/mysqld --defaults-file=/etc/my.cnf
  69. LimitNOFILE = 5000
  70. EOF
  71. #修改MySQL的root密码
  72. alter user root@'localhost' identified by 'Admin@1234';
  73. systemctl start mysqld.service
  74. systemctl enable mysqld.service
  75. systemctl status mysqld.service

2.2) 45.53数据库安装

  1. # 安装过程略,配置文件如下:
  2. cat >/etc/my.cnf <<EOF
  3. [mysqld]
  4. user = mysql
  5. port = 3306
  6. datadir = /data/mysql/data
  7. basedir = /application/mysql
  8. socket = /tmp/mysql.sock
  9. bind-address = 0.0.0.0
  10. character-set-server = utf8mb4
  11. collation-server = utf8mb4_general_ci
  12. log-error = /var/log/mysql/mysqld.log
  13. innodb_file_per_table=1
  14. skip_name_resolve=1
  15. slow_query_log=1
  16. slow_query_log_file=mysql-slow.log
  17. symbolic-links=0
  18. explicit_defaults_for_timestamp=1
  19. log_bin=mysql-bin
  20. log_bin_index=mysql-bin.index
  21. relay_log=relay-log
  22. relay_log_index=relay-log.index
  23. sync_binlog=1
  24. innodb_flush_log_at_trx_commit=1
  25. binlog_format=row
  26. gtid_mode=on
  27. enforce_gtid_consistency=on
  28. server_id=2
  29. EOF

2.3) 主主配置

  1. master节点创建同步用户:
  2. # mysql -uroot -p
  3. grant replication slave on *.* to 'repluser1'@'192.168.45.%' identified by 'Admin@1234';
  4. flush privileges;
  5. show global variables like 'server_uuid';
  6. slave节点使用具有复制权限的用户repluser1连接至master节点,并启动复制线程:
  7. change master to master_host='192.168.45.52',master_user='repluser1',master_password='Admin@1234',master_port=3306,master_auto_position=1;
  8. start slave;
  9. slave节点创建同步用户
  10. grant replication slave on *.* to 'repluser2'@'192.168.45.%' identified by 'Admin@1234';
  11. flush privileges;
  12. show global variables like 'server_uuid';
  13. master节点节点使用具有复制权限的用户repluser2连接至slave节点,并启动复制线程:
  14. change master to master_host='192.168.45.53',master_user='repluser1',master_password='Admin@1234',master_port=3306,master_auto_position=1;
  15. start slave;

2.4) 主主环境验证

  1. 主建库
  2. create database db;
  3. use db;
  4. create table tb(id int unsigned auto_increment primary key not null,age int not null);
  5. desc tb;
  6. insert into tb(age) values(35),(40);
  7. select * from tb;
  8. 备验证:
  9. show databases like 'db';
  10. select * from db.tb;
  11. --------------------------------
  12. 备增加数据:
  13. insert into db.tb(age) values(60),(80);
  14. select * from db.tb;
  15. 主测试
  16. select * from db.tb;

三、keepalived安装配置

3.1) 安装与配置

  1. # 45.52和45.53安装keepalived
  2. yum -y install keepalived
  3. # 45.52和45.53配置监控脚本
  4. cat > /etc/keepalived/chk_mysqld.sh <<EOF
  5. #!/bin/bash
  6. n=$(ps -C mysqld --no-headers | wc -l)
  7. if [ $n -eq 0 ]; then
  8. systemctl stop keepalived.service
  9. fi
  10. EOF
  11. chmod +x /etc/keepalived/chk_mysqld.sh
  12. # 生成VRRP验证密码
  13. [root@samba01 keepalived]# openssl rand -base64 7
  14. UyaWnJ/6LQ==
  15. # 45.52修改配置文件
  16. cd /etc/keepalived <<EOF
  17. mv keepalived.conf{,.bak}
  18. cat > keepalived.conf
  19. global_defs {
  20. notification_email {
  21. root@localhost
  22. }
  23. notification_email_from node1@localhost
  24. smtp_server 127.0.0.1
  25. smtp_connect_timeout 30
  26. router_id node1
  27. vrrp_mcast_group4 224.1.100.88
  28. }
  29. vrrp_script chk_mysqld {
  30. script "/etc/keepalived/chk_mysqld.sh"
  31. interval 10
  32. }
  33. vrrp_instance VI_1 {
  34. state BACKUP
  35. nopreempt
  36. interface ens32
  37. virtual_router_id 50
  38. priority 100
  39. advert_int 5
  40. authentication {
  41. auth_type PASS
  42. auth_pass UyaWnJ/6LQ==
  43. }
  44. virtual_ipaddress {
  45. 192.168.45.55
  46. }
  47. track_script {
  48. chk_mysqld
  49. }
  50. }
  51. EOF
  52. systemctl start keepalived.service
  53. systemctl enable keepalived.service
  54. systemctl status keepalived.service
  55. # 45.53修改配置文件
  56. cd /etc/keepalived
  57. mv keepalived.conf{,.bak}
  58. cat > /etc/keepalived <<EOF
  59. global_defs {
  60. notification_email {
  61. root@localhost
  62. }
  63. notification_email_from node2@localhost
  64. smtp_server 127.0.0.1
  65. smtp_connect_timeout 30
  66. router_id node2
  67. vrrp_mcast_group4 224.1.100.88
  68. }
  69. vrrp_script chk_mysqld {
  70. script "/etc/keepalived/chk_mysqld.sh"
  71. interval 10
  72. }
  73. vrrp_instance VI_1 {
  74. state BACKUP
  75. nopreempt
  76. interface ens32
  77. virtual_router_id 50
  78. priority 98
  79. advert_int 5
  80. authentication {
  81. auth_type PASS
  82. auth_pass UyaWnJ/6LQ==
  83. }
  84. virtual_ipaddress {
  85. 192.168.45.55
  86. }
  87. track_script {
  88. chk_mysqld
  89. }
  90. }
  91. EOF
  92. systemctl start keepalived.service
  93. systemctl enable keepalived.service
  94. systemctl status keepalived.service

3.2) 验证

  1. tail -f /var/log/messages
  2. ip a
  3. # 切换验证:
  4. 45.52
  5. systemctl stop mysqld.service
  6. # 45.53上会出现192.168.45.55的IP

四、安装nfs

4.1) 安装及配置

  1. # 45.52和45.53上安装
  2. yum -y install nfs-utils rpcbind
  3. systemctl enable rpcbind nfs-server nfs-lock nfs-idmap
  4. systemctl start rpcbind nfs-server nfs-lock nfs-idmap
  5. # 45.52上配置
  6. mkdir -p /opt/jumpserver/core/data
  7. chmod 777 -R /opt/jumpserver/core/data
  8. vi /etc/exports
  9. /opt/jumpserver/core/data 192.168.45.*(rw,sync,all_squash,anonuid=0,anongid=0)
  10. exportfs -a
  11. # 45.53上挂载
  12. mkdir -p /opt/jumpserver/core/data
  13. mount -t nfs 192.168.45.52:/opt/jumpserver/core/data /opt/jumpserver/core/data
  14. echo "192.168.45.52:/opt/jumpserver/core/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab

五、安装rsync和sersync

  1. # 45.53上新建备份目录
  2. mkdir -p /opt/jumpserver/core/data1
  3. chmod 777 -R /opt/jumpserver/core/data1
  4. # 45.53上配置rsync服务
  5. cat > /etc/rsyncd.conf <<EOF
  6. uid = nobody
  7. gid = nobody
  8. port = 873
  9. fake super = yes
  10. use chroot = no
  11. max connections = 200
  12. timeout = 600
  13. ignore errors
  14. read only = false
  15. list = false
  16. auth users = rsync_backup
  17. secrets file = /etc/rsync.passwd
  18. log file = /var/log/rsyncd.log
  19. #################################
  20. [backup]
  21. path = /backup
  22. [data]
  23. path = /opt/jumpserver/core/data1
  24. EOF
  25. echo "rsync_backup:Admin@1234" > /etc/rsync.passwd
  26. chmod 600 /etc/rsync.passwd
  27. systemctl restart rsyncd
  28. systemctl enable rsyncd
  29. 45.52 上安装sersync
  30. wget https://dsf.jb51.net/201111/tools/sersync_64bit_binary_stable_final.tar.gz
  31. tar xf sersync_64bit_binary_stable_final.tar.gz
  32. mv GNU-Linux-x86 /usr/local/sersync
  33. vi confxml.xml
  34. <?xml version="1.0" encoding="ISO-8859-1"?>
  35. <head version="2.5">
  36. <host hostip="localhost" port="8008"></host>
  37. <debug start="false"/>
  38. <fileSystem xfs="true"/>
  39. <filter start="false">
  40. <exclude expression="(.*)\.svn"></exclude>
  41. <exclude expression="(.*)\.gz"></exclude>
  42. <exclude expression="^info/*"></exclude>
  43. <exclude expression="^static/*"></exclude>
  44. </filter>
  45. <inotify>
  46. <delete start="true"/>
  47. <createFolder start="true"/>
  48. <createFile start="true"/>
  49. <closeWrite start="true"/>
  50. <moveFrom start="true"/>
  51. <moveTo start="true"/>
  52. <attrib start="true"/>
  53. <modify start="true"/>
  54. </inotify>
  55. <sersync>
  56. <localpath watch="/opt/jumpserver/core/data">
  57. <remote ip="192.168.45.53" name="data"/>
  58. <!--<remote ip="192.168.8.39" name="tongbu"/>-->
  59. <!--<remote ip="192.168.8.40" name="tongbu"/>-->
  60. </localpath>
  61. <rsync>
  62. <commonParams params="-az"/>
  63. <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.pass"/>
  64. <userDefinedPort start="false" port="874"/><!-- port=874 -->
  65. <timeout start="true" time="100"/><!-- timeout=100 -->
  66. <ssh start="false"/>
  67. </rsync>
  68. <failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once-->
  69. <crontab start="false" schedule="600"><!--600mins-->
  70. <crontabfilter start="false">
  71. <exclude expression="*.php"></exclude>
  72. <exclude expression="info/*"></exclude>
  73. </crontabfilter>
  74. </crontab>
  75. <plugin start="false" name="command"/>
  76. </sersync>
  77. <plugin name="command">
  78. <param prefix="/bin/sh" suffix="" ignoreError="true"/> <!--prefix /opt/tongbu/mmm.sh suffix-->
  79. <filter start="false">
  80. <include expression="(.*)\.php"/>
  81. <include expression="(.*)\.sh"/>
  82. </filter>
  83. </plugin>
  84. <plugin name="socket">
  85. <localpath watch="/opt/tongbu">
  86. <deshost ip="192.168.138.20" port="8009"/>
  87. </localpath>
  88. </plugin>
  89. <plugin name="refreshCDN">
  90. <localpath watch="/data0/htdocs/cms.xoyo.com/site/">
  91. <cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/>
  92. <sendurl base="http://pic.xoyo.com/cms"/>
  93. <regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/images"/>
  94. </localpath>
  95. </plugin>
  96. </head>
  97. echo "Admin@1234" > /etc/rsync.pass
  98. chmod 600 /etc/rsync.pass
  99. /usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml
  100. chmod +x /etc/rc.local
  101. echo "/usr/local/sersync/sersync2 -dro /usr/local/sersync/confxml.xml" >>/etc/rc.local

六、部署redis

  1. # 45.52和45.53部署redis
  2. yum -y install epel-release https://repo.ius.io/ius-release-el7.rpm
  3. yum install -y redis5
  4. sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf
  5. sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf
  6. sed -i "481i requirepass KXOeyNgDeTdpeu9q" /etc/redis.conf
  7. systemctl enable redis
  8. systemctl start redis

七、创建jumpserver数据库

  1. # 在45.52或45.53上创建
  2. create database jumpserver default charset 'utf8';
  3. set global validate_password_policy=LOW;
  4. create user 'jumpserver'@'%' identified by 'KXOeyNgDeTdpeu';
  5. grant all on jumpserver.* to 'jumpserver'@'%';
  6. flush privileges;
  7. exit

八、部署jms组件

  1. # 45.52和45.53上下载jumpserver
  2. cd /opt
  3. yum -y install wget
  4. wget https://github.com/jumpserver/installer/releases/download/v2.23.0/jumpserver-installer-v2.23.0.tar.gz
  5. tar -xf jumpserver-installer-v2.23.0.tar.gz
  6. cd jumpserver-installer-v2.23.0
  7. cat config-example.txt
  8. # 以下设置如果为空系统会自动生成随机字符串填入
  9. ## 迁移请修改 SECRET_KEY 和 BOOTSTRAP_TOKEN 为原来的设置
  10. ## 完整参数文档 https://docs.jumpserver.org/zh/master/admin-guide/env/
  11. ## 安装配置, 可以使用华为云加速下载, arm64 用户需要注释掉 DOCKER_IMAGE_PREFIX
  12. # DOCKER_IMAGE_PREFIX=swr.cn-south-1.myhuaweicloud.com
  13. VOLUME_DIR=/opt/jumpserver
  14. DOCKER_DIR=/var/lib/docker
  15. SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW
  16. BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q
  17. LOG_LEVEL=ERROR
  18. ## MySQL 配置, USE_EXTERNAL_MYSQL=1 表示使用外置 MySQL, 请输入正确的 MySQL 信息
  19. USE_EXTERNAL_MYSQL=1
  20. DB_HOST=192.168.45.55
  21. DB_PORT=3306
  22. DB_USER=jumpserver
  23. DB_PASSWORD=KXOeyNgDeTdpeu
  24. DB_NAME=jumpserver
  25. ## Redis 配置, USE_EXTERNAL_REDIS=1 表示使用外置 Redis, 请输入正确的 Redis 信息
  26. USE_EXTERNAL_REDIS=1
  27. REDIS_HOST=192.168.45.52
  28. REDIS_PORT=6379
  29. REDIS_PASSWORD=KXOeyNgDeTdpeu9q
  30. ## Compose 项目设置, 如果 192.168.250.0/24 网段与你现有网段冲突, 请修改然后重启 JumpServer
  31. COMPOSE_PROJECT_NAME=jms
  32. COMPOSE_HTTP_TIMEOUT=3600
  33. DOCKER_CLIENT_TIMEOUT=3600
  34. DOCKER_SUBNET=192.168.250.0/24
  35. ## IPV6 设置, 容器是否开启 ipv6 nat, USE_IPV6=1 表示开启, 为 0 的情况下 DOCKER_SUBNET_IPV6 定义不生效
  36. USE_IPV6=0
  37. DOCKER_SUBNET_IPV6=fc00:1010:1111:200::/64
  38. ## 访问配置
  39. HTTP_PORT=80
  40. SSH_PORT=2222
  41. MAGNUS_MYSQL_PORT=33060
  42. MAGNUS_MARIADB_PORT=33061
  43. MAGNUS_REDIS_PORT=63790
  44. ## HTTPS 配置, 参考 https://docs.jumpserver.org/zh/master/admin-guide/proxy/ 配置
  45. # USE_LB=1
  46. # HTTPS_PORT=443
  47. # SERVER_NAME=your_domain_name
  48. # SSL_CERTIFICATE=your_cert
  49. # SSL_CERTIFICATE_KEY=your_cert_key
  50. ## Nginx 文件上传大小
  51. CLIENT_MAX_BODY_SIZE=4096m
  52. ## Task 配置, 是否启动 jms_celery 容器, 单节点必须开启
  53. USE_TASK=1
  54. ## XPack, USE_XPACK=1 表示开启, 开源版本设置无效
  55. USE_XPACK=0
  56. RDP_PORT=3389
  57. MAGNUS_POSTGRE_PORT=54320
  58. ## Core 配置, Session 定义, SESSION_COOKIE_AGE 表示闲置多少秒后 session 过期, SESSION_EXPIRE_AT_BROWSER_CLOSE=true 表示关闭浏览器即 session 过期
  59. # SESSION_COOKIE_AGE=86400
  60. SESSION_EXPIRE_AT_BROWSER_CLOSE=true
  61. ## 组件配置
  62. CORE_HOST=http://core:8080
  63. JUMPSERVER_ENABLE_FONT_SMOOTHING=true
  64. TCP_SEND_BUFFER_BYTES=4194304
  65. TCP_RECV_BUFFER_BYTES=6291456
  66. ## 终端使用宿主 HOSTNAME 标识
  67. SERVER_HOSTNAME=${HOSTNAME}
  68. ## 额外的配置
  69. CURRENT_VERSION=
  70. # 启动
  71. ./jmsctl.sh install

九、切换

  1. # 当45.52无法启动后,需要在45.53手动切换目录
  2. rm -fr /opt/jumpserver/core/data
  3. mv /opt/jumpserver/core/data1 /opt/jumpserver/core/data